历史上的今天
今天是:2024年08月25日(星期日)
2021年08月25日 | 51单片机-定时器&数码管扫描显示
2021-08-25 来源:eefocus
1.定时器中断实现间隔切换
在第六章第4讲的测试代码中提到过数码管微闪烁问题,这是由于三八译码器的IO端口切换的间隔时间不均匀导致,这部分的问题宋老师已经在《手把手教你学51单片机》文档6.4.2节有详细解释,并在6.5.2节里解决了这个问题。数码管扫描函数我们使用定时器0强制实现间隔1ms切换三八译码器的IO输出,这样保证了每个数码管被点亮的时间都是均匀的。我们在主函数里不停地执行数码管显示函数。这里是测试代码,用定时器1实现add间隔50ms自增1,数码管显示add的值。
#include #include #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 { TH1 = T1RH; //重新加载重载值 TL1 = T1RL; add++; } 2.PWM简单入门 PWM概念在《手把手教你学51单片机》文档10.2节有很好的解释,这里笔者就不费笔墨讲解了,我们简单入门PWM来让8盏小灯实现较暗地点亮。P0端口输出如下 代码实现如下 #include #include #include u8 pwm=0; void main() { LED_Init(); //初始化LED硬件模块 EA = 1; //闭合总中断开关 TIM0_Init(1000,10); //定时1ms,10是微调使定时更精确 while(1) { if(pwm<=8)P0=0xFF; //pwm在0~8之间都会执行“P0=0xFF;”,也就是占空比为90%,小灯显示较暗 else P0=0x00; } } void TIM0_IRQHandler() interrupt 1 { TH0 = T0RH; //重新加载重载值 TL0 = T0RL; pwm++; if(pwm>=10)pwm=0; //pwm在0~9之间间隔1ms变化 } 3.浅谈例程代码 在宋老师的lesson10_2例程代码中的“void ConfigPWM(unsigned int fr, unsigned char dc)”函数里大家阅读起来可能有点吃力,这里笔者解析一下。 我们先再次复习一下知识,定时器每加1经过的时间是(12/11059200)秒,如果计数到11059200(多次溢出),时间也就过去了12秒。时间过去了1秒的时候计数值就是(11059200/12)。 “ConfigPWM(100, 10);”意味着tmp的数值周期是(1/100)秒,也就是频率为100Hz。这个周期里高电平定时持续的时间为“(1/100)*0.1”秒,低电平定时持续的时间为“(1/100)*0.9”秒。所以占空比为10%。 主函数里的延时就是让这个PWM波形持续一段时间,然后又到下一个占空比为40%的PWM波形持续一段时间。4个阶段的占空比不同,也就表现为小灯的显示亮度不同。 这里笔者做个效果图给大家理解吧
上一篇:51单片机-数据类型强制转换
下一篇:51单片机-呼吸灯
史海拾趣
|
现在想在EMMC卡(焊在PCB上的存储卡)或是T卡设置两个目录或是分区 1个连接PC的时候,在PC上可见; 另1个连接PC的时候,在PC上不可见; 但是两个目录或是分区在手机端都是可见得。 隐藏的目录或是分区,主要用来保护里面的文件不被拷贝到PC或是 ...… 查看全部问答> |
|
我在SMDK6410的机器上跑WINCE6.0, 我编写了一个WININET的应用,但我发现一个很奇怪的问题。 当我先连接ActiveSyn的时候,然后在进行GPRS拨号,此时调用WININET的程序登录GPRS内网的时候, 就返回12031的错误。但当我先进行GPRS拨号,在连接Acti ...… 查看全部问答> |
|
调GPRS模块调了一周多啦,各种方法都用尽了还是不行,到这里来请求高手解答。 问题是这样的,我用的是GTM900B模块用在S3C2440A的ARM上,用的串口0与之通信,模块在ARM板上可以打开,接上SIM卡上也可以打入电话,用WINCE下的串口调试助手在打入这个 ...… 查看全部问答> |
|
在网上下载(verycd上拖的)的tornado的安装镜像ISO文件,分别有CD1和CD2两个,请问CD1和CD2分别是干什么用的?似乎是CD1安装完成之后就是tornado编程环境,那么CD2里面又是什么东东啊?我在安装完CD1之后又安装了CD2,安装目录均在同一目录下,c:\ ...… 查看全部问答> |
|
LM3S811无法下载 被锁了??? https://bbs.eeworld.com.cn/viewthread.php?tid=291722&page=1#pid1093456 之前坛友发的帖子,提到利尔达2011 MCU Day的LM3S811评估板不能在Keil MDK里仿真及下载。 后来联系了TI,根据TI提供 ...… 查看全部问答> |




