历史上的今天

今天是:2024年08月25日(星期日)

正在发生

2021年08月25日 | 51单片机-呼吸灯

发布者:asd999ddd 来源: eefocus关键字:51单片机  呼吸灯  IO端口 手机看文章 扫描二维码
随时随地手机看文章

1.双定时器呼吸灯实现


呼吸灯的实现原理就是让小灯的IO端口在一段时间里PWM由大到小变化的占空比输出,接着又由小到大的占空比输出,小灯显示效果就是时亮时暗地交替闪烁。


首先我们用定时器0定时0.1ms,全局变量pwm在其中断函数里执行简单的从0到99的循环自加,这样周期就是10ms。


假如主函数里我们这样执行


if(pwm<90)P0=0xFF;

else P0=0x00;


那么IO端口输出的一直是周期为10ms占空比为90%的波形,这样8盏小灯一直是处于较暗的显示状态不变,要想实现呼吸灯,就要不停改变PWM波形的占空比。


所以我们使用定时器1来做间隔10ms地改变占空比,我们再定义一个全局变量highval,这个变量每隔10ms就会在定时器1中断函数中实现加1或者减1,加到99时又从99减回到0,减回到0又从0开始加到99的这样循环过程,大家回去研究左右往复循环流水灯的代码就会明白都是一样的思路。


然后主函数这样执行


if(pwmelse P0=0x00;


效果图如下

8.16.png

······

8.17.png

2.代码


#include  

#include //详见第六章第8讲

#include

 

u8 pwm=0,highval=99;

void main()

{   

    LED_Init();          //初始化LED硬件模块

    EA = 1;              //闭合总中断开关

    TIM0_Init(100,9);    //定时0.1ms,9是微调使定时时间更精确

    TIM1_Init(10000,10); //定时10ms,10是微调使定时时间更精确

 

    while(1)

    {   

        if(pwm        else P0=0x00; 

    }   

}

  

void TIM0_IRQHandler() interrupt 1

    TH0 = T0RH;        //重新加载重载值

    TL0 = T0RL;

    pwm++;

    if(pwm>=100)pwm=0; //pwm在0~99之间间隔0.1ms变化,周期就为10ms

}

  

void TIM1_IRQHandler() interrupt 3

{

    static u8 dir;

    TH1 = T1RH;          //重新加载重载值

    TL1 = T1RL;

   

    if(dir==1)highval--; //占空比逐渐减少,小灯逐渐变亮

    if(highval==0)dir=0;

   

    if(dir==0)highval++; //占空比逐渐增加,小灯逐渐变暗

    if(highval>=99)dir=1;

}


本章内容就告一段落了,定时器功能几乎是开发中必不可少的模块,灵活使用会使执行效率更加高效,大家有时想出的一些原创题目多使用定时器来训练,加强对这个工具的利用。


关键字:51单片机  呼吸灯  IO端口 引用地址:51单片机-呼吸灯

上一篇:51单片机-定时器&数码管扫描显示
下一篇:51单片机-舵机入门

推荐阅读

2018年8月23日上午,随着中国国际智能产业博览会(以下简称“智博会”)在重庆国际博览中心揭开序幕,重庆已全面进入了智博会时刻。 首届智博会以“智能化:为经济赋能,为生活添彩”为主题,共设综合展区、大企业展区、创新展区、展区以及未来智能生活体验区五大区域,为全球奉献了一场智能科技盛宴。 子公司海康机器人受邀坐镇大企业展区,与众多智能...
日本首相安倍晋三曾把2015年称作是机器人元年。原因在于东京奥运会申办成功后,日本在2015年开始启动机器人产业巨额投资。考虑到奥运会期间东京的外国游客将达到3300万人,可能会引发导游、警备、运输等人手不足,众多大学、企业都在为此研发相关机器人。对日本政府而言,机器人产业成了振兴经济的引擎。 在中国市场,机器人产业同样在迎来热潮。和日本...
受限于有限的空间,要实现一个成功的设计,关键之处通常在于减小电源尺寸。人们始终面临着一个挑战,即在更小的空间内实现更大的功率。更广泛地说电源器件的小型化将继续在现有基础上推动新的市场和应用 的发展。 数十年来,功率密度变得越来越高,这一行业发展趋势已成为一个不争的事实,预计这一趋势仍将继续。图 1 显示了 6A 至 10A 电源模块的转换器尺...
广告摘要声明广告【文/歌者】近日,新时达发布2021年半年度业绩报告。根据报告显示,2021年上半年新时达实现营收20.53亿元,同比增长19.73%;归母净利润8856.34万元,同比增长104.37%;经营活动产生的现金流量净额为2.3亿元,同比增长159.10%。图片从具体业务来看,报告期内,新时达机器人与运动控制类产品、电梯控制类产品、节能与工业传动类产品、其他产...

史海拾趣

问答坊 | AI 解惑

走进单片机世界(一)【普及单片机知识】

走进单片机世界(一)【普及单片机知识】 单片机基础知识一 数制 数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制和十六进制。 1.十进制数 人们通常使用的是十进制。它的特点有两个:有0,1,2…. ...…

查看全部问答∨

IGBT设计要点

好文共享,主题是IGBT设计要点!…

查看全部问答∨

急急急……求高手帮助关于DDS信号发生器的!

本人正在做一个可以输出正弦波和方波的DDS信号发生器,高频的,现在正在画电路图,有哪位高手做过?我用的是51和AD9833,25MHz的晶振,频率我想放大到100MHz,但幅度只有0.6V,有没有哪位高手推荐一块将幅度放大可调的集成运放……我是初学者,感激 ...…

查看全部问答∨

准谐振开关电源控制器建模

了解开关电源中准谐振的有用资料…

查看全部问答∨

在CE6.0中是如何导入BSP的?

前段时间一直忙于安装CE6.0,现在开始熟悉新的开发环境,因为以前一直是使用CE5.0的,所以,在这里我的疑问是:在CE6.0中是如何导入BSP的? 在CE5.0中,有一项Manage Catalog Items...可以导入.CEC管理文件。而在CE6.0情况下是没有这个选项的,因 ...…

查看全部问答∨

U驱动问题

我想知道是不是有了U口驱动,那么就能自检u口设备的插拔?…

查看全部问答∨

DeviceIoControl导致蓝屏。。。

DeviceIoControl导致蓝屏。。。 #define FILE_DEVICE_FILEMON    0x00008300 #define IOCTL_FILEMON_ADDPROTECTEDPATH (ULONG) CTL_CODE( FILE_DEVICE_FILEMON, 0x810, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_FILEMON_DE ...…

查看全部问答∨

LPC的IRQ中断问题

#include<lpc213x.h>        #include<stdlib.h>           #define Fosc 11059200 #define Fcclk Fosc*6 #define Fpclk Fcclk/4 #define Baud 9600 unsigned char i; unsign ...…

查看全部问答∨

谁有ADE7753的中文资料 急!!!!!!!!

ADE7753的电压增溢和电流增溢怎么配置。。。没有中文资料郁闷 有那位大哥帮忙解决下。。非常感谢…

查看全部问答∨

怎么用lpc1769设计一个低频三相正弦信号发生器?

任务:设计制作一个低频三相正弦信号发生器,能产生频率和相位可调的三相正弦波,并具有数字显示频率、相位和电压的功能 要求:      (1)三相正弦波输出频率范围:10hz~100hz,相位差120°;      (2) ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved