51单片机矩阵键盘扫描显示在数码管上,并且循环显示代码
时间: 2024-03-14 11:46:56 浏览: 113
以下是基于51单片机的矩阵键盘扫描并在数码管上循环显示的代码:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //数码管显示0-9的编码
sbit L1 = P2^0; //矩阵键盘第一行
sbit L2 = P2^1; //矩阵键盘第二行
sbit L3 = P2^2; //矩阵键盘第三行
sbit L4 = P2^3; //矩阵键盘第四行
sbit C1 = P2^4; //矩阵键盘第一列
sbit C2 = P2^5; //矩阵键盘第二列
sbit C3 = P2^6; //矩阵键盘第三列
uchar keyscan() //矩阵键盘扫描函数
{
uchar val = 0xff; //初始化键值
L1 = 0; //第一行置低电平
if (C1 == 0) {val = 1;} //第一列检测按键
if (C2 == 0) {val = 2;} //第二列检测按键
if (C3 == 0) {val = 3;} //第三列检测按键
L1 = 1; //第一行恢复高电平
L2 = 0; //第二行置低电平
if (C1 == 0) {val = 4;} //第一列检测按键
if (C2 == 0) {val = 5;} //第二列检测按键
if (C3 == 0) {val = 6;} //第三列检测按键
L2 = 1; //第二行恢复高电平
L3 = 0; //第三行置低电平
if (C1 == 0) {val = 7;} //第一列检测按键
if (C2 == 0) {val = 8;} //第二列检测按键
if (C3 == 0) {val = 9;} //第三列检测按键
L3 = 1; //第三行恢复高电平
L4 = 0; //第四行置低电平
if (C1 == 0) {val = 0;} //第一列检测按键
if (C2 == 0) {val = 0;} //第二列检测按键
if (C3 == 0) {val = 0;} //第三列检测按键
L4 = 1; //第四行恢复高电平
return val; //返回键值
}
void main()
{
uchar num = 0; //初始化数码管显示的数字
while (1) //循环执行
{
uchar val = keyscan(); //扫描矩阵键盘
if (val != 0xff) //判断是否有按键按下
{
num = val; //将按键对应的数字赋值给num
}
P0 = table[num]; //数码管显示num对应的数字
num++; //num自增
if (num > 9) {num = 0;} //当num大于9时,重置为0
}
}
```
注意:以上代码仅供参考,具体实现可能需要根据具体情况进行调整。
阅读全文