永发信息网

单片机I/O口高四位和低四位的问题(不知如何表达。。)

答案:1  悬赏:20  手机版
解决时间 2021-03-08 22:57
  • 提问者网友:几叶到寒
  • 2021-03-08 10:07
各位高手,我这只菜鸟正在学矩阵键盘,但发现按键时横的变成竖的,就像把键盘向右旋转90°一样,我检查了一上午(今天中秋节啊~),发现只有把该IO口的杜邦线旋——转180°,就好了。于是我陷入了困顿。。我检测一下当如果给IO口送十六进制的数时,不知道高四位是P3.0到P3.3,还是第四位才是。。。我好乱啊~~大哥们帮小弟解围吧!!感谢了!!(键盘的结构图已贴出来了,用自带的画图软件。。。)
最佳答案
  • 五星知识达人网友:孤独入客枕
  • 2021-03-08 11:04
<p>//键盘求值程序</p> <p>uncharscankey(void)</p> <p>{</p> <p>unchartemp,c,d;</p> <p> P2=0x0f;</p> <p> temp=P2;</p> <p>temp=temp&0x0f;//屏蔽高四位,取列值</p> <p>temp=~(temp|e79fa5e98193e59b9ee7ad94313333353235340xf0);//将temp中的内容与0xf0进行相加,最后求反可得到是那列按下</p> <p>if(temp==1)</p> <p>c=0;//P2.0位低电平</p> <p>elseif(temp==2)</p> <p>c=1;//P2.1位低电平</p> <p>elseif(temp==4)</p> <p>c=2;//P2.2位低电平</p> <p>elseif(temp==8)</p> <p>c=3;//P2.3位低电平</p> <p>else</p> <p>c=0;//否则给返回值C=0</p> <p>P2=0xf0;//给P2的行为高电平,以来判断是高四为的那位为低电平</p> <p>delay(1);</p> <p>temp=P2;</p> <p>temp=temp&0xf0;//屏蔽低四位</p> <p>temp=~((temp>>4)|0xf0);//将temp中的高四位向右移动4位,与0xf0相加,最后求反可以得到是那行按下</p> <p>if(temp==1)</p> <p>c=c+0;//将行P2.4的值加上列的值</p> <p>elseif(temp==2)</p> <p>c=c+4;//将行P2.5的值加上列的值</p> <p>elseif(temp==4)</p> <p>c=c+8;//将行P2.6的值加上列的值</p> <p>elseif(temp==8)</p> <p>c=c+12;//将行P2.7的值加上列的值</p> <p>else</p> <p>c=0;</p> <p> d=tab2[c];</p> <p>return(d);//最后返回行加列的值</p> <p>}</p> <p>你把这个程序看懂了。估计你的问题也就解决了。希望对你有所帮助哦!!</p> <p></p>

记得采纳啊
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