51单片机实现按键1按下,静态数码管显示数字1的代码
时间: 2024-03-09 14:50:33 浏览: 24
以下是51单片机实现按键1按下,静态数码管显示数字1的代码:
```c
#include <reg52.h>
sbit KEY1 = P1^0;
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
unsigned char code DIGITS_TABLE[] = {
0xc0, // 0
0xf9, // 1
0xa4, // 2
0xb0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xf8, // 7
0x80, // 8
0x98 // 9
};
void delay(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 110; j++);
}
void main() {
unsigned char count = 0;
unsigned char digit = 0;
unsigned char key_state = 0;
while(1) {
if(!KEY1) {
delay(10);
if(!KEY1) {
key_state = 1;
LED1 = 1;
}
} else {
key_state = 0;
LED1 = 0;
}
if(key_state) {
digit = DIGITS_TABLE[1];
} else {
digit = DIGITS_TABLE[0];
}
LED2 = digit & 0x01;
LED3 = digit & 0x02;
LED4 = digit & 0x04;
count++;
if(count == 200) {
count = 0;
}
}
}
```
其中,`KEY1` 为按键引脚,`LED1`、`LED2`、`LED3`、`LED4` 分别对应数码管的四个段选引脚,`DIGITS_TABLE` 为数字的数码管编码表,`delay` 函数为简单的延时函数。在 `main` 函数中,不断检测按键状态,如果按键1被按下,则将 `digit` 设置为数字1的编码,否则 `digit` 设置为数字0的编码,并将 `digit` 的各位分别对应到数码管的四个段选引脚上。同时,每隔一段时间 `count` 计数器加一,用于控制数码管的静态显示。