单片机按键控制数码管加减
时间: 2023-10-19 18:07:55 浏览: 73
以下是一个单片机按键控制数码管加减的代码示例:
```c
#include <reg51.h>
sbit key_add = P1^0; // 加键
sbit key_sub = P1^1; // 减键
sbit digit1 = P2^0; // 数码管第一位
sbit digit2 = P2^1; // 数码管第二位
sbit digit3 = P2^2; // 数码管第三位
sbit digit4 = P2^3; // 数码管第四位
unsigned char code table[] = { // 数码管段码表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
};
unsigned char digit_buf[4] = { // 数码管显示缓存
0, 0, 0, 0
};
unsigned char digit_index = 0; // 当前显示的数码管位数
unsigned char num = 0; // 当前显示的数字
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = t; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void display() // 数码管显示函数
{
unsigned char i;
for (i = 0; i < 4; i++) {
switch (i) {
case 0: digit1 = 1; digit2 = 0; digit3 = 0; digit4 = 0; break;
case 1: digit1 = 0; digit2 = 1; digit3 = 0; digit4 = 0; break;
case 2: digit1 = 0; digit2 = 0; digit3 = 1; digit4 = 0; break;
case 3: digit1 = 0; digit2 = 0; digit3 = 0; digit4 = 1; break;
}
P0 = table[digit_buf[i]]; // 显示数字
delay(1); // 延时一段时间
P0 = 0x00; // 关闭数码管显示
}
}
void main()
{
while (1) {
if (key_add == 0) { // 按下加键
delay(10); // 延时一段时间
if (key_add == 0) { // 确认按下
num++;
if (num > 99) num = 0; // 数字取值范围为 0~99
digit_buf[3] = num % 10; // 取个位数字
digit_buf[2] = num / 10; // 取十位数字
digit_buf[1] = 10; // 显示横线(可省略)
digit_buf[0] = 10; // 显示横线(可省略)
display(); // 显示数字
while (key_add == 0); // 等待按键松开
}
}
if (key_sub == 0) { // 按下减键
delay(10); // 延时一段时间
if (key_sub == 0) { // 确认按下
num--;
if (num > 99) num = 99; // 数字取值范围为 0~99
digit_buf[3] = num % 10; // 取个位数字
digit_buf[2] = num / 10; // 取十位数字
digit_buf[1] = 10; // 显示横线(可省略)
digit_buf[0] = 10; // 显示横线(可省略)
display(); // 显示数字
while (key_sub == 0); // 等待按键松开
}
}
}
}
```
该代码使用 P1.0 和 P1.1 两个按键来控制数码管显示的数字加减。按下加键时,数字加 1;按下减键时,数字减 1。数字的取值范围为 0~99。数码管显示的前两位为数字,后两位为横线。可以根据需要修改代码来实现不同的显示效果。