历史上的今天
返回首页

历史上的今天

今天是:2025年08月16日(星期六)

正在发生

2021年08月16日 | 51单片机-闪烁的LED

2021-08-16 来源:eefocus

延时是单片机入门必学的应用!


1.序


上一讲我们已经实现点亮一盏灯,但是很多时候程序的执行都是要死循环的,不能让程序像是停在那里不执行了。所以这一讲在前面的原理图基础上实现让LED2从点亮一段时间到熄灭一段时间再点亮一段时间如此循环下去,实现闪烁LED2的功能。


2.代码普及


我们知道CPU执行一条语句是很快的,如果我们这样写程序来实现灯的闪烁:


#include  

sbit LED2  = P0^0;

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

    

void main()

{  

    ADDR3 = 1;//使能三八译码器

    ENLED = 0;// 

 

    ADDR2 = 1;//**************************

    ADDR1 = 1;//让三八译码器的IO6输出低电平

    ADDR0 = 0;//**************************

 

    while (1)

    {

        LED2=0;//点亮最右端的灯

        LED2=1;//熄灭最右端的灯

    }

}


那我们看到的现象就是灯一直亮着,不会闪烁。原因就是执行“LED2=0;”把灯点亮之后执行“LED2=1;”去熄灭,但是这个熄灭语句只持续一瞬间就循环又开始执行“LED2=0;”了,熄灭状态的持续时间太短我们人眼也就观察不到闪烁的现象。


3.延时语句


要想实现LED2闪烁,必须让LED2被点亮持续一段时间,被熄灭持续一段时间,也就是IO端口保持低电平一段时间,接着跳变保持高电平一段时间,此时我们需要用上延时。


#include  

sbit LED2  = P0^0;

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

   

void main()

{  

    unsigned int i;//定义一个16位无符号整形变量  

    ADDR3 = 1;//使能三八译码器

    ENLED = 0;// 

    

    ADDR2 = 1;//**************************

    ADDR1 = 1;//让三八译码器的IO6输出低电平

    ADDR0 = 0;//**************************

    

    while (1)

    {

        LED2=0;//点亮最右端的灯

        for(i=0;i<30000;i++);//延时一段时间

        LED2=1;//熄灭最右端的灯

        for(i=0;i<30000;i++);//延时一段时间

    }

}


“for(i=0;i<30000;i++);”其实就是CPU空运行让i不断相加到30000之后不满足“i<30000”的判断条件就结束这条运行代码,接着去执行下一条语句了,通过占用CPU的执行时间来达到短暂的电平保持状态,也就能让LED2亮一小段时间,接着又灭一小段时间,这样LED2在while(1)的死循环下就实现不停循环的亮灭闪烁了。


4.补充


对刚入门单片机编程的初学者来说,以前我们C语言基础上机操作的时候都是只见过别人int,char的去定义变量,而在单片机入门编程中看到的都是unsigned int,unsigned char这样定义,原因是单片机在入门的时候用的变量的取值都是0和正整数(正整数不包括0),所以才会用unsigned去定义无符号整形变量。

推荐阅读

史海拾趣

3D PLUS公司的发展小趣事

面对日新月异的电子行业,3D PLUS公司始终保持创新精神,不断推动3D技术的升级。公司研发团队成功研发出全方位彩色人体扫描仪,这一设备能够在极短的时间内实现360度人像扫描,且清晰度极高,为互联网人体应用提供了强有力的支持。此外,公司还不断在软件、算法等方面进行优化,提升3D技术的精度和效率,满足市场的不断需求。

Delphi Connection Systems公司的发展小趣事

随着全球对环保意识的不断提高,Delphi Connection Systems公司也积极响应环保号召,致力于研发和生产环保型连接器产品。公司采用环保材料和工艺,减少生产过程中的污染排放,同时推出可回收、可再利用的连接器产品。这一举措不仅符合了环保要求,也为客户提供了更加环保的解决方案。

Altmustech公司的发展小趣事

创新是Altmustech公司发展的核心动力。公司不断投入研发资金,引进优秀人才,推动技术创新和产品升级。从最初的半导体芯片到后来的智能设备、物联网解决方案,Altmustech始终站在技术前沿,引领行业发展趋势。这种持续的创新精神使得公司在激烈的市场竞争中始终保持领先地位。

