完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void main()
{ P0 = 0xFF; while(1) { Keys_Scan(); if (keyNo == 0xFF) {delay_ms(10);continue;} P0 = SEG_CODE[keyNo];Beep(); while (Keys_Scan(), keyNo != 0xFF); } } void Keys_Scan() { P1=0x0F;delay_ms(1); // if(P1=0x0F){keyNo=0xFF;return;} //无按键按下时提前返回 //按键后00001111将变成0000XXXX,X中1个为0,3个为1 //下面判断按键发生在0~3列中的那一列 switch(P1) { case 0x0E:keyNo = 0; break; case 0x0D:keyNo = 1; break; case 0x0B:keyNo = 2; break; case 0x07:keyNo = 3; break; default: keyNo = 0xFF;return; } P1 = 0xF0; delay_ms(1); //判断按键发生在哪一行并且加上列号确定准确的位置 switch (P1) { case 0xE0: keyNo +=0; break; case 0xD0: keyNo +=4; break; case 0xB0: keyNo +=8; break; case 0x70: keyNo +=12;break; default: keyNo = 0xFF; } } |
|
相关推荐
11个回答
|
|
你有仔细看if(P1=0x0F){keyNo=0xFF;return;}这一句吗?你有学过C吗?if(P1=0x0F)是什么意思?
if(P1=0x0F)永远是成立的,所以永远不会执行这之后的代码 |
|
|
|
将这句话去掉之后,按键扫面程序就能成功运行,我自己推测了一下,应该是Keys_Scan()每次运行就在if(P1=0x0F){keyNo=0xFF;return;}这句话提前返回了,不知道我说的对不对,求大神指点一下。另外,如果要加入这个功能,应该如何修改呢?
|
|
|
|
你要认真学习呀,我都这么说了,你也还看不出问题!非要最终明确的答案不可吗?这样你很难提高的.按照下面修改就可以了.
if(P1==0x0F){keyNo=0xFF;return;} |
|
|
|
4楼说得对呀,c语言判断相等是==,=是赋值
|
|
|
|
C语言里面的毛病.条件语句里 可以使用赋值符号=,导致条件语句相等要使用==,实际上可以设计为条件语句里面不可以赋值就行了.那样的话不用==符号了.可惜了,C语言的设计者没有这么想.
|
|
|
|
当年设计的时候还要考虑编译效率和统一性 , 能有个 C 就不错了 , 加个关键字都要详细讨论 , 别说加这种嵌套性规则了 .
|
|
|
|
一般来说要养成 条件判断语句中 这样写 if(0xff==P1) 即使出现写成 if(0xff=P1) 编译时就过不了,以便及时发现错误。
|
|
|
|
这个编译器应该有警告的,楼主没有注意吧
|
|
|
|
应该是if(P1==0x0F) ,不是等号。
|
|
|
|
这货“ if(P1=0x0F)” = 这货“if(1)”
|
|
|
|
这样编译会有警告的 不要忽略编译警告哦
|
|
|
|
只有小组成员才能发言,加入小组>>
2970 浏览 9 评论
2687 浏览 16 评论
3212 浏览 1 评论
8426 浏览 16 评论
3770 浏览 18 评论
6950浏览 6评论
求助,请问MS51FB9AE带隙电压能作为侦测的基准电压吗?
7449浏览 3评论
6950浏览 3评论
支持UART-to-BLE透传的新唐NuTool – BLE ATCMD开发工具推荐
5798浏览 3评论
9370浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 08:04 , Processed in 1.066151 second(s), Total 100, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号