矩阵键盘控制数码管显示c语言
时间: 2023-08-18 21:09:52 浏览: 102
矩阵键盘数码管显示
假设你使用的是4x4的矩阵键盘和4位共阳数码管,下面是一份示例代码,可以通过矩阵键盘输入数字并在数码管上显示出来:
```c
#include <reg51.h> // 8051单片机头文件
#define uchar unsigned char // 定义uchar为unsigned char类型
uchar code table[] = { // 数码管显示数字表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f
};
uchar key_scan(void); // 矩阵键盘扫描函数
void display(uchar num); // 数码管显示函数
void main()
{
uchar num = 0; // 初始值为0
while(1)
{
uchar key = key_scan(); // 检测键盘输入
if(key != 0xff) // 如果有按键按下
{
num = key; // 将按键值赋给num
}
display(num); // 在数码管上显示num
}
}
uchar key_scan(void)
{
uchar row, col;
P1 = 0x0f; // 将P1的低4位清零
col = P1; // 读取P1的低4位
if(col != 0x0f) // 如果有按键按下
{
delay(10); // 延时10ms
if(col != 0x0f) // 如果仍然有按键按下
{
P1 = 0xf0; // 将P1的高4位清零
row = P1; // 读取P1的高4位
col |= 0xf0; // 将列值与0xf0做或运算
return (row | col); // 返回键值
}
}
return 0xff; // 没有按键按下,返回0xff
}
void display(uchar num)
{
uchar thousand, hundred, ten, unit;
thousand = num / 1000; // 计算千位数字
P2 = table[thousand]; // 在数码管上显示千位数字
P0 = 0xfe; // 打开第一位数码管
delay(5); // 延时5ms
P0 = 0xff; // 关闭数码管
hundred = num % 1000 / 100; // 计算百位数字
P2 = table[hundred]; // 在数码管上显示百位数字
P0 = 0xfd; // 打开第二位数码管
delay(5); // 延时5ms
P0 = 0xff; // 关闭数码管
ten = num % 100 / 10; // 计算十位数字
P2 = table[ten]; // 在数码管上显示十位数字
P0 = 0xfb; // 打开第三位数码管
delay(5); // 延时5ms
P0 = 0xff; // 关闭数码管
unit = num % 10; // 计算个位数字
P2 = table[unit]; // 在数码管上显示个位数字
P0 = 0xf7; // 打开第四位数码管
delay(5); // 延时5ms
P0 = 0xff; // 关闭数码管
}
void delay(uchar i) // 延时函数
{
uchar j, k;
for(j = i; j > 0; j--)
{
for(k = 110; k > 0; k--);
}
}
```
在该代码中,`key_scan()`函数用于扫描矩阵键盘是否有按键按下,并返回按键对应的数字值。`display()`函数用于将一个4位数字在数码管上显示出来。`delay()`函数用于延时。
在`main()`函数中,循环不断地检测键盘输入并在数码管上显示数字。
阅读全文