STC12C5A60S2(51单片机)驱动3X3矩阵键盘的问题。

本文介绍了如何使用STC12C5A60S2单片机高效地驱动3x3矩阵键盘,避免影响其他IO口。通过参考文献和深入思考,作者推导出一套位操作算法,实现了只改变所需IO口状态,节省了IO口资源。并提供了51单片机3x3矩阵键盘的驱动程序下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境(蓝色粗体字为特别注意内容)
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值