Arcolectric公司的发展小趣事

Arcolectric深知合作伙伴的重要性,因此一直致力于与全球各地的优质企业建立紧密的合作关系。通过与这些合作伙伴的深入合作,Arcolectric不仅获得了更多的市场机会和资源支持,还不断吸收和借鉴先进的经验和技术,推动公司的持续发展和创新。

Bourns公司的发展小趣事

Bourns公司一直以来都注重技术研发与创新。不论是自行研发的产品,还是通过并购或特许所取得的技术,Bourns都持续投入于开发新产品。例如,Bourns推出的最新型旋转式电位器,具备绝缘塑料轴、高额定旋转周期以及宽泛的工作温度范围等特性,这些创新产品在市场上取得了良好的反响。

Enterpoint公司的发展小趣事

随着技术的不断发展,Enterpoint公司意识到,要想在竞争激烈的市场中保持领先地位,必须不断进行技术突破和产品升级。公司投入大量资源进行研发,成功开发出一系列具有高性能、低能耗特点的数据处理设备。这些产品的推出不仅提升了公司的市场竞争力,也为客户带来了更高效、更稳定的数据处理体验。

问答坊 | AI 解惑

紧急求教一个电路 很茫然

我只知道是三轴位置传感器接口电路 也不知道是不是 高手来讲解一下哈 谢谢…

查看全部问答>

2008 电子设计 A题 原创作品 基于ARM (省二等奖内附参赛论文)

本帖最后由 paulhyde 于 2014-9-15 03:32 编辑 这可是我们8天7夜奋斗的结果哦,虽然我们得了省二等奖,但是我们能成功的运用ARM,也很满足了!~!~ 下载不了的可以留下你们的邮箱!~!~! [ 本帖最后由 歹匕示申 于 2008-12-25 14:50 编辑 ] ...…

查看全部问答>

求助,使用VHDL编写的数字输入输出程序

我做课程设计其中写的一个模块的程序老出错,改了很多遍仍不能用。这个模块的功能就像是电话机号码输入,计算器的数字输入差不多。 程序要求: 用10个按键控制0-9数字输入。 每次按键输入,前一个数都向前进一位,例如:输入一个5,显示00000005 ...…

查看全部问答>

怎么样实现SQLCE数据库高速数据保存

最近忙一个项目,时间紧迫了,可目前遇到一个严重的问题,详情是这样:我用EVC.0编一个程序来把采集的数据保存在嵌入式设备的SQLCE数据库中,但弄来弄去发现保存速度跟不上,不知道各位大侠是否知道有什么方法能实现数据库的高速保存。感激不尽啊, ...…

查看全部问答>

触摸屏驱动采样请教

DdsiTouchPanelGetPoint(         TOUCH_PANEL_SAMPLE_FLAGS        *pTipStateFlags,         INT                      ...…

查看全部问答>

低手问一个问题

现在感觉学啥都没意思,所以打算学点充实点的东西 打算学嵌入式。但不知道从哪里开始。我没有硬件。也不知道是不是要用个什么模拟器 请问,应该怎么学呢 是不是要从单片机开始????…

查看全部问答>

MSP430F435学习板 超低价格出售 仅售100元

请登陆淘宝进行详细的细节查询 淘宝地址:      http://auction1.taobao.com/auction/0/item_detail-0db2-a975eaf6e989403d6987eeb2fde3c9d9.jhtml    欢迎购买. …

查看全部问答>

跪求 :用VB.Net 在Wince 平台下画一个点

小弟刚入道,就遇到棘手的问题,希望大家帮忙啊,谢谢! 问题如下 在Wince下 我在Form1中添加了一个PictureBox1,想在上面画个点,或者圆 结果发现连Paint()函数都没 ,郁闷;还有 CreatGraphic函数也没,该怎么办啊? 使用VB.net2005 谁能发个 ...…

查看全部问答>

实用型应急灯

    [ 本帖最后由 ddllxxrr 于 2010-8-24 10:49 编辑 ]…

查看全部问答>

wanghongyang我还惦记着那个3.5液晶

不知道准备的怎么样了?准备随时出手了:D…

查看全部问答>