基于AT89s52单片机的计数器,单击按键使计数加一,单击另一个按键使计数减一,上限为99,并用数码管显示
时间: 2024-05-12 08:20:41 浏览: 15
以下是AT89s52单片机的计数器示例代码,使用两个按键分别实现计数加一和计数减一,最大计数为99,并通过数码管显示当前计数值。
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key_add = P3^0; // 加一按键
sbit key_sub = P3^1; // 减一按键
uchar code digit[10] = { // 数码管显示的数字编码
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
uchar count = 0; // 计数值
void delay(uint ms) { // 延时函数
uint i, j;
for (i = ms; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void display(uchar num) { // 数码管显示函数
P1 = digit[num / 10];
P2 = digit[num % 10];
}
void main() {
key_add = 1; // 加一按键初始化
key_sub = 1; // 减一按键初始化
while (1) {
if (key_add == 0) { // 检测加一按键是否按下
delay(10); // 延时去抖动
if (key_add == 0) { // 再次检测加一按键是否按下
count++; // 计数加一
if (count > 99) { // 达到上限时清零
count = 0;
}
display(count); // 显示当前计数值
while (key_add == 0); // 等待加一按键松开
}
}
if (key_sub == 0) { // 检测减一按键是否按下
delay(10); // 延时去抖动
if (key_sub == 0) { // 再次检测减一按键是否按下
count--; // 计数减一
if (count > 99) { // 达到下限时重置
count = 99;
}
display(count); // 显示当前计数值
while (key_sub == 0); // 等待减一按键松开
}
}
}
}
```