完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
temp 去掉,直接用P1 代替 , 这样有什么区别吗 ??
void keyscan(void) { P1=0xF0; //高四位输入 列为高电平 行为低电平 delay(1); temp=P1; //延时 //读P1口 temp=temp&0xF0; //屏蔽低四位 temp=~((temp>>4)|0xF0); if(temp==1) // p1.4 被拉低 key=1; //第1个按键键值 else if(temp==2) // p1.5 被拉低 key=2; //第2个按键键值 else if(temp==4) // p1.6 被拉低 key=3; //第3个按键键值 else if(temp==8) // p1.7 被拉低 key=4; //第4个按键键值 else key = 16; P1=0x0F; //低四位输入 行为高电平 列为低电平 delay(1); //延时 temp=P1; //读P1口 temp=temp&0x0F; temp=~(temp|0xF0); if(temp==2) //第一行 p1.1 被拉低(直接P1==2 是因为我们P1.0空的,是3*4的矩阵键盘) key=key+0; else if(temp==4) //第二行 p1.2 被拉低 key=key+4; else if(temp==8) //第三行 p1.3 被拉低 key=key+8; else key = 16; |
|
相关推荐
7个回答
|
|
这个算法不可以用P1直接代替。
|
|
|
|
|
|
|
|
不行的!!!因为temp 读取的是 P1 的状态,它保留的是 P1的状态,如果你用 P1 = xxxx,那么 P1 的状态就被你强行改变了,,不能读取按键的状态了。!懂了撒?
|
|
|
|
temp只是开辟了个存储空间,作为键码缓存处理用。肯定不能用P1代替了。
解释P1:其是reg52.h中定义的sfr(特殊功能寄存器)类型的。实体P1口被映射到单片机内RAM高128B的地址中。操作P1类似读写片内RAM。而对P1的操作,会反映在P1口上,也就是说P1口会相应的被置位、清零。 temp:你自定义的变量,开辟空间在片内RAM低128B内。不会造成外设的动作。 假设你P1替换了temp,那么与逻辑相悖了。具你的这句代码来说:temp=temp&0xF0;换成P1,那么P1口就会受到影响。从而影响你键值的输入和判断。因为你这个逻辑,P1是要此刻等于0xf0的,也就是判断4x4中某行被选中。 |
|
|
|
现在懂了,真心感谢你的解答!!!谢谢 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1639 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
976 浏览 0 评论
3035 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2664 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1811 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
6413 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-9 01:16 , Processed in 0.550769 second(s), Total 54, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号