(PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
前言
上一篇文章相信大家已经成为了点灯高手了,那么进阶就是成为点灯大师 实现PWM呼吸灯
(图片来源网络,侵删)
接下来就是直接的代码讲解了,不再讲PWM原理的
这里部分内容参考了另一个博主的文章
合泰杯——合泰单片机工程7之PWM输出
如果有小伙伴不理解引脚设置和delay函数生成或者环境配置的可以浏览上一章内容
合泰杯开发板HT66F2390入门教程(点亮LED灯)——获得成就:点灯大师
本文中会讲解代码为什么要这样配置寄存器和引脚才可以制作呼吸灯(内容可能不完整,持续更新)
(图片来源网络,侵删)
代码
#include "HT66F2390.h" const int Period = 4095; // 定义PWM周期为4095 void setLED_PWM(unsigned long Duty); void delay(unsigned long count); // 声明延时函数 void PWM_Init(void); void main() { _wdtc=0b10101011; //关闭看门狗 int i=0; PWM_Init(); while(1) { for(i=0;i delay(50); setLED_PWM(i); } for(i=Period;i0;i--) { delay(50); setLED_PWM(i); } } } void delay(unsigned long count) //延时10us级别 { volatile unsigned long i; for(i=0;i _ptm3ah =Duty/256; //占空比设置 _ptm3al =Duty%256; } void PWM_Init(void){ _ptm3c0=0b00001000; //时钟选择为8MHz/4 _ptm3c1=0b10101000; //功能选择寄存器,选择PWM输出且低有效 _ptm3rph=Period/256; //周期设置,写入CCRP的两个寄存器之中这个是把16位的数据划分成高8位和低8位 _ptm3rpl=Period%256; _pds1=0b00000010; //PTP3引脚选择,接的是D4 _emi=1; //开启总中断 } _ptm3c0=0b00001000; //时钟选择为8MHz/4 _ptm3c1=0b10101000; //功能选择寄存器,选择PWM输出且低有效 _ptm3rph=Period/256; //周期设置,写入CCRP的两个寄存器之中这个是把16位的数据划分成高8位和低8位 _ptm3rpl=Period%256; _pds1=0b00000010; //PTP3引脚选择,接的是D4 _emi=1; //开启总中断 } _ptm3ah =Duty/256; //占空比设置 _ptm3al =Duty%256; } for(i=0;i delay(50); setLED_PWM(i); } for(i=Period;i0;i--) { delay(50); setLED_PWM(i); } }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...