用c写一个c51用按键控制数码管加减的程序
时间: 2023-05-12 07:05:54 浏览: 179
以下是一个简单的用C语言编写的C51单片机程序,可以通过按键控制数码管的加减操作:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY_ADD = P1^0; // 加键
sbit KEY_SUB = P1^1; // 减键
sbit LED_DIG1 = P2^0; // 数码管第一位
sbit LED_DIG2 = P2^1; // 数码管第二位
sbit LED_DIG3 = P2^2; // 数码管第三位
sbit LED_DIG4 = P2^3; // 数码管第四位
uchar code LED_TBL[] = { // 数码管显示表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
uint num = 0; // 数码管显示的数字
void delay(uint t) { // 延时函数
uint i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display(uint n) { // 数码管显示函数
LED_DIG1 = LED_TBL[n % 10];
LED_DIG2 = LED_TBL[n / 10 % 10];
LED_DIG3 = LED_TBL[n / 100 % 10];
LED_DIG4 = LED_TBL[n / 1000 % 10];
}
void main() {
uchar add_flag = 0, sub_flag = 0; // 加减标志
while (1) {
if (KEY_ADD == 0) { // 按下加键
delay(10); // 延时去抖动
if (KEY_ADD == 0) {
add_flag = 1;
sub_flag = 0;
}
while (KEY_ADD == 0); // 等待按键释放
}
if (KEY_SUB == 0) { // 按下减键
delay(10); // 延时去抖动
if (KEY_SUB == 0) {
sub_flag = 1;
add_flag = 0;
}
while (KEY_SUB == 0); // 等待按键释放
}
if (add_flag) { // 加操作
num++;
if (num > 9999) num = 0;
display(num);
}
if (sub_flag) { // 减操作
if (num == 0) num = 9999;
else num--;
display(num);
}
}
}
```
这个程序使用了C语言的基本语法和C51单片机的IO口操作,通过按键控制数码管的加减操作。
阅读全文