在keil软件中实现读取4*3矩阵键盘键值和实现数码管显示代码程序
时间: 2024-02-15 17:05:31 浏览: 232
以下是在 Keil 软件中实现读取 4*3 矩阵键盘键值和实现数码管显示的程序代码:
```
#include<reg52.h>
#define KEY P0 //定义4*3矩阵键盘的端口为P0
#define DIG P2 //定义数码管的端口为P2
unsigned char code ledChar[] = { //定义数码管显示的字符集
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
void delay(unsigned int t) //延迟函数
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
unsigned char getKey() //读取键盘键值函数
{
unsigned char key = 0xFF;
unsigned char i,j;
for(i=0;i<4;i++) //扫描行
{
KEY = ~(1<<i);
for(j=0;j<3;j++) //读取列
{
if(!(KEY & (1<<(j+4)))) //检测键是否按下
{
delay(5); //延时去抖动
if(!(KEY & (1<<(j+4)))) //再次检测键是否按下
{
key = i*3+j; //计算键值
break;
}
}
}
if(key != 0xFF) //如果检测到键按下,则退出循环
break;
}
while(KEY != 0xFF); //等待键释放
return key;
}
void main()
{
unsigned char key, i;
while(1)
{
key = getKey(); //读取键值
if(key != 0xFF) //如果有键按下
{
DIG = ledChar[key]; //在数码管上显示键值
delay(500); //延时一段时间
DIG = 0x00; //关闭数码管
}
}
}
```
代码中定义了 `getKey()` 函数来读取键盘的键值,使用了双重循环来扫描矩阵键盘的行和列,并在检测到按键按下时计算出键值。在 `main()` 函数中使用了一个无限循环来不断检测键盘是否有键按下,并在数码管上显示键值。代码中使用了一个 `ledChar` 数组来存储数码管显示的字符集,使用了 `DIG` 变量来控制数码管的显示,使用了 `delay()` 函数来实现延时操作。
阅读全文