定时器驱动数码管c语言程序,定时器&数码管扫描显示

1.定时器中断实现间隔切换

在第六章第4讲的测试代码中提到过数码管微闪烁问题,这是由于三八译码器的IO端口切换的间隔时间不均匀导致,这部分的问题宋老师已经在《手把手教你学51单片机》文档6.4.2节有详细解释,并在6.5.2节里解决了这个问题。数码管扫描函数我们使用定时器0强制实现间隔1ms切换三八译码器的IO输出,这样保证了每个数码管被点亮的时间都是均匀的。我们在主函数里不停地执行数码管显示函数。这里是测试代码,用定时器1实现add间隔50ms自增1,数码管显示add的值。#include 

#include  //详见第六章第8讲

#include 

u32 add=9999;

void main()

{

LED_Init();          //初始化LED硬件模块

EA = 1;              //闭合总中断开关

TIM0_Init(1000,33);  //定时1ms,因为中断函数占用时间多一点,所以微调的值跨度比较大

TIM1_Init(50000,10); //定时50ms,10是微调使定时更精确

while(1)

{

ShowNumber(add);

}

}

void TIM0_IRQHandler() interrupt 1

{

TH0 = T0RH; //重新加载重载值

TL0 = T0RL;

SEG_Scan(); //间隔1ms执行三八译码器的不同IO输出低电平

}

void TIM1_IRQHandler() interrupt 3

{

你可能感兴趣的:(定时器驱动数码管c语言程序)