完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/* 名称:K1-K4 分组控制LED 说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始, K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED */ #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) for(i=0;i<120;i++); } //主程序 void main() { uchar k,t,Key_State; P0=0xff; P1=0xff; while(1) { t=P1; if(t!=0xff) { DelayMS(10); if(t!=P1) continue; //取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1) //变为模式0000XXXX(X 中有一位为1,其他均为0) Key_State=~t>>4; k=0; //检查1 所在位置,累加获取按键号k while(Key_State!=0) { k++; Key_State>>=1; } //根据按键号k 进行4 种处理 switch(k) { case 1: if(P0==0x00) P0=0xff; P0<<=1; DelayMS(200); break; case 2: P0=0xf0;break; case 3: P0=0x0f;break; case 4: P0=0xff; } } } } ![]() |
|
相关推荐
3个回答
|
|
if(t!=P1) continue; //取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1) //变为模式0000XXXX(X 中有一位为1,其他均为0) Key_State=~t>>4; k=0; //检查1 所在位置,累加获取按键号k while(Key_State!=0) { k++; Key_State>>=1; } //根据按键号k 进行4 种处理 switch(k) { case 1: if(P0==0x00) P0=0xff; P0<<=1; DelayMS(200); break; case 2: P0=0xf0;break; case 3: P0=0x0f;break; case 4: P0=0xff; } } } } 举个例子估计你就明白了。 当你按下p1.4按键时,P1=11101111,t=P1=11101111. if(t!=0xff)//t!=0xff为真 { DelayMS(10);延时消抖动 if(t!=P1) continue;如果是抖动干扰则跳到if重新判断 执行“Key_State=~t>>4;”,t先按位取反再向右移动4位,变成00000001,key_State=00000001. while(Key_State!=0) { k++; Key_State>>=1; } 这个while循环语句起到取键值作用,key_State=00000001,“Key_State!=0”为真进入循环体,K→1, key_State右移一位变成0,结束循环,关键就在这里,如果是P1.5=1,k就为2.(自己可以推倒一下) 接下来进入switch,进行判断,这下应该明白了吧? 评分
|
|||
|
|||
自己慢慢学
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之变量
253 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之本地脚本的编写和执行
484 浏览 0 评论
【xG24 Matter开发套件试用体验】深入了解Silicon Labs xG24 Matter开发套件
647 浏览 0 评论
559 浏览 0 评论
587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10925 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-31 13:30 , Processed in 0.598229 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191