c51矩阵键盘输入,数码管输出数字程序
时间: 2024-02-03 19:13:36 浏览: 86
C51矩阵键盘程序
下面是一个使用C语言编写的C51矩阵键盘输入并且将数字输出到数码管的程序:
```c
#include <reg52.h>
#define KEY_PORT P0 //矩阵键盘接口
#define DIG_PORT P1 //数码管接口
unsigned char code DIG_N[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //数码管显示数字0~9的编码
void delay(unsigned int i) //延时函数
{
while(i--);
}
unsigned char KeyDown() //检测是否有按键按下
{
unsigned char key_code = 0xff; //初始化键值为0xff
KEY_PORT = 0xf0; //输出低4位为0,高4位为1
if(KEY_PORT != 0xf0) //若按键按下,则会改变KEY_PORT的值
{
delay(1000); //消除抖动
if(KEY_PORT != 0xf0) //再次检测按键是否按下
{
key_code = KEY_PORT; //读取按键值
KEY_PORT = 0xf0; //输出低4位为1,高4位为0
switch(KEY_PORT) //检测哪个列被按下
{
case 0xe0: key_code = 0; break; //第1列被按下,键值为0
case 0xd0: key_code = 1; break; //第2列被按下,键值为1
case 0xb0: key_code = 2; break; //第3列被按下,键值为2
case 0x70: key_code = 3; break; //第4列被按下,键值为3
}
}
}
return key_code; //返回键值
}
void Display(unsigned char num) //在数码管上显示数字
{
DIG_PORT = DIG_N[num]; //将对应数字的编码输出到数码管
}
void main()
{
unsigned char key_val = 0xff; //初始化键值为0xff,表示没有键被按下
unsigned char num = 0; //初始化数字为0
while(1)
{
key_val = KeyDown(); //检测是否有按键按下
if(key_val != 0xff) //若有键被按下
{
num = key_val; //将键值赋给num
Display(num); //在数码管上显示num
}
}
}
```
上述程序实现了矩阵键盘输入和数码管输出数字的功能。程序中使用延时函数消除按键抖动,使用数组存储数字0~9的编码,使用函数实现数码管显示数字的功能。程序主循环不断检测是否有键被按下,若有键被按下则将键值赋给num并且在数码管上显示num。
阅读全文