求解读51单片机用四个按键独立控制四个led的c程序

#include<reg51.h>//k2~k4分别控制le1~le4voiddelay(unsignedintx){while(x--);}voidkey_event(... #include<reg51.h>
//k2~k4 分别控制le1~le4
void delay(unsigned int x)
{
while(x--);
}
void key_event (unsigned char d)
{
switch(d)
{
case 14: P1^=(1<<0); break; //k1
case 13: P1^=(1<<1); break;//k2
case 11: P1^=(1<<2); break;//k3
case 7: P1^=(1<<3); break; //k4
//
default: P1^=(1<<7); break;
}
}

void key()
{
static char i;
unsigned char a;
unsigned char b;
a=P2;//0000aaaa ,00007654 3210;
a>>=4;//a=a>>4;
if(a!=15)//至少有个键按下
{
if(i==0)
{
delay(1000);
b=P2;
b>>=4;
if(a==b)
{
key_event(b) ;
i=1;
}
}
}
else
{
i=0;
}
}

void main()
{
while(1)
{
key();

}
}
谢谢
展开
 我来答
cjj796
2013-09-08 · TA获得超过8702个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3375万
展开全部
#include<reg51.h>
//k2~k4 分别控制le1~le4 
void delay(unsigned int x) //延时函数
{
  while(x--);  //延时数减一
}
 void key_event (unsigned char d) //根据扫描到的键值,亮相应的LED
 {
   switch(d)
  {
  case 14: P1^=(1<<0); break; //k1 键按下了
  case 13: P1^=(1<<1);  break;//k2键按下了
  case 11: P1^=(1<<2);  break;//k3键按下了
  case 7:  P1^=(1<<3);  break;//k4键按下了
   //
  default: P1^=(1<<7);  break;//缺省值,都不亮
  }
}
 
void key()  //按键扫描
{
 static char i;
 unsigned char a;
 unsigned char b;
 a=P2;//0000aaaa ,00007654 3210;
 a>>=4;//a=a>>4; //移动4位,a 取值
 if(a!=15) //至少有个键按下
 {
   if(i==0) //0 的时候,标示没有建按下
   {
     delay(1000); //延时 1000次
b=P2; //把按键的口赋给变量 b
b>>=4; //移动四位,b 取值
if(a==b) //如果a和b相等
{
 key_event(b) ; //这次按键有效
 i=1; //1 不允许其它键按下
}
   }
 }
 else
 {
  i=0; //不是有效键按下,清 0 
 }
}
void main() //主函数开始
{
 while(1) //进入循环,检测按键按下情况
 {
   key();
  
 }
}
追问
你好为什么要a==b按键才有效呢
走在时间的前头
2013-09-08 · TA获得超过200个赞
知道小有建树答主
回答量:662
采纳率:0%
帮助的人:178万
展开全部
这个比较简单的,在程序上的处理不用像你这么复杂,需要可以叫我,我这里有一些资料,可以交流一下,多谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式