文号
t38722
阅读
16443
回复
19
收藏
17
单片机C语言中判断引脚是否有输入的语句是什么?
2011/12/16
IP:河北
就是这个电路,当开关按下时,单片机P1.2上的灯就会亮,好像是用IF,但不太会 未命名.bmp
15年1个月前IP:未同步
344916
1楼
电路有误,一般IO口接上拉电阻到VCC,开关接地
按下开关后IO变成0电平
那么可以这样写
sbit key=P1^0;
sbit LED=P1^1;
void main(void)
{
    while(1)
    {
     key=1;//先为IO赋值高电平
     if(!key)//读取IO状态,判定是否按下,按下为0电平
        LED=1;
     esle
        LED=0;
     }
}
引用
评论
15年1个月前IP:未同步
344919
2楼
首先在程序之前对你开关的引脚尽享sbit位声明:sbit P10=P1^0(假设1^0是你的开关)
然后在你需要的时候写if语句:
if(P10==0)
  {
   P1^2=0;(这里,我默认你发光二级管为低电平有效,因为我不知道你电路是怎么接的。)
  }
需要注意的是,51单片机初始状态默认为高电平。但是有时候为了保险,会在刚进入主函数的时候加一句复位语句,确保是在高电平工作状态下。
另外,一定要先写位声明,再用你的声明的名字写在if语句里。这样if才会进行判断。
注意引脚定义的大小写问题。
+50
科创币
zhaokenb
2011/12/17
热心助人
引用
评论
14年11个月前IP:未同步
362904
3楼
按键在实际硬件中还要注意防抖,可以写一个去抖程序:
sbit key=P1^0
sbit led=P1^1
void main()
{
if(key)
   {delay(50);//加上适当的延时函数
     if(key)  //再次检查按键是否按下
      {led=1;
       while(key);//按下不放时候进入死循环
      }
   }
}
+26
科创币
血狼
2012/02/06
引用
评论
14年10个月前IP:未同步
369948
4楼
实际电路中,按键要加上拉电阻或下拉电阻,并接104电容消除高频抖动。发光二极管要串电阻。
+1
科创币
wenrui
2012/10/28
按键去抖动可以用软件去抖
引用
评论
14年10个月前IP:未同步
369954
5楼
回 4楼(tiankong2233) 的帖子
可以程序去逗的哦~~不过能自己说说你的设计吗?我还真没听说过你的这个电路。谢谢啦~~~
引用
评论
14年10个月前IP:未同步
369981
6楼
引用第1楼ehco于2011-12-16 20:42发表的  :
电路有误,一般IO口接上拉电阻到VCC,开关接地
按下开关后IO变成0电平
那么可以这样写
sbit key=P1^0;
sbit LED=P1^1;
.......




输出为嘛要上拉,不明白
引用
评论
14年6个月前IP:未同步
418995
7楼
亲 AVR中没有 Sbit
引用
评论
14年4个月前IP:未同步
443349
8楼
悄悄地问一句,现在问问题不会被骂了吗
引用
评论
14年4个月前IP:未同步
443353
9楼
用的是啥编译器?
引用
评论
14年4个月前IP:未同步
443578
10楼
D1和P1.2之间要接一条线   过一个电阻连VCC   不过电阻应该用多少欧的我忘记了。。。
引用
评论
14年4个月前IP:未同步
443671
11楼
51的P1口是准双向口,实际就是个OD门,内置上拉电阻。高电平输出就是靠这个上拉电阻实现的,最多只能输出几百微安的电流,因此高电平驱动不了发光管。下拉是由FET实现的,电流能力较强,所以点LED要用口线的低电平点。置于输入态的话,上拉电阻还是在起作用,可以直接接按键到地。要把电路先改合理。
引用
评论
14年4个月前IP:未同步
443672
12楼
晕,原来是挖坟贴。
引用
评论
14年4个月前IP:未同步
443729
13楼
看看这个,就都明白了,我就是看的这个
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
引用
评论
14年3个月前IP:未同步
460120
14楼
int 按键检测函数(void)
{
     if(某引脚输入低电平)
    {
       延迟消陡;

        if(某引脚输入低电平)//在判断一次
        {
             while(低电平);//等待按键结束
             return(1);
        }
        else
              return(0);    
    }
    else
            return(0);
}
引用
评论
14年2个月前IP:未同步
465030
15楼
来个不要延时的,也没有用while,独立键盘一直用这种。

#include <reg52.h>
sbit K2=P1^1;
bit  K20=0;
if(K2==0)
    {
        if(K20==0)
        {
            fen++;
            K20=1;
            if(fen==60)
            {
                fen=0;
            }
        }
    }
    else
    {
        K20=0;
    }
引用
评论
12年0个月前IP:北京
735677
16楼
51的单片机除了p0口  其余的默认就是高电平,内部有上拉电阻,开关应该接地, 判断是否有输入直接用if就可以, if(p0^0!=1)
引用
评论
12年0个月前IP:湖北
735691
17楼
引用 乖乖乖:
输出为嘛要上拉,不明白
像MCU,FPGA,CPLD这些其实在工作时电平时不稳定,我亲测过FPGA的引脚悬空时的情况,不加上拉或下拉电平时未知的,实际用得过程中就会发现很坑爹,当时我搞飞思卡尔时用MK60系列MCU时一队友为了省事,把判断起跑线的传感器的端口的上拉电阻去了,结果差点被坑死了
引用
评论
12年0个月前IP:辽宁
737433
18楼
引用 903441710:
亲 AVR中没有 Sbit
他这个是51的啊。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的