首页 > 其他分享 >51单片机实现呼吸灯和PWM

51单片机实现呼吸灯和PWM

时间:2023-03-04 13:32:26浏览次数:43  
标签:PWM LED void 51 单片机 Time 100 include Speed

1.实现呼吸灯,其实就是使用很多个for循环不断对P0端口进行设置

#include <REGX52.H>

sbit LED=P2^0;

void Delay(unsigned int t)
{
while(t--);
}

void main()
{
unsigned char Time,i;
while(1)
{
for(Time=0;Time<100;Time++) //改变亮灭时间,由暗到亮
{
for(i=0;i<20;i++) //计次延时
{
LED=0; //LED亮
Delay(Time); //延时Time
LED=1; //LED灭
Delay(100-Time); //延时100-Time
}
}
for(Time=100;Time>0;Time--) //改变亮灭时间,由亮到暗
{
for(i=0;i<20;i++) //计次延时
{
LED=0; //LED亮
Delay(Time); //延时Time
LED=1; //LED灭
Delay(100-Time); //延时100-Time
}
}
}
}

2.产生PWM的方法

51单片机实现呼吸灯和PWM_51单片机

所以在这里就是要选择一段时间,然后前面一段时间给高平,后面一段时间给低平,这样子就能产生一段时间内的频率,从而控制转速

使用定时器

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Timer0.h"

sbit Motor=P1^0;

unsigned char Counter,Compare; //计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;

void main()
{
Timer0_Init();
while(1)
{
KeyNum=Key();
if(KeyNum==1)
{
Speed++;
Speed%=4;
if(Speed==0){Compare=0;} //设置比较值,改变PWM占空比
if(Speed==1){Compare=50;}
if(Speed==2){Compare=75;}
if(Speed==3){Compare=100;}
}
Nixie(1,Speed);
}
}

void Timer0_Routine() interrupt 1
{
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
Counter++;
Counter%=100; //计数值变化范围限制在0~99
if(Counter<Compare) //计数值小于比较值
{
Motor=1; //输出1
}
else //计数值大于比较值
{
Motor=0; //输出0
}
}

定时器的函数为

#include <REGX52.H>

/**
* @brief 定时器0初始化,[email protected]
* @param 无
* @retval 无
*/
void Timer0_Init(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}





标签:PWM,LED,void,51,单片机,Time,100,include,Speed
From: https://blog.51cto.com/u_15881561/6100024

相关文章

  • 51电子-STC89C51开发板:安装驱动
    全部内容请点击目录列表查看:51电子-STC89C51开发板:《目录》 --------------------------- 正文开始 ---------------------------------------电脑识别开发板,肯......
  • HDOJ 2051-2060
    2050BitsetProblemDescriptionGiveyouanumberonbaseten,youshouldoutputitonbasetwo.(0<n<1000) InputForeachcasethereisapostivenumbern......
  • Ed25519 use process (primary)
    GenerateKey、Signopenurl:https://cyphr.me/ed25519_applet/ed.html私钥签名公钥验签Verifyopenurl:https://ed25519.altr.dev/......
  • 新手学习单片机的首选到底是什么?
    一、首先为什么要先学51单片机?​因为51单片发展最早,应用最广泛,特别是I/O口的操作非常简单,而且相关的学习资料最多、教材最成熟,学习起来得心应手,入门很快。有了这个基础再去......
  • 51电子-STC89C51开发板:安装KEIL
    全部内容,请点击:51电子-STC89C51开发板:《目录》 --------------------------- 正文开始 ---------------------------------------1.介绍:安装KEIL是一个代码开发......
  • 51电子-STC89C51开发板:开发包
    全部内容,请点击:51电子-STC89C51开发板:《目录》 --------------------------- 正文开始 ---------------------------------------  购买开发板,可以和老板索取......
  • hdu-1515
    dfs 题意:给你两个字符串,问:第一个字符串按入栈出栈规则,能否达到第二个字符串,输出所有的方法,i表示入栈,o表示出栈。用dfs模拟第一个字符串入栈出栈过程:1.当前字符......
  • HDU-5112-A Curious Matt (2014ACM/ICPC北京赛区现场赛A题!)
    http://acm.hdu.edu.cn/showproblem.php?pid=5112排序之后计算就好开始用cin超时了#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#......
  • hdu-5122
    http://acm.hdu.edu.cn/showproblem.php?pid=5122简单题#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#include<ctype.h>#include......
  • 51电子-STC89C51开发板:目录
    51电子(我要电子:www.51dz.com),是国内最早一批的电子类相关网站,在深圳有实体店。这个系列文章以STC89C51来做笔记,讲解使用过程。 ------------------------------------......