蓝桥杯单片机小蜜蜂学习笔记-PWM脉宽调制

本文详细介绍了如何通过C语言在8051单片机上实现PWM脉宽调制,包括基本原理、占空比设置以及使用定时器函数来控制高电平和低电平的交替,以实现不同档位的灯光调节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考写前面

学习视频来自

【基础技能11】PWM脉宽调制信号的发生与控制

基本原理

PWM脉宽调制 主要是看占空比 

什么是占空比呢 

就是高电平占整个周期的比例就是占空比

我们通过调整占空比来实现PWM脉宽调制

我们要做的就是利用定时器 一会输出高电平一会输出低电平 生成一个矩形波 根据高低电平的持续时间 完成对占空比的设置

任务

首先这个100hz就是对应着0.01s的周期就是10ms的周期

一开始L1需要关闭 然后是1档-10%的占空比 2档-50%占空比 3档-90%占空比

代码

#include "reg52.h"
#include <intrins.h>

sbit l1=P0^0;
sbit s7=P3^0;
unsigned char count=0;
unsigned char duty=0;
unsigned char stat=0;
void selecthc573(){
	P2=(P2&0x1f)|0x80;
}

void delay(unsigned int n)
{
    unsigned int i,j;
    for(j=n;j>0;j--)
    for(i=112;i>0;i--);
}

//======timer function
void init_t(){
	TMOD=0X01;
	TH0=(65535-100)/256;
	TL0=(65535-100)%256;
	ET0=1;
	EA=1;
}

void ser_timer() interrupt 1{
	TH0=(65535-100)/256;
	TL0=(65535-100)%256;
	count++;
	if(count==duty){
		l1=1;
	}
	else if(count==100){
		l1=0;
		count=0;
	}
}
void key_scan(){
	if(s7==0){
		delay(100);
		if(s7==0){
			switch(stat){
				case 0:
					l1=0;
					TR0=1;
					duty=10;
					stat=1;
				break;
				case 1:
					duty=50;
					stat=2;
				break;
				case 2:
					duty=90;
					stat=3;
				break;
				case 3:
					TR0=0;
					stat=0;
					l1=1;
				break;
			}
			while(s7==0);
		}
	}

}
void main(){
	selecthc573();
	l1=1;
	init_t();
	while(1){
		key_scan();
	}
}

结果展示

单片机PWM调光效果演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值