下面我们来动手编写4X4矩阵键盘的程序,按键检测程序如下
程序中我们先设置连接矩阵键盘的PD口的高四位为输出口(作为行线),低四位为输入口(作为列线),然后先控制第一根行线输出低电平(其余行线输出高电平),逐列检测4根列线的电平状态,如果其中一根列线为低电平,那么这根列线与设置为输出低电平的行线交叉出的按键就是被按下的按键,计算出按键编码。如果这一行所有列线都为高电平,说明该行没有按键按下,那么接下来控制第二根行线输出低电平继续检测,直到设置第四根行线为低电平。
unsigned char i,j;
DDRD = 0xf0; //设置PD高四位为输出口,低四位为输入口
PORTD = 0x00; // 初始运行输出全为0
if((PIND & 0x0f) == 0x0f) return 16; // 判断有无按键动作,没有,返回0
else
{
Delayms(20); //按键消抖
if((PIND & 0x0f) == 0x0f) return 16; //再次判断是否有按键动作
else
{
for(i = 4;i < 8;i++) //逐行输出0
{
PORTD = ~(1 << i) | 0x0f; //第i行输出0
for(j = 0;j < 4;j++)
{
if((PIND & (1 << j)) == 0) //逐列检测
KeyNumber = (i - 4) * 4 + j; //计算键值
}
}
return KeyNumber; //
完整代码
#include <avr/io.h> //io端口寄存器配置文件,必须包含
#include <util/delay.h> //GCC中的延时函数头文件
unsigned char Led_Disbuf[17]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xff}; //共阳极
unsigned char KeyNumber;
//函数声明
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余4页未读,立即下载