打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
简单的51单片机键盘C程序
爱你爱你94559711级分类:C/C++语言被浏览181次2013.05.26

检举

#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char

unsigned int updown=0; /*灯的流动方向*/
unsigned int start=0; /*灯开始流动显示*/
unsigned int stop=0; /*使灯停止流动显示*/

/*延时程序*/
void Delay(unsigned int time)
{
unsigned int j;
for(;time>0;time--)
{
for(j=0;j<124;j++)
{;}
}
}

/*按键获取程序*/
unsigned int Key()
{
uchar keyvalue;
keyvalue=P3;
keyvalue|=0xc3;
if((keyvalue|=0xc3)==0xff)
{
Delay(10);
if((keyvalue|=0xc3)==0xff)
{
return(0);
}
}
else
{
Delay(10);
if((keyvalue|=0xc3)!=0xff)
{
if((keyvalue|=0xfb)!=0xff)
{ return(1);}
if((keyvalue|=0xf7)!=0xff)
{ return(2);}
if((keyvalue|=0xef)!=0xff)
{ return(3);}
if((keyvalue|=0xdf)!=0xff)
{ return(4);}
}
}
}




/*按键处理程序*/
void Prokey(unsigned int keyvalue)
{
if(keyvalue==1)
{ start=1;
updown=1;
stop=0;
}
if(keyvalue==2)
{ start=1;
stop=1;}
if(keyvalue==3)
{ start=1;
updown=1;}
if(keyvalue==4)
{ start=1;
updown=0;}
}



void main()
{
unsigned int keyvalue; /*按键的数值*/
uchar lamp=0xfe; /*LED循环的数值*/
for(;;)
{
keyvalue=key(); /*获取按键值*/
Prokey(keyvalue);
if(start) /*开始灯的流动显示*/
{
if(stop)
{ P1=0xff;
lamp=0xfe;
}
else
{ if(updown)
{ P1=lamp;
lamp=_cror_(lamp,1);
}
else
{ P1=lamp;
lamp=_crol_(lamp,1);
}
}
Delay(500);
}
}
}

要完成的任务是:按下K1键,灯开始流动显示(由下往上);按下K2键,灯停止流动,所有灯为暗;按下K3键,灯由下往上流动;按下K4键。灯开始由上往下流动。
小弟自己编的程序,只能完成第一个任务,按下K2、K3、K4键都没用,请教各位大虾,这是什么原因???
采纳率:42%10级2013.05.26
A|=B; 等价于 A=A|B;
是先进行或运算,再把运算结果赋给A,之后的A已经不是原来的A了。

第一个键值判断后,你就键值变量已经被赋予新的值了。

如果正好按的是第一个键则能返回1,
如果不是第一个键按下,但经过 if((keyvalue|=0xfb)!=0xff)这一判断,其中的“keyvalue|=0xfb”就把keyvalue变成0xff了,后面的判断条件自然不会满足。

把这里的一些等于号再去掉试试看。

另外,建议你对于按键扫描程序使用switch case 语句,这样条理更清晰。


/*按键获取程序*/
unsigned int Key()
{
uchar keyvalue;
keyvalue=P3;
keyvalue|=0xc3;
if((keyvalue|0xc3)==0xff)
{
Delay(10);
if((keyvalue|0xc3)==0xff)
{
return(0);
}
}
else
{
Delay(10);
if((keyvalue|0xc3)!=0xff)
{
if((keyvalue|0xfb)!=0xff)
{ return(1);}
if((keyvalue|0xf7)!=0xff)
{ return(2);}
if((keyvalue|0xef)!=0xff)
{ return(3);}
if((keyvalue|0xdf)!=0xff)
{ return(4);}
}
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
出租车计费器
创维2.8液晶屏驱动程序(二)(HX8347)
单片机
蜂鸣器演奏老鼠爱大米
彩灯
矩阵键盘C语言程序+电路图(51单片机)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服