|
這個是官方提供的,使用庫函數(shù)做的PWM呼吸燈程序,使用很方便,不需要了解太多繁瑣的底層寄存器
單片機(jī)源程序如下:
- #include "config.h"
- #include "STC8A_GPIO.h"
- #include "STC8A_Delay.h"
- #include "STC8A_PWM15bit.h"
- /************* 功能說明 ***************
- 輸出4路PWM信號:
- PWM0 輸出"呼吸燈"效果PWM.
- PWM1 循環(huán)輸出1秒鐘PWM,1秒鐘高電平,1秒鐘低電平.
- PWM2,PWM3 固定PWM.
- 下載時, 選擇時鐘 24MHz (用戶可在"config.h"修改頻率).
- ******************************************/
- /************* 本地常量聲明 **************/
- /************* 本地變量聲明 **************/
- u16 pwm0,pwm1;
- bit B_PWM0_Dir; //方向, 0為+, 1為-.
- /************* 本地函數(shù)聲明 **************/
- /************* 外部函數(shù)和變量聲明 *****************/
- /******************** IO口配置 ********************/
- void GPIO_config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure; //結(jié)構(gòu)定義
- GPIO_InitStructure.Pin = GPIO_Pin_All; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
- GPIO_InitStructure.Mode = GPIO_PullUp; //指定IO的輸入或輸出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
- GPIO_Inilize(GPIO_P2,&GPIO_InitStructure); //初始化
- }
- /******************** PWM15配置 ********************/
- void PWM15_config(void)
- {
- PWM15_InitTypeDef PWM15_InitStructure;
- PWM15_InitStructure.PWM_Enable = ENABLE; //PWM使能, ENABLE, DISABLE
- PWM15_InitStructure.PWM_Period = 0x1000; //PWM周期, 0~0x7fff
- PWM15_InitStructure.PWM_Clock_Sel = PWM_CLK_SYS; //時鐘源選擇, PWM_CLK_SYS, PWM_CLK_TM2
- PWM15_InitStructure.PWM_Clock_PS = 0; //系統(tǒng)時鐘分頻參數(shù)(PS+1分頻), 0~15
- PWM15_InitStructure.PWM_CInt = DISABLE; //計(jì)數(shù)器歸零中斷使能, ENABLE, DISABLE
- PWM15_InitStructure.PWM_Counter = ENABLE; //計(jì)數(shù)器使能, ENABLE, DISABLE
- PWM15_Init(&PWM15_InitStructure);
-
- PWM15Duty(PWM15_0,0x000,0x200); //PWM_ID, 輸出低電平位置, 輸出高電平位置
- PWM15Duty(PWM15_1,0x200,0xc00); //PWM_ID, 輸出低電平位置, 輸出高電平位置
- PWM15Duty(PWM15_2,0x400,0x800); //PWM_ID, 輸出低電平位置, 輸出高電平位置
- PWM15Duty(PWM15_3,0x800,0xe00); //PWM_ID, 輸出低電平位置, 輸出高電平位置
- PWMChannelCtrl(PWM15_0,ENABLE,0,DISABLE,DISABLE,DISABLE); //PWM_ID, 輸出使能, 初始電平, PWM中斷, 第二個觸發(fā)點(diǎn)中斷, 第一觸發(fā)點(diǎn)中斷
- PWMChannelCtrl(PWM15_1,ENABLE,0,DISABLE,DISABLE,DISABLE); //PWM_ID, 輸出使能, 初始電平, PWM中斷, 第二個觸發(fā)點(diǎn)中斷, 第一觸發(fā)點(diǎn)中斷
- PWMChannelCtrl(PWM15_2,ENABLE,0,DISABLE,DISABLE,DISABLE); //PWM_ID, 輸出使能, 初始電平, PWM中斷, 第二個觸發(fā)點(diǎn)中斷, 第一觸發(fā)點(diǎn)中斷
- PWMChannelCtrl(PWM15_3,ENABLE,0,DISABLE,DISABLE,DISABLE); //PWM_ID, 輸出使能, 初始電平, PWM中斷, 第二個觸發(fā)點(diǎn)中斷, 第一觸發(fā)點(diǎn)中斷
- }
- /******************** task A **************************/
- void main(void)
- {
- GPIO_config();
- PWM15_config();
- pwm0 = 0;
- pwm1 = 0;
- B_PWM0_Dir = 0;
- // EA = 1;
-
- while (1)
- {
- delay_ms(1);
- if(B_PWM0_Dir)
- {
- if(--pwm0 <= 0x100) B_PWM0_Dir = 0; //PWM0
- }
- else if(++pwm0 >= 0xf00) B_PWM0_Dir = 1; //PWM0
- PWM15Duty(PWM15_0,0,pwm0);
- if(pwm1 >= 3000)
- {
- pwm1 = 0;
- }
- else if(pwm1 >= 2000)
- {
- PWMLevelSet(PWM15_1,ENABLE,DISABLE); //PWM_ID, 強(qiáng)制輸出低電平, 強(qiáng)制輸出高電平
- }
- else if(pwm1 >= 1000)
- {
- PWMLevelSet(PWM15_1,DISABLE,ENABLE); //PWM_ID, 強(qiáng)制輸出低電平, 強(qiáng)制輸出高電平
- }
- else
- {
- PWMLevelSet(PWM15_1,DISABLE,DISABLE); //PWM_ID, 強(qiáng)制輸出低電平, 強(qiáng)制輸出高電平
- }
- pwm1++;
- }
- }
復(fù)制代碼
Keil代碼下載:
20-15位增強(qiáng)型PWM模式呼吸燈程序.rar
(297.69 KB, 下載次數(shù): 63)
2022-1-16 18:02 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|