51单片机之用定时器写呼吸灯(全站解释最细节)

这篇具有很好参考价值的文章主要介绍了51单片机之用定时器写呼吸灯(全站解释最细节)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础知识介绍: 

        PWM:一般指脉冲宽度调制。

        个人理解:在一个周期内,高电平和低电平持续时间所占总时间的百分比,即占空比,即PWM。

        呼吸:一呼一吸即为呼吸。

        要实现呼吸的效果,就要在呼气和吸气的这俩个小周期内实现pwm的动态变化,从视觉上看到LED由亮到灭,由灭到亮的过程。

        个人理解:在一个呼气或者吸气的过程中,pwm改变速度足够快的情况下,其实对LED管脚电压的积分原理。实际就是求高电平或者低电平波形面积问题。

插播一条视频:        !!!!!一定要看!!!!!

           动态变化的pwm

代码分享:

/*********************************************************************************
* 作者:呆瓜
* 版本:V1.1
* 主控芯片:STC89C52
* 程序功能:LED的呼吸效果
* 程序说明:
* 时间:2021.10.13
*********************************************************************************/
#include<reg52.h>

/****配置LED****/
sbit LED = P0^0;
bit Direct_flag = 0; 	//LED的呼吸方向的开关
/****函数声明****/
void T0init();
/****全局变量****/
unsigned int PWM_wanttime=0;			//想要多长时间改变的占空比一次
unsigned int Breath_wanttime=0;		//想要多长时间改变呼气或者吸气的值时间
unsigned int  PWM_value = 0;				//占空比的大小

void main()
{
	T0init();
	while(1)
	{
	}	
}
/*********************************************************
* 函数说明 :1ms定时
* 入口参数 :void
* 返回值   :void
*********************************************************/
void T0init()
{
    TMOD |= 0x01;	//设置定时器为工作方式1  
    TH0=0XFC;   //1ms定时,装入初值
    TL0=0X66;
    ET0 = 1;    //开定时器的中断
    TR0 = 1;    //开定时器
    EA = 1;     //开总中断
}

void Time0(void) interrupt 1
{

    TH0=0XFC;   //1ms定时,装入初值
    TL0=0X66;

    PWM_wanttime++;			//改变的占空比一次的标志
    Breath_wanttime++;		//呼气或者吸气的时间改变的标志


    if(PWM_wanttime == PWM_value)      	//判断是否到了点亮LED的时候
        LED = 0;                    	//点亮LED
    if(PWM_wanttime == 10)            	//当前周期结束
    {
        LED = 1;                    	//熄灭LED
        PWM_wanttime = 0;              	//重新计时,去改变占空比
    }


    if((Breath_wanttime == 200) && (Direct_flag == 0))	  //200ms 改一次占空比,占空比每次增加10%
    {                               
        Breath_wanttime = 0;
        PWM_value++;				//改变占空比的值

        if(PWM_value == 9)          //占空比更改方向
            Direct_flag = 1; 
    }

    if((Breath_wanttime == 200) && (Direct_flag == 1))	 //200ms 改一次占空比,占空比每次减少10%
    {                               
        Breath_wanttime = 0;
        PWM_value--;				//改变占空比的值

        if(PWM_value == 1)          //占空比更改方向
            Direct_flag = 0; 
    }
}

注:        呼吸流畅度调整        PWM_wanttime 的判定值   

               呼吸持续时间调整        Breath_wanttime的判定值

****转载请注明出处****

****请大佬指点****

****希望给个三连****文章来源地址https://www.toymoban.com/news/detail-412328.html

到了这里,关于51单片机之用定时器写呼吸灯(全站解释最细节)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 51单片机——定时器中断

    新版51单片机内部有 3 个16位可编程的定时器/计数器,即定时器 T0,T1,T2 。他们既有 定时 功能又有 计数 功能,我们可以通过配置与它们相关的特殊功能寄存器可以选择启用定时功能或计数功能;其中需要注意的是,这个定时器系统是单片机内部的一个独立的硬件部分,它与

    2023年04月10日
    浏览(44)
  • 51单片机定时器实验(汇编)

    基于AT89C51的定时器实验,汇编语言,分享出来是希望各位能共同学习。附上注释希望能认真研究,若有错误请指出,谢谢。 一、实验目的 掌握单片机定时器的使用方法。 掌握中断的使用方法。 二、实验内容 采用中断方式控制定时器。使得单片机P1.0引脚产生周期为1S的方波

    2024年02月11日
    浏览(59)
  • 51单片机之定时器篇

    首先,学好单片机必须要搞懂定时器,定时器是单片机重要的组成部分之一,总之,学不好定时器,单片机相当于没学,下面就让我介绍如何学好单片机定时器。 学习单片机首先要明白的: 1,51单片机有两组定时器/计数器,既可以定时,又可以计数,总称之定时器 2,单片

    2024年02月11日
    浏览(54)
  • 51单片机 | 定时器中断实验

      这一节介绍51单片机的定时器中断。 STC89C5X 含有 3 个定时器:定时器 0、定时器 1、定时器 2(注意: 51 系列单片机一定有基本的 2 个定时器(定时器 0 和定时器 1),但不全有 3 个中断,需要查看芯片手册,通常我们使用的是基本的 2 个定时器:定时器 0/1)。本节要实现

    2024年02月06日
    浏览(111)
  • 51单片机PWM(定时器)

    目录 前言 一、PWM的介绍 二、在定时器中配置PWM 三、代码  总结         PWM普遍应用于惯性系统,我们知道单片机几乎只能输出“1”和“0”两种状态,即开和关,想要输出模拟量是不太容易实现的,那么怎样才能使单片机输出平滑的线性信号呢?没接触过PWM的小伙伴可能第

    2024年02月09日
    浏览(55)
  • 【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

              51定时/计数器的详解。                   码字不易,如有帮助请收藏,点赞哦。         前提:首先我们知道51单片机内部有21~26个特殊功能寄存器: P.x口寄存器:P0、P1、P2、P3 数据指针寄存器:DP0H、DP0L、DP1H、DP1L 定时器: TH1、TL1、TH0、TL0、TMOD、TCON 串口:

    2024年02月07日
    浏览(98)
  • 51单片机定时器基础知识

    经验总结:定时器0工作方式1的溢出中断初始值计算 1.晶振11.0592M 11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。 65536-46080=19456(4c00) TH0=0x4c,TL0=0x00 2.晶振12M 12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次 机器周期。 65536-50000=15536(3cb0) TH0=0x

    2024年02月04日
    浏览(115)
  • 51单片机定时器中断TMOD

    最近在学定时器中断TMOD,写程序时,要对定时器进行配置 对TMOD进行赋值时,拌了好久。。。。 如何根据所用的      定时器0/1 ,  工作方式0/1/2/3      对TMOD赋值呢? 我们知道: 1.TMOD长这样 :  由八位组成,前四位是T1的参数;后四位是T0的参数;GATE 和 C/T\\\' 不用多讲,

    2024年02月12日
    浏览(47)
  • 51单片机中断定时器1用法

    中断为使单片机具有对内部或外部随机发生的事件实时处理而设置的。 中断技术不仅解决了快速主机与I/O设备的数据传送问题,而且还有具有如下的优点: 1. 分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率。 2. 实时操作:CPU能够及时处理应用系统的随机事

    2024年02月06日
    浏览(61)
  • 【单片机c51】定时器应用1

    1.系统时钟为12MHz,编程实现从P1.0引脚输出一个周期为2ms的方波。 注:要想产生一个周期2ms的方波,定时器应产生1ms的周期性的定时,定时对P1.0求反。选择定时器T0,方式1定时,采用中断方式,GATE不起作用。   注:1.EA=1 所有的中断请求被开放 2.ET0=1  允许T0溢出的请求 3.T

    2024年02月04日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包