中文html网站模板下载,温州专业做网站,旅行社网站建设规划书,厨房装修图片1.双定时器呼吸灯实现呼吸灯的实现原理就是让小灯的IO端口在一段时间里PWM由大到小变化的占空比输出#xff0c;接着又由小到大的占空比输出#xff0c;小灯显示效果就是时亮时暗地交替闪烁。首先我们用定时器0定时0.1ms#xff0c;全局变量pwm在其中断函数里执行简单的从0到…1.双定时器呼吸灯实现呼吸灯的实现原理就是让小灯的IO端口在一段时间里PWM由大到小变化的占空比输出接着又由小到大的占空比输出小灯显示效果就是时亮时暗地交替闪烁。首先我们用定时器0定时0.1ms全局变量pwm在其中断函数里执行简单的从0到99的循环自加这样周期就是10ms。假如主函数里我们这样执行if(pwm90)P00xFF;else P00x00;那么IO端口输出的一直是周期为10ms占空比为90%的波形这样8盏小灯一直是处于较暗的显示状态不变要想实现呼吸灯就要不停改变PWM波形的占空比。所以我们使用定时器1来做间隔10ms地改变占空比我们再定义一个全局变量highval这个变量每隔10ms就会在定时器1中断函数中实现加1或者减1加到99时又从99减回到0减回到0又从0开始加到99的这样循环过程大家回去研究左右往复循环流水灯的代码就会明白都是一样的思路。然后主函数这样执行if(pwmelse P00x00;效果图如下······2.代码#include #include //详见第六章第8讲#include u8 pwm0,highval99;void main(){LED_Init(); //初始化LED硬件模块EA 1; //闭合总中断开关TIM0_Init(100,9); //定时0.1ms9是微调使定时时间更精确TIM1_Init(10000,10); //定时10ms10是微调使定时时间更精确while(1){if(pwmelse P00x00;}}void TIM0_IRQHandler() interrupt 1{TH0 T0RH; //重新加载重载值TL0 T0RL;pwm;if(pwm100)pwm0; //pwm在0~99之间间隔0.1ms变化周期就为10ms}void TIM1_IRQHandler() interrupt 3{static u8 dir;TH1 T1RH; //重新加载重载值TL1 T1RL;if(dir1)highval--; //占空比逐渐减少小灯逐渐变亮if(highval0)dir0;if(dir0)highval; //占空比逐渐增加小灯逐渐变暗if(highval99)dir1;}本章内容就告一段落了定时器功能几乎是开发中必不可少的模块灵活使用会使执行效率更加高效大家有时想出的一些原创题目多使用定时器来训练加强对这个工具的利用。