单片机试验二:闪烁的发光二极管

发布者:谁与争锋1最新更新时间:2016-09-30 来源: eefocus关键字:单片机试验  发光二极管 手机看文章 扫描二维码
随时随地手机看文章
一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了。怎样才能让灯不断地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10不断地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:

SETB P1.0

CLR P1.0

……

这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETB P10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完CLR P10后,不会再去执行SETB P10指令,所以以后再也没有机会让灭了。

  为了解决这两个问题,我们可以做如下设想,第一,在执行完SETB P10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就可以分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,不断地在原地兜圈,我们称之为"循环",这样就可以完成任务了。

以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):

;主程序:

LOOP: SETB P1.0     ;(1)

    LCALL DELAY   ;(2)

    CLR P1.0     ;(3)

    LCALL DELAY   ;(4)

    AJMP LOOP    ;(5)

;以下子程序

DELAY: MOV R7,#250  ;(6)

D1: MOV R6,#250    ;(7)

D2: DJNZ R6,D2    ;(8)

  DJNZ R7,D1     ;(9)

  RET         ;(10)

  END         ;(11)

按上面的设想分析一下前面的五条指令。

  第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。第二和第四条实现的原理稍后谈,先看第五条,LJMP是一条指令,意思是转移,往什么地方转移呢?后面跟的是LOOP,看一下,什么地方还有LOOP,对了,在第一条指令的前面有一个LOOP,所以很直观地,我们可以认识到,它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号,它的用途就是给这一行起一个名字,便于使用。是否一定要给它起名叫LOOP呢?当然不是,起什么名字,完全由编程序的人决定,可以称它为A,X等等,当然,这时,第五条指令LJMP后面的名字也得跟着改了。

  第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是LCALL,这条指令称为调用子程序指令,看一下指令后面跟的是什么,DELAY,找一下DELAY,在第六条指令的前面,显然,这也是一个标号。这条指令的作用是这样的:当执行LCALL指令时,程序就转到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令,则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中,可以看到确实有RET指令。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:RET,执行该条指令后,程序将回来执行第三条指令,即将P10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在不断地亮、灭了。

  在标号DELAY标志的这一行到RET这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。 程序的最后一行是END,这不是一条指令,它只是告诉我们程序到此结束,它被称为"伪指令"。

单片机内部结构分析:
  为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号, 就从R1开始,R1被称之为工作寄存器。什么是工作寄存器呢?让我们从现实生活中来找找答案。如果出一道数学题:123+567,让你回答结果是多少,你会马上答出是690,再看下面一道题:123+567+562,要让你要上回答,就不这么容易了吧?我们会怎样做呢?如果有张纸,就容易了,我们先算出123+567=690,把690写在纸上,然后再算690+562得到结果是1552。这其中1552是我们想要的结果,而690并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出690,并记下来,这其实是一个中间结果,计算机中做运算和这个类似,为了要得到最终结果,往往要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的ROM中可以吗?显然不行,因为计算机要将结果写进去,而ROM是不可以写的,所以在单片机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写),它可以将数据写进去。

  特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区。

以下是它的a51文件:我们把它的名字叫作sy2.asm

LOOP: SETB P1.0
LCALL DELAY
CLR P1.0
LCALL DELAY
AJMP LOOP
DELAY: MOV R7,#250
D1:MOV R6,#250
D2:DJNZ R6,D2
DJNZ R7,D1
RET
END
以下是我们用编译器编译过的HEX文件, 它就可以烧写啦。

:10000000D29012000CC29012000C01007FFA7EFA0E
:05001000DEFEDFFA2214
:00000001F

关键字:单片机试验  发光二极管 引用地址:单片机试验二:闪烁的发光二极管

上一篇:单片机试验三:跑马灯试验
下一篇:单片机试验一:点亮一个发光二极管

推荐阅读最新更新时间:2024-03-16 15:13

