目的
利用pwm實(shí)現(xiàn)呼吸為燈效果
實(shí)驗(yàn)環(huán)境
TBK-RD8T3x開發(fā)板
實(shí)現(xiàn)原理
RD8T37單片機(jī)最多提供 14 路 PWM,這 14路 PWM 分為兩類:多功能 PWM:共8路,只有一組,即 PWM0,輸出信號口為: PWM0 0~07。
我們只需要修改PWM0的占空比就可以實(shí)現(xiàn)LED燈的亮度。
實(shí)現(xiàn)步驟
1、在keil工程加入rd8_pwm.c
2、根據(jù)數(shù)據(jù)手冊與原理圖,我這里選用P42為PWM輸出:
3、初始化PWM0通道5
/*****************************************************
*函數(shù)名稱: SC_PWM0_Init
*函數(shù)功能: PWM0初始化函數(shù)
*入口參數(shù):void
*出口參數(shù):void
*****************************************************/
void SC_PWM0_Init(void)
{
/*PWM0獨(dú)立模式*/PWM_Init(PWM0_PRESSEL_FHRC_D1,255);
/*PWM00 獨(dú)立模式*/PWM_IndependentModeConfigEX(PWM05,0, PWM_OUTPUTSTATE_ENABLE);
/*PWM0*/PWM_Aligned_Mode_Select(PWM0_Edge_Aligned_Mode);
/*PWM0*/PWM_FaultDetectionConfigEX(PWM0_Type,DISABLE);
/*PWM0*/PWM_FaultDetectionModeConfigEX(PWM0_Type,PWM0_Immediate_Mode,PWM0_FaultDetectionVoltage_Low,PWM0_WaveFilteringTime_0us);
/*PWM0中斷使能*/PWM_ITConfigEX(PWM0_Type,DISABLE,LOW);
/*PWM0開關(guān)*/PWM_CmdEX(PWM0_Type,ENABLE);
/*PWM0_Init write here*/
}
4、動態(tài)修改占空比的函數(shù)為:
PWM_IndependentModeConfig(PWM05,pwm_num);
5、為了達(dá)到非阻塞式的動態(tài)修改占空比,以達(dá)到實(shí)現(xiàn)呼吸燈的效果,我附了main.c的代碼如下:
#include "rd8.h"
#include "rd8_pwm.h"
uint8_t sta;
uint32_t count = 0;
void LED_Init(void)
{
P3CON |= 0x1E; //P3 0b0001 1110 輸出
P4CON |= 0x0F; //P4 0b0000 1111
}
void Timer0Iint(void)
{
TMOD |= 0x01; // 配置定時器0為 16位定時器, TH0、TL0全用
TH0 =(65536-1000)/256; //1000us定時,即1毫秒溢出產(chǎn)生中斷
TL0 =(65536-1000)%256; //1000us定時,即1毫秒溢出產(chǎn)生中斷
ET0 = 1; //開啟定時器0中斷
EA = 1; //開啟全局中斷
TR0 = 1; //定時器0開始計(jì)數(shù);
}
/*****************************************************
*函數(shù)名稱: SC_PWM0_Init
*函數(shù)功能: PWM0初始化函數(shù)
*入口參數(shù):void
*出口參數(shù):void
*****************************************************/
void SC_PWM0_Init(void)
{
/*PWM0獨(dú)立模式*/PWM_Init(PWM0_PRESSEL_FHRC_D1,255);
/*PWM00 獨(dú)立模式*/PWM_IndependentModeConfigEX(PWM05,0, PWM_OUTPUTSTATE_ENABLE);
/*PWM0*/PWM_Aligned_Mode_Select(PWM0_Edge_Aligned_Mode);
/*PWM0*/PWM_FaultDetectionConfigEX(PWM0_Type,DISABLE);
/*PWM0*/PWM_FaultDetectionModeConfigEX(PWM0_Type,PWM0_Immediate_Mode,PWM0_FaultDetectionVoltage_Low,PWM0_WaveFilteringTime_0us);
/*PWM0中斷使能*/PWM_ITConfigEX(PWM0_Type,DISABLE,LOW);
/*PWM0開關(guān)*/PWM_CmdEX(PWM0_Type,ENABLE);
/*PWM0_Init write here*/
}
void main(void)
{
//LED_Init();
uint8_t pwm_num;
uint8_t f;
SC_PWM0_Init();
Timer0Iint();
f=0;
pwm_num = 0;
while(1)
{
if(sta ==1)
{
sta = 0;
if(f ==0)
{
pwm_num++;
PWM_IndependentModeConfig(PWM05,pwm_num);
}
else if (f ==1)
{
pwm_num--;
PWM_IndependentModeConfig(PWM05,pwm_num);
}
if(pwm_num == 255)
{
f = 1;
}
else if(pwm_num == 0)
{
f = 0;
}
}
}
}
void Timer0() interrupt 1
{
//每次產(chǎn)生中斷后初始化定時器初值, 1ms秒產(chǎn)生1次中斷
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
count ++;
if(count == 10)
{
sta =1;
count = 0;
}
}
實(shí)現(xiàn)效果
審核編輯 黃宇
-
led
+關(guān)注
關(guān)注
242文章
23840瀏覽量
673959 -
PWM
+關(guān)注
關(guān)注
116文章
5507瀏覽量
219355 -
呼吸燈
+關(guān)注
關(guān)注
10文章
112瀏覽量
43221
發(fā)布評論請先 登錄
使用單片機(jī)驅(qū)動多組LED燈實(shí)現(xiàn)呼吸效果電路
單片機(jī)來控制LED實(shí)現(xiàn)呼吸燈的效果
PWM實(shí)現(xiàn)呼吸燈效果
基于CPLD/FPGA的呼吸燈效果實(shí)現(xiàn)_呼吸燈源碼_明德?lián)P資料
使用PWM控制LED實(shí)現(xiàn)呼吸燈的效果
用漸變的PWM信號實(shí)現(xiàn)LED呼吸燈的方法
如何用LED燈實(shí)現(xiàn)呼吸燈的功能
如何通過定時器產(chǎn)生PWM波控制LED實(shí)現(xiàn)呼吸燈的效果?
請問一下STM32 PWM是如何去實(shí)現(xiàn)呼吸燈設(shè)計(jì)的
【Banana PI Leaf S3開發(fā)板試用體驗(yàn)】PWM 調(diào)節(jié)LED的呼吸燈效果
【ZYNQ Ultrascale+ MPSOC FPGA教程】第十章 PWM呼吸燈實(shí)驗(yàn)

STM32 使用PWM實(shí)現(xiàn)呼吸燈

STM32G0開發(fā)筆記:用PWM來實(shí)現(xiàn)LED呼吸燈效果

評論