蓝桥杯单片机(六)PWM

这篇具有很好参考价值的文章主要介绍了蓝桥杯单片机(六)PWM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文内出现的函数在其他文章有讲:
蓝桥杯单片机(一)流水灯
蓝桥杯单片机(二)独立按键
蓝桥杯单片机(四)动态数码管
蓝桥杯单片机(五)定时器

蓝桥杯单片机(六)PWM
如图所示,有三列方波在图中,所谓PWM,就是指上述图中的方波,波形在高电平和低电平不断变化,只不过PWM的占空比可变,上图就是三种不同占空比的方波,所谓占空比就是,占空比=高电平的时间/周期的时间。
这次我们用单片机来模拟PWM输出:

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

void PWM(void);
void Delay1ms(void);

void main(void)
{
	while(1)
	{
	
	}
}

void PWM(void)
{
	P0=0X01;
	Delay1ms();
	P0=0X00;
	Delay1ms();
}

void Delay1ms(void)		//@11.0592MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	_nop_();
	i = 11;
	j = 190;
	do
	{
		while (--j);
	} while (--i);
}

我们让P00首先在高电平持续1ms,然后低电平持续1ms,不断循环,这就是一个占空比为50%的PWM波,有示波器可以拿示波器观察P00口波形。当然也可以用定时器来控制P00的输出,使PWM更加准确。
由于我没有示波器,所以采用PWM控制LED亮度来进行实验。
实验内容:通过按键控制PWM占空比控制LED亮度,数码管显示PWM占空比
程序如下:

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

#define uchar unsigned char
#define uint unsigned int
	

void init(void);
void Delay5ms(void);
void Timer0Init(void);
void Timer1Init(void);
void Dkey_scan(void);

uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar SMG[8]={10,10,10,10,10,10,10,10};//初始显示10,全息数码管

char duty=50;
uchar num=5;
uchar LED=0xff;
uint t=0;

void main(void)
{
//初始化开发板,定时器0,定时器1
	init();
	Timer0Init();
	Timer1Init();
	EA=1;ET0=1;ET1=1;
	while(1)
	{		
		if(duty<100)
		{
			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=10;
			SMG[5]=10;
			SMG[6]=duty/10;
			SMG[7]=duty%10;		
		}
		else
		{
			SMG[0]=SMG[1]=SMG[2]=SMG[3]=SMG[4]=10;
			SMG[5]=duty/100;
			SMG[6]=duty%100/10;
			SMG[7]=duty%10;				
		}
		Dkey_scan();
		P2=0X80;P0=LED;
	}
}

//定时器1中断服务函数,输出PWM
void time1() interrupt 3
{
	t++;
	if(t<((20*duty)/100))
	{
		LED |=0x01;
	}
	else if(t<20)
	{
		LED &=0xFE;
	}
	else
	{
		t=0;
	}
}
//定时器0显示数码管
void SMG_output() interrupt 1
{
	P2=(P2&0X1F)|0Xc0;
	P0=(1<<num);
	P2=(P2&0X1F)|0Xe0;
	P0=tab[SMG[num]];
	if(++num==8)num=5;	
}
//按键扫描程序
void Dkey_scan(void)
{
	static unsigned char keybyte=0;
	static unsigned char key;
	if(((P3&0X0F)!=0X0F)&&(keybyte==0))
	{
		Delay5ms();
		if((P3&0X0F)!=0X0F)
		{
			keybyte=1;key=P3&0x0f;
		}
	}
	if((keybyte==1)&&((P3&0X0F)==0X0F))
	{
		Delay5ms();
		if((P3&0X0F)==0X0F)
		{
			switch(key)
			{
				case 0x0e:
					duty -=10;
					if(duty<0) duty=0;
				break;
				
				case 0x0d:
					duty +=10;
					if(duty>100) duty=100;
				break;
			}
			keybyte=0;
		}
	}
}

void Timer0Init(void)		//500微秒@11.0592MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x66;		//设置定时初值
	TH0 = 0xEA;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

void Timer1Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xCD;		//设置定时初值
	TH1 = 0xD4;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
}

void init(void)
{
	P2=(P2&0X1F)|0XA0;
	P0=0X00;
	P2=(P2&0X1F)|0X80;
	P0=0Xff;
	P2=(P2&0X1F)|0Xc0;
	P0=0Xff;
	P2=(P2&0X1F)|0Xe0;
	P0=0Xff;	
}

