定时器数码管0到99计数
时间: 2023-08-05 18:47:17 浏览: 117
好的,我来帮你解决这个问题。你需要一个定时器和一个数码管。下面是一个简单的程序示例,可以实现数码管从0到99的计数:
```
#include <reg52.h>
sbit DIO = P1^0; // 数码管数据引脚
sbit CLK = P1^1; // 数码管时钟引脚
unsigned char code table[] = { // 数码管显示表
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,
0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71
};
unsigned char cnt = 0; // 计数器变量
void display(unsigned char num) { // 显示函数
unsigned char i;
for(i = 0; i < 8; i++) {
DIO = (table[num] >> i) & 0x01; // 设置数据引脚
CLK = 1; // 时钟上升沿
CLK = 0; // 时钟下降沿
}
}
void timer0() interrupt 1 { // 定时器0中断处理函数
TH0 = 0xFC; // 重新设置计数初值
TL0 = 0x66;
cnt++; // 计数器加1
if(cnt == 100) cnt = 0; // 计数器清零
display(cnt / 10); // 显示十位
P2 = 0x01; // 选中个位
display(cnt % 10); // 显示个位
P2 = 0x02; // 选中十位
}
void main() {
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0xFC; // 设置计数初值
TL0 = 0x66;
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
TR0 = 1; // 启动定时器0
while(1); // 程序无限循环
}
```
这个程序使用定时器0中断来控制数码管的计数。每次中断发生时,计数器加1,然后将计数器的值分解为十位和个位,分别显示到数码管上。程序中使用的是常见的共阳数码管,如果你使用的是共阴数码管,需要将数码管显示表中的数码取反。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)