行列检测

PIC16F883实现按键行列扫描,准确识别按键,数码管显示按键编号

倾然丶 夕夏残阳落幕 提交于 2020-12-23 19:25:01
控制芯片:PIC16F883 引脚图: 按键连接图: 四位数码管连接:四个共阴极分别连接PORTA<3:0>,8段数码管分别连接PORTC<7:0>,PORTB<4,2:0>分别连接按键的四个I/O引脚。 我在PORTC上连接了数码管,按键进行编号。按键时数码管会显示对应的编号。 简单说明: 我是改变PORTB引脚的设置(TRISB,PORTB),写了后立刻读取PORTB引脚的值,检查连接按键的引脚——值为0的引脚有按键按下。比如上图,PORTB<4,2,1,0>引脚全设置为输入时,读取PORTB寄存器的值。若我按下了S7,PORTB4就是0值(同理S8\S9\S10)。我们微机原理老师强调一定先检测S7\S8\S9\S10。我没试过先检测其他按键的情况,是按照老师的提示做的。下次更改设置:PORTB4设为输出低电位(0),其他三个引脚都设置为输入。读取PORTB<2,1,0>引脚的值,S5\S1\S2中某一按键被按下就可以在PORTB<2,1,0>对应的引脚检测到。就这样扫描所有按键,有按键按下就会调用按键处理程序。 实现代码如下: #include<p16f883.inc> udata_shr counter res 1 ;延时计数 counter0 res 1 ;延时计数 counter1 res 1 ;扫描按键变量 counter2 res 1 ;延时程序微调参数 key