#include <reg52.h>
sbit led = P1^0; // LED连接的IO口
sbit key = P1^5; // 按键连接的IO口
sbit digit = P3^5; // 数码管连接的IO口
unsigned int count = 0; // 计数器
unsigned int digit_display = 0; // 数码管显示的数字
void delay(unsigned int t) // 延时函数
{
while(t--);
}
void display(unsigned int num) // 显示数码管数字函数
{
switch(num)
{
case 1: digit_display = 0x3F; break; // 0b00111111
case 2: digit_display = 0x5B; break; // 0b01011011
case 3: digit_display = 0x4F; break; // 0b01001111
case 4: digit_display = 0x66; break; // 0b01100110
case 5: digit_display = 0x6D; break; // 0b01101101
case 6: digit_display = 0x7D; break; // 0b01111101
case 7: digit_display = 0x07; break; // 0b00000111
case 8: digit_display = 0x7F; break; // 0b01111111
case 9: digit_display = 0x6F; break; // 0b01101111
default: digit_display = 0x7F; break; // 默认显示数字8
}
}
void main()
{
TMOD = (TMOD & 0xF0) | 0x02; // 设置定时器T0工作模式2
TH0 = (65536 - 50000) / 256; // 设置定时器初始值,定时间隔为1s
TL0 = (65536 - 50000) % 256;
EA = 1; // 全局中断使能
ET0 = 1; // 定时器中断使能
TR0 = 1; // 启动定时器T0
while(1)
{
if(key == 0) // 如果按键按下
{
delay(5); // 去抖动延时
if(key == 0) // 如果按键仍然按下
{
count++; // 计数器加一
if(count >= 9) count = 0; // 如果超过9次则重新开始计数
display(count); // 显示数码管上的数字
}
}
}
}