51单片机PWM控制LED灯渐明渐暗实验

51单片机PWM控制LED灯渐明渐暗实验

1.概述

这篇文章介绍单片机的PWM通过占空比控制LED灯的渐明渐暗效果,通过该实验掌握PWM的原理以及应用它做一些事情。

2.操作步骤

2.1.硬件电路

1.硬件准备
名称 型号 数量
单片机 STC12C2052 1
LED彩灯 2
晶振 12MHZ 1
电容 30pf 2
电阻 100欧姆 2
面包板 1
连接线 5
2.电路图原理图

这次实验使用了两个LED灯交替闪烁,因此按照11号引脚接LED灯的方式在9号引脚同样接入另一个LED灯即可。

2.2.程序代码

c 复制代码
/*************************************************************
* 程序名: PWM控制两个LED灯亮度渐亮渐暗
* 编写人: bruce
* 硬件支持:TC12C2052 外部12MHZ晶振
* 日  期: 2023-11-14
* 修改日志: 通过控制PWM占空比调控LED灯亮和灭实现亮度渐变效果
/*************************************************************/

#include<STC12C2052AD.H>


/*********************************************************************************************
函数名:PWM初始化函数
调  用:PWM_init();
参  数:无
返回值:无
结  果:将PCA初始化为PWM模式,初始占空比为0
备  注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
/**********************************************************************************************/
void PWM_init (void){
	CMOD=0x02; //设置PCA定时器
 	CL=0x00; 
 	CH=0x00;
	CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
 	CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
 	CCAP0H=0x00; // PWM0初始时为0

	CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)
	CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
 	CCAP1H=0x00; // PWM1初始时为0

	//CCAPM2=0x42; //PWM2设置PCA工作方式为PWM方式
	//CCAP2L=0x00; //设置PWM2初始值与CCAP0H相同
 	//CCAP2H=0x00; // PWM2初始时为0

	//CCAPM3=0x42; //PWM3设置PCA工作方式为PWM方式
	//CCAP3L=0x00; //设置PWM3初始值与CCAP0H相同
 	//CCAP3H=0x00; // PWM3初始时为0

 	CR=1; //启动PCA定时器
}


/*********************************************************************************************
函数名:PWM0占空比设置函数
调  用:PWM0_set();
参  数:0x00~0xFF(亦可用0~255)
返回值:无
结  果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备  注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**********************************************************************************************/
void PWM0_set(unsigned char a){
	CCAP0L=a;
	CCAP0H=a;
}

/*********************************************************************************************
函数名:PWM1占空比设置函数
调  用:PWM1_set();
参  数:0x00~0xFF(亦可用0~255)
返回值:无
结  果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
/**********************************************************************************************/
void PWM1_set(unsigned char a){
	CCAP1L=a;
	CCAP1H=a;
}

/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
	unsigned int i;
	while( --a != 0){
		for(i = 0; i < 600; i++);
	}
}

void main(void){
	//PWM初始化
	PWM_init();
	
	while(1){
		unsigned char a;
		for(a=0x00;a<0xff;a++){
			//设置PWM0占空比
			PWM0_set(a);
			//设置PWM1占空比
			PWM1_set(~a);
			DELAY_MS(8);
		}
		for(a=0xff;a>0x00;a--){
			//设置PWM0占空比
			PWM0_set(a);
			//设置PWM1占空比
			PWM1_set(~a);
			DELAY_MS(8);
		}
	}

}

2.3.烧录程序

使用Keil工具编译程序,打开STC-ISP软件选择编译后的hex文件,设置外部晶振,下载程序。将程序烧录到单片机后,在给单片机冷启动(断掉5V电源在上电)使单片机切换为外部晶振,观察两个LED灯交替明暗变化。

相关推荐
芯岭技术2 小时前
XL2477 WiFi 透传模组,让产品快速、低成本接入无线网络
单片机·嵌入式硬件
点灯小铭2 小时前
基于单片机的自动路灯监控系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
努力创造奇迹4 小时前
STM32 HAL库 DS18B20驱动实现
stm32·单片机·嵌入式硬件
Molesidy4 小时前
【STM32】【USB】USB通讯方式的学习笔记以及基于CubeMX HAL库的例程验证
stm32·单片机·嵌入式·usb
Final5454 小时前
stm32循迹小车
stm32·单片机·嵌入式硬件
yyds_22014 小时前
STM32电机库无感代码注释无传感器版本龙贝格观测三电阻双AD采样前馈控制弱磁控制斜坡启动
stm32·单片机·嵌入式硬件·支持向量机
学嵌入式的六子4 小时前
如何使用VScode开发STM32【喂饭级教程】-全过程讲解
c语言·ide·vscode·stm32·单片机·嵌入式硬件
niuTaylor4 小时前
STM32控制舵机完全指南:从原理到实战(适合小白入门)
stm32·单片机·嵌入式硬件
清风6666664 小时前
基于单片机的玉米播种机漏播检测装置设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
三品吉他手会点灯4 小时前
STM32F103 学习笔记-21-串口通信(第2节)-STM32串口功能框图讲解
笔记·stm32·单片机·嵌入式硬件·学习