写程序过程中有这么一个疑问,请大家帮忙

[复制链接]
2238|12
 楼主| 海川先生 发表于 2013-10-30 09:26 | 显示全部楼层 |阅读模式
pic, pi, se, ST, tc
  •                 case 2:{
  •                         if(PORTC & 0b01111110 == 0b01111110){  //按键被释放状态改变
  •                                 key_state = 0;
  •                         }        
  •                         break;
  •                 }

                  case 2:{
                        key_tmp = PORTC & 0b01111110;
                        if(key_tmp == 0b01111110){       //按键被释放状态转移
                                key_state = 0;                       
                        }
                        break;
                 }

按键扫描的程序,这两个执行结果为什么不一样呢,不就是一个直接读端口就判断,另个一
是先读出来暂存一下再判断,怎么会有差别。用的是PIC16F690  PICC的编译器。
               



ayb_ice 发表于 2013-10-30 09:42 | 显示全部楼层
在不同的状态判断按键而已,然后转入新的状态而已
dirtwillfly 发表于 2013-10-30 09:43 | 显示全部楼层
要考虑按键的颤抖
lirunze 发表于 2013-10-30 09:46 | 显示全部楼层
也可硬件防抖啊
香水城主 发表于 2013-10-30 10:13 | 显示全部楼层
加个括号:
if ((PORTC & 0b01111110) == 0b01111110){  //按键被释放状态改变

& 的优先级比 == 的优先级低,你的写法相当于:
if(PORTC & (0b01111110 == 0b01111110)){  //按键被释放状态改变
 楼主| 海川先生 发表于 2013-10-30 10:50 | 显示全部楼层
香水城主 发表于 2013-10-30 10:13
加个括号:
if ((PORTC & 0b01111110) == 0b01111110){  //按键被释放状态改变

谢谢 你说的对。
黄小俊 发表于 2013-10-30 19:31 | 显示全部楼层
香水城主 发表于 2013-10-30 10:13
加个括号:
if ((PORTC & 0b01111110) == 0b01111110){  //按键被释放状态改变

不对吧。&是放在括号里的,括号的优先级可是最高的。
qqlvjh 发表于 2013-10-30 21:01 来自手机 | 显示全部楼层
优先级呀
outstanding 发表于 2013-10-31 08:23 | 显示全部楼层
应该是一样的,难道你的PORTC 的值不一样?
yanyanyan168 发表于 2013-10-31 08:29 | 显示全部楼层
同意5#
peugeoter 发表于 2013-11-1 17:45 | 显示全部楼层
吃过优先级苦的飘过,现在桌面上就贴了张优先级表,哈哈。找这种BUG会搞死人的
 楼主| 海川先生 发表于 2013-11-1 20:18 | 显示全部楼层
peugeoter 发表于 2013-11-1 17:45
吃过优先级苦的飘过,现在桌面上就贴了张优先级表,哈哈。找这种BUG会搞死人的 ...

同意
lhchen922 发表于 2013-11-1 20:31 | 显示全部楼层
同意5#
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

200

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部