4x4的矩阵键盘鬼键51单片机示例
时间: 2023-10-21 09:04:03 浏览: 70
以下是一个4x4矩阵键盘的鬼键51单片机示例代码:
```
#include <reg51.h>
sbit ROW1 = P2^0;
sbit ROW2 = P2^1;
sbit ROW3 = P2^2;
sbit ROW4 = P2^3;
sbit COL1 = P2^4;
sbit COL2 = P2^5;
sbit COL3 = P2^6;
sbit COL4 = P2^7;
unsigned char key_code;
void delay_ms(unsigned int t) //延时函数
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void key_scan() //键盘扫描函数
{
ROW1 = 0; ROW2 = 1; ROW3 = 1; ROW4 = 1; //扫描第一行
if(COL1 == 0) { key_code = '1'; while(!COL1); return; }
if(COL2 == 0) { key_code = '2'; while(!COL2); return; }
if(COL3 == 0) { key_code = '3'; while(!COL3); return; }
if(COL4 == 0) { key_code = 'A'; while(!COL4); return; }
ROW1 = 1; ROW2 = 0; ROW3 = 1; ROW4 = 1; //扫描第二行
if(COL1 == 0) { key_code = '4'; while(!COL1); return; }
if(COL2 == 0) { key_code = '5'; while(!COL2); return; }
if(COL3 == 0) { key_code = '6'; while(!COL3); return; }
if(COL4 == 0) { key_code = 'B'; while(!COL4); return; }
ROW1 = 1; ROW2 = 1; ROW3 = 0; ROW4 = 1; //扫描第三行
if(COL1 == 0) { key_code = '7'; while(!COL1); return; }
if(COL2 == 0) { key_code = '8'; while(!COL2); return; }
if(COL3 == 0) { key_code = '9'; while(!COL3); return; }
if(COL4 == 0) { key_code = 'C'; while(!COL4); return; }
ROW1 = 1; ROW2 = 1; ROW3 = 1; ROW4 = 0; //扫描第四行
if(COL1 == 0) { key_code = '*'; while(!COL1); return; }
if(COL2 == 0) { key_code = '0'; while(!COL2); return; }
if(COL3 == 0) { key_code = '#'; while(!COL3); return; }
if(COL4 == 0) { key_code = 'D'; while(!COL4); return; }
}
void main()
{
while(1)
{
key_scan();
if(key_code) //如果检测到按键
{
P1 = key_code; //将按键码输出到P1口
key_code = 0; //清除按键码
}
delay_ms(20); //每20ms扫描一次键盘
}
}
```
该代码通过扫描4行4列的矩阵键盘,检测到按键后将按键码输出到P1口。其中,ROW1~ROW4和COL1~COL4分别为矩阵键盘的行和列引脚,key_scan()函数为键盘扫描函数,delay_ms()为延时函数。
阅读全文
相关推荐

















