找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1661|回复: 5
收起左侧

51单片机独立按键问题

[复制链接]
ID:538271 发表于 2019-5-15 18:04 | 显示全部楼层 |阅读模式
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit k1=P3^1;
sbit led=P2^2;
void delay(u16 i)
{
        while(i--);       
}

void display()
{
   if(k1==0

   {
       delay(100);
           if(k1==0)       

           {
             led=~led;  // 这一步 为啥取反?  让LED为0 为啥按一下就一直亮 不能熄 了
           }
            while(!k1)
   }                  

}

void main()
{

while(1)


  {       
   display();
  }
}

回复

使用道具 举报

ID:388477 发表于 2019-5-16 09:20 | 显示全部楼层
led是P2^2口,led要不是0(低电平)要不是1(高电平),led=0时灯就亮,等于1时就灭,刚上电,单片机管脚都是高电平,灯是灭的,当按键按下去,就有高电平变为低电平,为什么会保持这种低电平呢,是因为主函数里面有while(1),每按一次,状态就取反,并且保持这个状态。
回复

使用道具 举报

ID:539593 发表于 2019-5-16 09:54 | 显示全部楼层
第一个问题:取反是为了将LED灯的状态反转,第一次按键LED=1,灯灭;第二次按键LED=0,灯亮;依次循环。
第二个问题:当LED为0时,只要按依次按键,LED就会为0,常亮,不能熄灭(因为没有写1的程序)。
回复

使用道具 举报

ID:52944 发表于 2019-5-16 14:34 | 显示全部楼层
取反即改变电平,电平改变亮灭改变
回复

使用道具 举报

ID:52944 发表于 2019-5-16 14:35 | 显示全部楼层
按一下电平变化一次,不按时当然保持原状态
回复

使用道具 举报

ID:517518 发表于 2019-5-16 15:37 | 显示全部楼层
只有按键按下之后才能运行到这一句,所以按过一次后LED被点亮,如果不按那LED的控制端口就一直报纸原来的电平状态哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表