开发环境(蓝色粗体字为特别注意内容)
1,开发板:STC12C5A60S2,3x3矩阵键盘。
2,开发环境:Keil uv5
1,开发板:STC12C5A60S2,3x3矩阵键盘。
2,开发环境:Keil uv5
3、参考文献:http://www.360doc.com/content/17/0829/12/2289804_682989833.shtml
一个项目中要用到矩阵键盘,之前只是用过4x4的矩阵键盘,本来想拿过来直接用,后来发现,3x3矩阵键盘就够了,用4x4矩阵键盘需要8个IO口(行4个列4个)有点浪费,其他IO口还有其他用处。
但这时候问题就来了,用3x3矩阵键盘的时候,需求是扫描行线列线时不能影响其余两个IO口,我的接线方式如下:
P1.0 <---> ADC
P1.1 <---> 行线1
P1.2 <---> 行线2
P1.3 <---> 行线3
P1.4 <---> 列线1
P1.5 <---> 列线2
P1.6 <---> 列线3
P1.7 <---> 其他
51单片机如何高效操作某几个IO口同时不影响其余的IO口呢?
想到了用位操作,试了多种操作方式,还是不妥。于是看到了文章前面参考文献,才恍然大悟。经过深入的思考,终于推算出一套有效的算法,具体算法如下:
P1(IO口) 0 1 2 3 4 5 6 7
起始状态 ? ? ? ? ? ? ? ? Hex:0x??
目标状态 ? 1 1 1 0 0 0 ? "?"表示不改变的位
P1 & = 1 0 0 0 0 0 0 1 需要改变的位置为9,不需要改变的位为1, Hex:0x81
= ? 0 0 0 0 0 0 ?
P1 | = 0 1 1 1 0 0 0 0 需要改变的位置为相应的数,不需要改变的位置为0
= ? 1 1 1