发光二极管的正负极如何判断?
用万用表R×1K挡,红、黑两表笔交替接自闪发光二极管的两根引线,当发现其中一次测量,表针先向右摆动一定距离,然后表针在此位置上开始轻微抖动(振荡),摆动幅度在一小格左右。这种现象说明自闪发光二极管内部的集成电路在万用表内部1.5V电池电压的作用下开始振荡,输出的脉冲电流使指针产生抖动,只是因为电压太低还不能使发光二极管发光。但此现象说明万用表红、黑表笔的接法是正确的,即万用表黑表笔接的是自闪发光二极管的正极。 注意:在判断自闪发光二极管正、负极时,千万不要像测普通二极管那样,认为电阻小的那次测量,黑表笔接的是二极管正极。 发光二极管的正负极呢?其实也很简单,发光二极管,长脚为正,短脚为负。如果脚一样长,发光二极管
[测试测量]
<font color='red'>发光二极管</font>的正负极如何判断?
51单片机串口通信试验汇编程序
(今天是硬生生的把它给抠出来了):PC 通过串口助手向单片机系统传递命令和数据:以A5开始,以5A结束;中间是数据,长度不一,要求把数据部分用led灯显示出来;并且要求循环显示; //This is my x_Ed program code //we use it as the pc communicated with the mcu //At the same time,we want to see the result by LCD; STFLAG BIT 00H //收到起始码标志,1为收到起始码 EDFLAG BIT 01H //到结束码标志,1为收到结束码 TMFLAG BIT 02H //定时时间到标志
[单片机]
C51单片机小程序(一)
好久没碰单片机了,有些生疏了。到现在还依稀记得自己独自坐在电脑屏幕前自学单片机,硬生生的去看了单片机的基础,现在想想还是挺有趣的。附上当初一点初学的单片机小程序,请大家多多指教! 用P1口作为输出口,接8位用作逻辑电平显示的发光二极管。设计程序使发光二极管间隔300ms先奇数亮再偶数亮,循环3次;一个发光二极管亮上下循环3次;两个分别从两边向中间流动3次;再从中间向两边流动3次;8个全部闪烁3次;关闭全部发光二极管,停止。 综合实验程序: #库定义 #include reg52.h #include intrins.h sbit led=P1^0; #位定义 int i,j,k,num,e,p,m;
[单片机]
利用单片机串行口扩展16个发光二极管
题目:利用单片机串行口扩展16个发光二极管,要求画出电路图并编写程序,使16个发光二极管按照不同的顺序发光(发光的时间间隔为1s)。 答案: MOV SCON,#00H CLR P1.1 MOV R7,#16 MOV A,#10000000B LOOP: MOV SBUF,A JNB TI,$ ACALL DELAY1S RA A DJNZ R7,LOOP RET 图片1
[单片机]
利用<font color='red'>单片机</font>串行口扩展16个<font color='red'>发光二极管</font>
单片机小白学习之路(五)---编一个流水灯
目标:编一个流水灯 先贴上代码: 这里有一个c语言的小技巧:程序不执行#if0至#endif之间的程序,相当于注释掉了,执行#if1至#endif之间的。 上图有两种方法来弄出流水灯。 第一种是#if0里面的: 0xfe是十六进制数,变成二进制是1111 1110. ~0xfe是取反的意思,二进制是0000 0001. ~0xfe 1 是左移一位的意思,二进制是0000 0010 然后~0xfe再次取反 ,二进制是1111 1101 第二种是#if1里面的: -crol- 是 intrins.h 里面包含的函数,意思是左移n位,-crol-(0xfe,n) -cror-是 intrins.h 里面包含的函数,意思是右移
[单片机]
<font color='red'>单片机</font>小白学习之路(五)---编一个流水灯
科学家制备出新型量子点发光二极管
日前,郑州大学副教授史志锋等在新型钙钛矿发光二极管(LED)方面取得进展,在国际上首次用全溶液法制备钙钛矿发光二极管,相关成果在《美国化学会—纳米》上发表。 近年来,新兴的金属卤化物钙钛矿材料在发光器件方面的应用引起人们的广泛关注,但该型器件较差的工作稳定性却成为其走向应用的瓶颈。 研究人员基于低成本、有潜力应用于大规模生产的全溶液工艺,成功制备出高效稳定的钙钛矿量子点LED。该器件表现出高亮度的绿光发射,外量子效率达到3.79%,最大亮度为每平方米6093.2坎德拉,其综合性能与常用真空沉积法制备的钙钛矿LED相当,同时保持了溶液法的独特优势。 更重要的是,该器件展现出优良的湿度、温度稳定性。在相对湿度达75%的高湿
[电源管理]
基于LinkSwitch-PL的LED典型可控硅调光设计案例
LinkSwitch-PL系列高集成度单片离线式开关IC适合LED照明应用,可设计出单级隔离(或非隔离)、带功率因数校正的恒流输出驱动器。非隔离设计与低成本的可控硅调光器兼容,可提供》300:1的调光范围。低元件数可轻松满足LED替换灯设计的空间受限要求(例如,A19和蜡烛灯的尺寸),同时》0.9的PF、低THD值和谐波输入电流可使单个驱动器设计适用于全球范围。   范围   本应用指南旨在帮助工程师设计为LED负载提供恒流驱动的隔离或非隔离的AC-DC电源。本应用指南提供详细指导,介绍如何使用PI   Expert™软件的组件PIXls设计表格、如何选择关键元件以及如何优化设计(特别是针对可控硅调光器的设计)。LinkSwitc
[电源管理]
如何用电池判断发光二极管质量
如何用电池判断发光二极管质量 用电池判断发光的电路如图1-29所示。 图1-29中,G为2节1.5V干电池,S为电源开关,RP为电位器,PA为毫安表,LED为发光二极管。PA可用指针式万用表的50mA档。 考虑到常见发光二极管的正向压降不超过2.3V,采用了两届电池串联构成3V的电源。由固定电阻R和电位器RP串联限流电阻,总阻值可在50V~300Ω内调节,其中R的作用是在RP调到零时起保护作用。发光二极管的工作电流1F由万用表独处。操作十分简单:和尚开关S,LED应立即点燃发亮,如感到亮度不够,可调节RP,至PA显示到LED的工作电流为止。如发光二极管不亮,应检查LED是否插反,电路是否虚焊,RP是否接触不良。如都不是,则是L
[模拟电子]
如何用电池判断<font color='red'>发光二极管</font>质量
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved