51单片机定时器中断 数码管
时间: 2023-10-21 19:05:36 浏览: 45
显示程序怎么写?
对于51单片机定时器中断数码管显示程序,需要先定义好定时器中断服务函数,在函数内部实现数码管的显示逻辑。
以下是一个示例程序:
```c
#include <reg51.h>
// 定义数码管显示的值
unsigned char disp[8] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07};
// 定义当前显示的位置
unsigned char pos = 0;
// 定时器中断服务函数
void timer_isr() interrupt 1 {
// 清除中断标志位
TF0 = 0;
// 显示下一个数字
P0 = disp[pos];
pos++;
// 如果已经显示完所有数字,从头开始
if (pos >= 8) {
pos = 0;
}
}
// 主函数
void main() {
// 初始化定时器
TMOD = 0x01;
TH0 = 0xfc;
TL0 = 0x66;
TR0 = 1;
ET0 = 1;
EA = 1;
// 循环等待
while (1) {};
}
```
在上面的程序中,我们定义了一个长度为8的数组`disp`,用于存储数码管需要显示的数字。在定时器中断服务函数`timer_isr`中,我们先清除中断标志位,然后将当前需要显示的数字输出到P0口,然后将`pos`加1。
在主函数中,我们初始化定时器并进入一个死循环,等待定时器中断的触发。当定时器中断触发时,就会调用定时器中断服务函数,实现数码管的自动循环显示。