目的
利用pwm實現呼吸為燈效果
實驗環境
TBK-RD8T3x開發板
實現原理
RD8T37單片機最多提供 14 路 PWM,這 14路 PWM 分為兩類:多功能 PWM:共8路,只有一組,即 PWM0,輸出信號口為: PWM0 0~07。
我們只需要修改PWM0的占空比就可以實現LED燈的亮度。
實現步驟
1、在keil工程加入rd8_pwm.c
2、根據數據手冊與原理圖,我這里選用P42為PWM輸出:
3、初始化PWM0通道5
/*****************************************************
*函數名稱: SC_PWM0_Init
*函數功能: PWM0初始化函數
*入口參數:void
*出口參數:void
*****************************************************/
void SC_PWM0_Init(void)
{
/*PWM0獨立模式*/PWM_Init(PWM0_PRESSEL_FHRC_D1,255);
/*PWM00 獨立模式*/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開關*/PWM_CmdEX(PWM0_Type,ENABLE);
/*PWM0_Init write here*/
}
4、動態修改占空比的函數為:
PWM_IndependentModeConfig(PWM05,pwm_num);
5、為了達到非阻塞式的動態修改占空比,以達到實現呼吸燈的效果,我附了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毫秒溢出產生中斷
TL0 =(65536-1000)%256; //1000us定時,即1毫秒溢出產生中斷
ET0 = 1; //開啟定時器0中斷
EA = 1; //開啟全局中斷
TR0 = 1; //定時器0開始計數;
}
/*****************************************************
*函數名稱: SC_PWM0_Init
*函數功能: PWM0初始化函數
*入口參數:void
*出口參數:void
*****************************************************/
void SC_PWM0_Init(void)
{
/*PWM0獨立模式*/PWM_Init(PWM0_PRESSEL_FHRC_D1,255);
/*PWM00 獨立模式*/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開關*/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
{
//每次產生中斷后初始化定時器初值, 1ms秒產生1次中斷
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
count ++;
if(count == 10)
{
sta =1;
count = 0;
}
}
實現效果
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
led
+關注
關注
242文章
23277瀏覽量
660874 -
PWM
+關注
關注
114文章
5186瀏覽量
213939 -
呼吸燈
+關注
關注
10文章
110瀏覽量
42731
發布評論請先 登錄
相關推薦
PWM實現呼吸燈效果
){ analogWrite(11,a); delay(8);//當前亮度的維持的時間,單位毫秒 }delay(800);//完成一個循環后等待的時間,單位毫秒}很簡單很簡單的幾句代碼就能實現呼吸燈~然后,我們將程序下載到Ard
發表于 07-20 15:03
基于CPLD/FPGA的呼吸燈效果實現_呼吸燈源碼_明德揚資料
特效呼吸燈1功能概述顧名思義,特效呼吸燈是指在電路控制之下,LED燈光完成由滅到亮、由亮到滅的逐漸變化,感覺像是在
發表于 08-02 18:03
使用PWM控制LED實現呼吸燈的效果
, then set pwm value to highpwm_r elsepwm_r endend那么如何實現呼吸燈的效果呢?我們知道
發表于 01-06 17:43
請問一下STM32 PWM是如何去實現呼吸燈設計的
STM32 PWM實現呼吸燈使用STM32F103ZET6 定時器4 CH2通道產生PWM波,在GPIOD,GPIO_PIN13引腳
發表于 02-21 07:30
【Banana PI Leaf S3開發板試用體驗】PWM 調節LED的呼吸燈效果
在BPI-Leaf-S3開發板上要實現呼吸燈效果非常容易,只需幾個簡單的函數調用即可。由于開發板上配置的是全彩LED
發表于 10-19 12:28
STM32 使用PWM實現呼吸燈
STM32 PWM實現呼吸燈使用STM32F103ZET6 定時器4 CH2通道產生PWM波,在GPIOD,GPIO_PIN13引腳
發表于 12-24 19:41
?55次下載
評論