中易网

求注释,单片机按键程序

答案:2  悬赏:20  
解决时间 2021-02-16 12:48

#include
#include
unsigned char scan_key();
void proc_key(unsigned char key_v);
void delayms(unsigned char ms);
sbit K1 = P0^0; //对应按钮K1
sbit K2 = P0^1; //对应按钮K2
main()
{
unsigned char key_s,key_v;
key_v = 0x03;
P2 = 0xfe;
while(1)
{
key_s = scan_key();
if(key_s != key_v)
{
delayms(10);
key_s = scan_key();
if(key_s != key_v)
{
key_v = key_s;
proc_key(key_v);
}
}
}
}
unsigned char scan_key()
{
unsigned char key_s;
key_s = 0x00;
key_s |= K2;
key_s <<= 1;
key_s |= K1;
return key_s;
}
void proc_key(unsigned char key_v)
{
if((key_v & 0x01) == 0)
{
P2 = _cror_(P2,1);
}
else if((key_v & 0x02) == 0)
{
P2 = _crol_(P2, 1);
}
}
void delayms(unsigned char ms) // 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
最佳答案
main()
{
unsigned char key_s,key_v;
key_v = 0x03;
P2 = 0xfe;
while(1)
{
key_s = scan_key();
if(key_s != key_v) //两次键值不一样时表示有新按键,否则做抖动处理
{
delayms(10);
key_s = scan_key(); //延时10MS后再将一次键值
if(key_s != key_v) //确定是新键按下
{
key_v = key_s; //更新按键状态
proc_key(key_v); //根据键值完成相应动作
}
}
}
}
全部回答
loop: jnb key1,tokey1 jnb key2,tokey2 jnb key3,tokey3 jnb key4,tokey4 . . . ljmp loop tokey1: lcall d10ms ;按键去抖动 jb key1,loop lcall display ;数码管扫描程序 ajmp loop
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
《菊花》作文500字仿照《荷花》这一课写的(有
借钱跑了算什么罪
求郭德纲《张生闹五更》完整歌词,谢谢。
请问各位从事监理公司的标书制作员的工资是多
有谁出口过印度H型钢吗,客户说工厂需要有BIS
最近在一个老游戏 暗黑破坏神暗月世界DM3.320
怎么打理蘑菇街店铺
cf创建房间怎么开启手斧模式?最新版本的
北京同仁堂的化妆品哪有卖的?
跑步30分钟消耗多少千焦能量
青龙、白虎、玄武、朱雀是“晓”组织四个人的
阿里通网络电话怎么发短信好用吗?
炖肉胡辣汤在什么地方啊,我要过去处理事情
造梦西游麻ol婆药剂怎么弄
樵子涧水库在什么地方啊,我要过去处理事情
推荐资讯
入户不合格是什么意思?
金鹏玻璃滑动门这个地址在什么地方,我要处理
妙不可言的意思
怎么防止别人用自己的话费在电脑上开通会员
林州市畅丰车桥有限公司地址有知道的么?有点
芷字五行属什么的
想去考摩托车驾照!能不能不去驾校学习,直接
金菜地食品黄山西路店地址在哪,我要去那里办
车窗贴纸要罚款?见过哪些恐怖车贴
歌手名字里有个健字的叫什么
开水溅到脸上会不会留疤痕
深圳有做足球的厂吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?