void Delay5ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

最后效果如图:
蓝桥杯单片机(六)PWM
可以看见LED逐渐变亮
有问题可以评论和私信
文章来源地址https://www.toymoban.com/news/detail-412714.html

到了这里,关于蓝桥杯单片机(六)PWM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【51单片机学习】PWM电机调速

    中断允许寄存器,详情可以看STC51单片机芯片手册第160页 TMOD、TCON详情可以看STC51单片机芯片手册第187页 51单片机中的定时器有三个,(C52比C51多了一个定时器3,但这些都统称为51单片机) 本次以 Timer0 为例进行介绍 定时器的作用: 1:用于计时系统,可实现软件计时,或者使程

    2023年04月18日
    浏览(84)
  • 基于51单片机的舵机控制(PWM)

    舵机是一种位置伺服的驱动器,常被用于遥控汽车、机器人等领域,结构主要包括小型直流电机、变速齿轮组、可调电位器和控制电路板四个部分,如下图,舵机的外部一般接有三根线,分别是黑(接地线)、红(电源线)、棕(白或者黄,信号线)三种颜色进行区分。 2.

    2024年02月16日
    浏览(43)
  • 如何使用单片机 pwm 控制 mos 管?

    目录 选择适合的硬件 连接电路 编写代码 参考示例 程序一 程序二 测试与调试 注意事项         使用单片机(如常见的Arduino、STM32等)通过PWM(脉冲宽度调制)控制MOS管(金属氧化物半导体场效应管)是一种常见的电路控制方法。以下是一个基本的设计步骤指南: 选择

    2024年04月15日
    浏览(41)
  • 单片机学习笔记---直流电机驱动(PWM)

    直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 因为电机

    2024年02月21日
    浏览(51)
  • 【51单片机】直流电机驱动(PWM)(江科大)

    · 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 · 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 · 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 电机的驱动无法

    2024年02月20日
    浏览(50)
  • 【Proteus仿真】【51单片机】PWM电机调速系统设计

    本项目使用Proteus8仿真51单片机控制器,使用L298N电机模块、数码管模块、按键模块、LED指示灯模块等。 系统运行后,数码管显示电机当前运行档位和速度。 可通过按键K4启动与停止,按键K1加速、按键K2减速,按键K3换向; 档位可在1-5挡。 最终可实现: 按键功能:具有加速、

    2023年04月17日
    浏览(52)
  • 【51单片机】直流电机的驱动和PWM调速

    51单片机驱动直流电机与 PWM 调速是通过使用 51 单片机来控制直流电机的转速和方向。51 单片机通过控制电机的电流来实现驱动,并通过生成 PWM 信号来调节电机的转速。使用 PWM 调速可以使得直流电机的转速精确可控,并且减少了电机的功率损耗。在 51 单片机的控制系统中,

    2023年04月09日
    浏览(42)
  • 蓝桥杯单片机客观题之数电学习(深夜学习——单片机)

    1、数字:\\\'0\\\'——0x30 2、字母:\\\'a\\\'——0x61;\\\'A\\\'——0x41 1、首位不变 2、从左到右,加上每一对相邻的二进制编码位,从而得到下一个格雷码位,舍去进位  1、首位不变 2、新生成的二进制码加上下一位格雷码得到下一位二进制码 1、小数部分的转换方法应该是先得到的是高位,后

    2023年04月09日
    浏览(93)
  • 【概念理解】单片机控制舵机之PWM波参数的设置

    我们要知道,SG90舵机接收的PWM信号的参数:f=50Hz,T=1/f,所以周期为20ms。 当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。 换句话说,我们要用单片机产生一个 周期(20ms) 的PWM波,然后获得对应这些时长(分别是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高电

    2024年02月10日
    浏览(39)
  • 单片机控制PWM的直流电机调速系统的设计

    单片机控制PWM的直流电机调速系统的设计  摘 要:在国民生产中,随着现代技术的发展,电力电子技术已得到了全面的发展,其技术已应用到各个领域。在各类机电系统中,由于直流电机具有良好的启动、制动和调速性能,直流电机调速系统已广泛运用于工业、航天领域的各个

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包