基于stc89c51的数码管显示+按键检测的代码
时间: 2023-07-15 22:13:02 浏览: 23
以下是基于STC89C51的数码管显示和按键检测的简单代码,适用于4位共阴数码管:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2;
sbit key4 = P3^3;
uchar code table[] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
void delay(uint x) {
uint i, j;
for (i = x; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void display(uchar num) {
LSA = 0;
LSB = 0;
LSC = 0;
P0 = table[num];
delay(100);
}
void main() {
uchar num[4] = {0, 0, 0, 0};
uchar i = 0;
while (1) {
if (key1 == 0) {
delay(10);
if (key1 == 0) {
num[i]++;
if (num[i] == 16) {
num[i] = 0;
}
display(num[i]);
}
while (!key1);
}
if (key2 == 0) {
delay(10);
if (key2 == 0) {
i++;
if (i == 4) {
i = 0;
}
}
while (!key2);
}
if (key3 == 0) {
delay(10);
if (key3 == 0) {
i--;
if (i == 255) {
i = 3;
}
}
while (!key3);
}
if (key4 == 0) {
delay(10);
if (key4 == 0) {
num[0] = num[1] = num[2] = num[3] = 0;
}
while (!key4);
}
display(num[i]);
}
}
```
代码中用到了一个数码管显示函数 `display()`,其输入参数为要显示的数字(0~15),并且在函数中控制了数码管的位选和段选,实现了数字的显示。按键检测使用了 `while` 循环来防止多次按键产生的干扰。
代码中使用了 P0 和 P2 作为输出口和位选控制口,P3 上的四个按键作为输入口。请注意,在实际电路中需要根据具体的接线情况和数码管型号进行适当的修改。
相关推荐

















