STC89C52数码管按键加1
时间: 2024-05-01 20:16:35 浏览: 97
下面是基于STC89C52单片机的数码管按键加1的代码示例:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY1 = P3^3; // 定义按键1
sbit KEY2 = P3^4; // 定义按键2
sbit KEY3 = P3^5; // 定义按键3
uchar code DIG_CODE[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示0~9的数码管编码
uchar num = 0; // 存储加1后的数字
void delay(uint i) // 延时函数
{
while(i--);
}
void display(uchar dat) // 数码管显示函数
{
P0 = DIG_CODE[dat % 10]; // 取个位数字并显示
P2 = 0xfe; // 使能第1位数码管
delay(100); // 延时一段时间
P2 = 0xff; // 关闭数码管
P0 = DIG_CODE[dat / 10 % 10]; // 取十位数字并显示
P2 = 0xfd; // 使能第2位数码管
delay(100); // 延时一段时间
P2 = 0xff; // 关闭数码管
}
void main()
{
KEY1 = 1; // 初始化按键1
KEY2 = 1; // 初始化按键2
KEY3 = 1; // 初始化按键3
display(num); // 显示初始数字
while(1)
{
if(KEY1 == 0) // 检测按键1是否按下
{
delay(1000); // 延时去抖
if(KEY1 == 0) // 确认按键1是否按下
{
num++; // 数字加1
if(num > 99) // 数字范围限制
{
num = 0;
}
display(num); // 显示加1后的数字
}
while(!KEY1); // 等待按键1释放
}
if(KEY2 == 0) // 检测按键2是否按下
{
delay(1000); // 延时去抖
if(KEY2 == 0) // 确认按键2是否按下
{
num--; // 数字减1
if(num > 99) // 数字范围限制
{
num = 99;
}
display(num); // 显示减1后的数字
}
while(!KEY2); // 等待按键2释放
}
if(KEY3 == 0) // 检测按键3是否按下
{
delay(1000); // 延时去抖
if(KEY3 == 0) // 确认按键3是否按下
{
num = 0; // 数字清零
display(num); // 显示清零后的数字
}
while(!KEY3); // 等待按键3释放
}
}
}
```
该代码中使用了3个按键,其中按键1用于加1,按键2用于减1,按键3用于清零。程序通过检测按键状态来实现相应功能。在显示数字时,先将个位数字显示出来,然后延时一段时间,再将十位数字显示出来,并再次延时。可根据需要调整延时时间。
阅读全文