利用定时器实现数码管间隔1s显示1~99的代码
时间: 2023-06-04 15:02:59 浏览: 264
好的,以下是利用定时器实现数码管间隔1s显示1~99的代码:
```
#include <reg52.h>
// 数码管的共阳极接口
sbit LED_A = P2^2;
sbit LED_B = P2^3;
sbit LED_C = P2^4;
sbit LED_D = P2^5;
sbit LED_E = P2^6;
sbit LED_F = P2^7;
sbit LED_G = P3^0;
sbit LED_DP = P3^1;
// 分别对应数字1到9的编码
unsigned char LED_CODE[] = {0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// 定时器中断计数值
unsigned int count = 0;
// 数码管显示函数
void display(unsigned char index) {
LED_DP = 0; // 取消小数点
LED_A = LED_CODE[index / 10];
LED_B = LED_CODE[index % 10];
}
// 定时器中断函数
void timer0_isr() interrupt 1 {
TH0 = 0xFC; // 重新设置定时器寄存器
TL0 = 0x18;
count++; // 计数器加1
if (count >= 1000) { // 1s大小约为1000
count = 0;
display(count % 100); // 数码管显示数字
}
}
void main() {
TMOD = 0x01; // 定时器0工作在模式1:16位定时器
TH0 = 0xFC; // 给定时器赋初值
TL0 = 0x18;
ET0 = 1; // 开中断
EA = 1;
TR0 = 1; // 启动定时器
while (1) {}
}
```
这段代码实现了数码管每隔1s显示1~99的功能。主要通过定时器中断来控制计数,当计数值达到一定大小时,执行数码管显示函数,显示对应的数字。
阅读全文