硬件电路也是很简单,
通过连续改变CCAP0H改变PWM0输出的PWM信号的占空比,PWM信号在P1.3脚输出,在PWM输出端口接入一颗LED用来显示呼吸灯的效果。
MCU:STC12C5A60S2 晶振:11.0592MHz
单片机源程序如下:
- /*********************************************************************************************************
- ** 工程功能 :PWM输出
- ** MCU:STC12C5A60S2
- ** 晶振:11.0592MHz
- * 配置PCA模块为8位PWM输出模式,PCA计数脉冲设置为Timer0的溢出频率,配置步骤如下:
- * 1、PCA模块0在空闲模式下扔然计数,选择T0计数溢出频率为PCA模块0的计数脉冲,禁止PCA0的溢出中断,即CMOD=0X84;
- * 2、不使用PCA中断,将PCA各模块中断请示标志清除,即CCON=0X00;
- * 3、PCA计数器清0,即使CH=CL=0;
- * 4、T0设置为工作方式2,8位自动重装模式,即TMOD=0X02;
- * 5、将计数初值装入T0;
- * 6、开启T0计数器,开启PCA0计数器,即TR0=1; CR=1;
- * 7、PWM输出端口为P1.3,另一端接LED可以查看呼吸灯效果。
- *********************************************************************************************************/
- #include<STC12C5A60S2.h>
- #include<LCD1602.h>
- #include<PWM.h>
- #define uint unsigned int
- /*********************************************************************************************************
- ** 函数功能 :延时函数
- ** 函数说明 :利用软件延时,占用CPU,经调试最小单位大约为1ms
- ** 入口参数 :time:需要延时的时间,单位ms
- ** 出口参数 :无
- *********************************************************************************************************/
- void Delay_ms(uint time)
- {
- uint i,j;
- for(i = 0;i < time;i ++)
- for(j = 0;j < 930;j ++);
- }
- void main()
- {
- unsigned char i=0;
- LCD_1602_Init(); //液晶显示前进行初始化
- PCA_init();
- Timer0_init();
- Write_1602_String("I LIKE MCU 2021",0X80);
- Write_1602_Data(0x05);//自定义字符'年'
- while(1) //在while(1)循环中通过连续改变CCAP0H改变PWM0输出的PWM信号的占空比,PWM信号在P1.3脚输出
- {
- for(i=255;i>1;i--)
- {
- CCAP0H=i;
- Delay_ms(8);
- }
- for(i=0;i<255;i++)
- {
- //PCA计数器工作在PWM模式时,CCAP0H和CCAPL用来控制输出PWM的占空比,对PWM0起主要影响作用的是CCAP0H,详细的介绍可参照文档中PCA/PWM的应用的章节
- CCAP0H=i;
- Delay_ms(8);
- }
- }
- }
复制代码
所有程序51hei提供下载:
STC12C5A60S2_PWM输出做呼吸灯效果.rar
(38.13 KB, 下载次数: 70)
|