5.1 视觉实验 LED流水灯
流水灯实验报告总结

流水灯实验报告总结一、实验目的本次流水灯实验的主要目的是通过实际操作,深入理解数字电路中时序逻辑电路的工作原理,掌握基本的硬件电路设计和编程方法,提高我们对电子电路的实践操作能力和问题解决能力。
二、实验原理流水灯是通过控制一系列发光二极管(LED)依次点亮和熄灭,从而产生一种流动的视觉效果。
其实现的核心原理是利用计数器和译码器来控制 LED 的亮灭状态。
在数字电路中,计数器可以对输入的时钟脉冲进行计数,从而产生不同的计数值。
译码器则将计数器输出的计数值转换为对应的控制信号,使得相应的 LED 点亮或熄灭。
例如,使用常见的 74LS161 四位二进制同步计数器和 74LS138 三线八线译码器,可以构建一个简单的八路流水灯电路。
计数器在时钟脉冲的驱动下不断计数,译码器根据计数器的输出值依次选通不同的输出端口,从而实现 LED 的顺序点亮。
三、实验设备及材料1、数字电路实验箱2、 74LS161 计数器芯片3、 74LS138 译码器芯片4、发光二极管(LED)若干5、电阻、电容等基本电子元件6、杜邦线若干7、数字万用表8、示波器四、实验步骤(一)电路设计1、根据实验原理,在实验箱上规划好芯片的布局和连线方式。
2、使用杜邦线将计数器、译码器和 LED 等元件按照设计好的电路连接起来。
3、注意连接的正确性,避免短路和断路现象。
(二)硬件搭建1、仔细对照电路设计图,将芯片插入实验箱的相应插槽中。
2、确保芯片引脚与插槽接触良好,无松动现象。
(三)编程与调试1、使用数字电路实验箱提供的编程工具,对计数器和译码器进行编程设置。
2、例如,设置计数器的计数模式、初始值等参数。
3、打开电源,观察 LED 的亮灭情况。
4、如果流水灯效果不符合预期,使用数字万用表和示波器等工具检测电路中的信号和电压,排查故障。
五、实验中遇到的问题及解决方法(一)LED 不亮1、问题描述:接通电源后,所有 LED 均不亮。
2、排查过程:首先检查电源是否正常,然后使用万用表测量芯片引脚的电压,发现计数器芯片没有正常工作。
单片机C51的LED流水灯实验报告

实验3.1.2 数字量输出输出扩展——LED流水灯一、实验目的1、掌握单片机外设扩展的方法2、使用单片机和8255实现LED流水灯的控制。
二、实验内容使用汇编语言编程,功能为:通过KK1脉冲实现LED灯工作方式即时控制,完成LED 开关控制显示和LED左循环、右循环、间隔闪烁功能。
三、实验环境PC机一台,Proteus仿真软件(或TD-PIT实验系统)一套四、实验硬件电路图说明:U2为单片机SST89E554RC,U1为8255A,通过8255A的PB输出使LED工作,BUTTON 为脉冲开关。
五、程序流程图六、实验程序清单ORG 0000HAJMP 0100HORG 0100HMAIN:MOV TMOD,#60H MOV TH1,#0FFHMOV TL1,#0FFHMOV DPTR,#7300HMOV A,#80HMOVX @DPTR,ASETB TR1MOV DPTR,#7100HLEFT:MOV R0,#8MOV A,#01HAG1:MOVX @DPTR,ACALL DELAYRLC ADJNZ R0,AG1JBC TF1,RIGHTAJMP LEFTRIGHT:MOV R0,#8MOV A,#80HAG2: MOVX @DPTR,ACALL DELAYRRC ADJNZ R0,AG2JBC TF1,FLASHAJMP RIGHTFLASH:MOV R0,#8AG3: MOV A,#55HMOVX @DPTR,ACALL DELAYMOV A,#0AAHMOVX @DPTR,ACALL DELAYDJNZ R0,AG3JBC TF1,LEFTAJMP FLASHDELAY:MOV R1,#0FFHDEL0:MOV R2,#0FFHDEL: DJNZ R2,$DJNZ R1,DEL0RETEND七、实验步骤1、按实验电路图接线;2、编写实验程序,编译连接无误后进入调试状态(可用PROTEUS也可以用硬件调试);3、按动BUTTON(PROTEUS下)或KK1(实验箱),观察流水灯工作情况,验证程序功能。
流水灯的实验原理及步骤

流水灯的实验原理及步骤流水灯(也称为跑马灯)是一种由多个LED灯组成的电子显示器件,常常被用于电子实验、电子产品展示等场合中。
流水灯可以通过变化发光的方式来传递信息或者装饰环境,具有简单、实用、灵活的特点。
下面将详细介绍流水灯的实验原理及步骤。
实验原理:流水灯的实现原理是通过控制每个LED灯的点亮与熄灭来形成一种连续而有序的动画效果,使得LED灯看起来像是在“流水”一样运动。
一般来说,流水灯采用的是LED的时分多路复用技术,即通过定时器控制每个LED点亮和熄灭的时刻,使得它们按照一定的顺序依次发光。
实验步骤:1. 准备材料:LED灯(数量根据需要决定)、电阻(限流电阻,选择合适的阻值)、电路板、导线、面包板或焊接工具等。
2. 连接电路:根据所需的LED数量,设计电路图,按照图上的连线方式将LED 连接到电路板上,注意保持连线的正确性。
3. 添加电阻:根据LED的工作电压和电流需求,计算每个LED对应的限流电阻的阻值,将电阻依次与LED进行串联连接。
4. 供电测试:将电路板连接到电源上,确认电源电压是否符合LED的工作电压要求。
注意检查整个电路的连线是否正确,电阻是否接在了正确位置。
5. 编写程序:使用单片机或其他控制芯片来控制LED的点亮和熄灭。
根据所采用的开发平台和编程语言,编写相应的代码,控制每个LED的状态和时间间隔。
6. 调试程序:将编写好的程序下载到控制芯片中,并连接到电路板上。
通过电脑或其他输入设备控制程序运行,观察LED的点亮和熄灭效果。
根据需要调整程序中每个LED的点亮时间和顺序,使得LED灯看起来像是在流水一样运动。
7. 完善电路:根据实际需求,可以设计并添加其他功能模块,如按键控制、调节亮度等。
总结:流水灯实验是一种常见的电子实验,通过控制LED灯的点亮和熄灭来形成一种连续的流动效果。
实验的原理是利用LED的时分多路复用技术和控制芯片的编程来实现。
实验步骤包括准备材料、连接电路、添加限流电阻、供电测试、编写程序、调试程序和完善电路等。
流水灯实验报告

流水灯实验报告实验目的,通过搭建流水灯电路,了解流水灯的工作原理,并掌握基本的电路连接方法和元器件的使用。
实验仪器与设备,LED灯、电阻、导线、面包板、电源等。
实验原理,流水灯是一种常见的LED灯效应,通过控制LED灯的亮灭顺序,形成灯光流动的效果。
在电路连接方面,我们需要使用电阻来限制LED灯的电流,以保护LED灯不受损坏。
实验步骤:1. 将LED灯和电阻连接到面包板上,按照电路图连接好各个元器件。
2. 将面包板连接到电源上,注意接线的正确性和稳定性。
3. 打开电源,观察LED灯的亮灭顺序,确认流水灯效果是否正常。
实验结果与分析:经过实验,我们成功搭建了流水灯电路,并且观察到LED灯按照一定的顺序亮灭,形成了流水灯的效果。
这说明电路连接正确,元器件工作正常。
在实验过程中,我们发现电阻的作用是非常重要的,它可以限制LED灯的电流,防止LED灯受损。
同时,电源的稳定性也对流水灯的效果有着重要的影响,稳定的电源可以保证LED灯的正常工作。
实验总结:通过本次实验,我们对流水灯的工作原理有了更深入的了解,也掌握了搭建流水灯电路的基本方法。
在今后的学习和实践中,我们可以运用这些知识,进行更多有趣的电路搭建和实验。
实验中还需要注意安全问题,避免短路和触电等意外情况的发生。
在实验过程中,要严格按照操作规程进行,确保实验的顺利进行。
最后,希望通过这次实验,大家能够对电路连接和LED灯效应有更深入的理解,为今后的学习和科研打下坚实的基础。
结语,本次实验结束,谢谢大家的参与和配合,希望大家能够从中收获知识,不断提高自己的实验能力和动手能力。
流水灯实验原理

流水灯实验原理
流水灯实验是一种常见的电子原型实验,其原理是利用计时器和移位寄存器来控制一组LED灯的亮灭状态,实现灯光顺序
循环变化的效果。
在流水灯实验中,LED灯的亮灭状态是由移位寄存器控制的。
移位寄存器是一个存储二进制数据的器件,它具有将数据从一个位置移动到另一个位置的功能。
通过这种移位操作,可以实现LED灯的顺序变化。
将多个LED灯连接到移位寄存器的输出引脚上,然后将计时
器的时钟信号连接到移位寄存器的时钟输入引脚上。
计时器的时钟信号用于触发移位寄存器的移位操作。
当计时器的时钟信号输入时,移位寄存器会将存储在其中的数据向移位方向移动一位。
移动之后,每个LED灯的状态就发
生了变化,从而实现了灯光顺序的循环变化。
为了控制LED灯的亮灭状态,可以使用二进制计数器作为移
位寄存器的输入。
二进制计数器的输出可以连接到LED灯的
输入引脚上,根据计数器的计数值决定LED灯的亮灭状态。
通过调节计时器的时钟频率和移位寄存器的移位方式,可以实现不同的流水灯效果。
例如,可以设置较快的时钟频率和循环移位的方式,使LED灯的亮灭状态快速顺序变化;或者设置
较慢的时钟频率和单向移位的方式,使LED灯的亮灭状态缓
慢顺序变化。
通过流水灯实验,可以更好地理解计时器、移位寄存器和LED灯的工作原理,同时也能够培养学生的实验操作能力和创新思维。
实验二 LED流水灯的设计

实验二 LED流水灯的设计
实验二 LED 流水灯的设计
一、实验目的:
1、掌握C51语言编程基础;
2、掌握C51程序循环结构及循环语句的使用;能够在Keil软件中查看变量,掌握程序调试的基本方法;
3、学会单片机控制LED显示器的电路设计及控制方法;
4、并一步学习单片机仿真软件KELI和proteus软件的使用。
二、实验任务:
设计流水灯,8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,共阳极。
编写程序来控制发光二极管由上至下的反复循环流水点亮,每次点亮一个发光二极管。
三、实验准备:
复习软件的使用方法。
① 使用元件:AT89C51:单片机② RES:电阻
③ LED-red:红色发光二极管④ CAP、CAP-ELEC:电容、电解电容⑤ CRYSTAL:晶振 6. button:开关
参考电路:自己也可以设计。
参考仿程序代码1:
参考程序代码2:
四、操作步骤:
① 利用Proteus 软件在计算机上进行硬件的设计,并保存扩展名为:dsn ② 利用Keil c51软件在计算机上进行软件的设计;步骤如下
? 新建一个工程项目文件。
? 新建一个源文件,扩展名为.ASM。
? 把新建一个源文件添加到工程项目中。
? 编译项目并生成可编程PROM的以.HEX为扩展名的文件。
③ 在计算机上进行Proteus和Keil c51的联合调试,把目标程序烧写到单片机里面去。
五、思考:
如果要求制作由上至下再由下至上反复循环点亮显示的流水灯,应该如何修改程序?
感谢您的阅读,祝您生活愉快。
LED流水灯
程序 :
标号 1 2 3 语句 Dim a as Byte A=&B00000001 Do
4 5 6 7 8
P1=A
Rotate A,Left,1 Waitms 100
Loop End
注意:标号是为了标记语句顺序,在编程时不必出现在程序中
实验步骤: 1、建立项目文件夹:在电脑的D盘中建 立“d:\班级\姓名\流水灯”的文件夹。 2、编写程序:启动BASCOM-8051软件, 新建一个名为“lsd”的项目文件,在程序 编辑窗口中输入上面的程序。并保存在 自己的文件夹中。 3、程序编译。 4、程序仿真。 5、程序ISP下载。 6、观察实验结果。
Байду номын сангаас
实验任务: 使P1口的八个LED发光二极管依次点亮、熄 灭,形成流水状。
实例1 LED流水灯
原理和电路图:
算法过程:
如何让DI至D8的LED发光二极管形成流水状呢?脑子 里先想一想流水灯的情景,再细分一下整个过程的具 体步骤。 先让最上面的一个LED点亮,等待一小段时间后熄灭, 再让第二个LED点亮,等待一小段时间后熄灭,如此 类推,当最下面的LED熄灭后,再点亮最上面的第一 个LED,形成循环。
实例1 LED流水灯
练习: 1、修改程序向右流水。 2、你能设计一个网线连接测试器(俗称 能手)吗
实例1 LED流水灯
实例1 LED流水灯
实验目的: 使学生掌握LED发光二极管的单向导电 原理和使用方法。 使学生掌握利用单片机的I/O口控制LED 发光二极管的原理和使用方法。 使学生初步掌握BASCOM-8051语言的使 用。 初步培养学生利用单片机技术解决生活 中的实际问题的能力。
流水灯实验原理
流水灯实验原理流水灯是一种常见的电子电路实验项目,通过这个实验可以让学生初步了解电子元件的连接和工作原理。
在实验中,我们会使用几个LED灯和一些电阻,通过不同的连接方式和信号输入,让LED灯呈现出流水般的效果。
下面我们将详细介绍流水灯实验的原理和操作步骤。
首先,我们需要准备一些材料和元件,包括LED灯、电阻、导线、面包板和电源。
LED灯是实验中的光源,电阻用于限制电流,导线用于连接各个元件,面包板用于搭建电路,电源则提供电能。
在选择LED灯和电阻时,需要根据实际情况计算电流和电压,以确保电路正常工作。
接下来,我们将LED灯和电阻连接在面包板上,根据实验要求进行合理的布局和连接。
一般来说,LED灯的长腿是正极,短腿是负极,而电阻没有正负之分。
我们需要根据电路图和实验要求,将它们正确地连接在一起。
在连接过程中,要注意导线的长度和连接方式,以避免出现短路或其他问题。
当电路连接完成后,我们需要接入电源,并根据实验要求输入信号。
在流水灯实验中,我们通常会使用计时器或者微控制器来产生信号,以控制LED灯的亮灭顺序。
通过调整信号的频率和占空比,我们可以让LED灯呈现出不同的流水效果,如单向流水、双向流水等。
在实验过程中,我们还需要注意一些问题,比如电路的稳定性、元件的工作温度和电源的安全性。
特别是在接入电源时,要确保电压和电流在安全范围内,以避免损坏元件或者造成安全事故。
此外,LED灯在工作时会产生一定的热量,需要注意散热和保护。
总的来说,流水灯实验是一种简单而有趣的电子电路实验项目,通过这个实验可以让学生初步了解电子元件的连接和工作原理。
在实验过程中,我们需要合理选择和连接元件,控制信号输入,同时注意电路的稳定性和安全性。
希望通过这个实验,学生们能够对电子电路有更深入的理解,为以后的学习和研究打下良好的基础。
LED流水灯显示实验,单片机实验报告(2页)
LED流水灯显示实验,单片机实验报告(2页)第第PAGE 1 页LED流水灯显示实验,单片机实验报告D LED 流水灯显示实验单片机实验报告一.实验目的1.熟悉单片机I/O 口的功能。
2.熟悉延时子程序的编写和使用。
3.初步熟悉单片机软硬件设计方法。
二.实验仪器计算机、Keil 编程环境、普中下载软件、单片机开发实验仪。
三.实验原理与内容P0 口做输出口,引脚接一只发光二极管,编写程序,使该发光二极管循环亮灭。
1. LED 流水灯显示2. 开幕和闭幕显示四. 实验线路及原理五. 注意事项1.安装实验仪时,先接通讯串口线,再开电源开关。
2.实验过程中,在进行接插线操作时,必须先关闭电源。
六六. 实验步骤1、主机连线说明:JP10 单片机0 P0 口(8 8 位)J12 74HC245( 数码管段选) ) 2. 短路块J21 P10VccJ21 七. 实验步骤1.打开Keil 编程软件编写程序,并进行汇编产生HEX 文件。
(1)流程图:(2)汇编程序ORG 0000H ; 初始地址0000H LJMP MAIN ; 跳转MAIN 主程序ORG 0100H ; 主程序MAIN 从从0100H 开始存放MAIN :MOV P0,#55H; 赋值P0 口0101 0101B CALL DELAY ; 调用延时子程序,延时MOV P0,#0AAH ; 赋值给P0 口1010 1010B CALL DELAY ; 调用延时子程序,延时SJMP main ; 跳转main 主程序DELAY: MOV R6,#200 ; 延时子程序,R6=200 dey2: MOV R7,#0 ;R7=0 DEY1: NOP ; 空指令DJNZ R7,DEY1;R7≠0 跳转DEY1 DJNZ R6,DEY2;R6≠0 跳转DEY2 RET ; 返回主程序END ; 结束点击普中下载软件,检查设置是否正确。
2.运行程序看结果。
反复修改和下载。
51单片机项目教程项目 4 流水灯实验
4.3 项目实施
4.3.1 流水灯开发实战环节
注意:J1接上才能开始做流水灯模块实验
图4- 6流水灯实物结果
实现延时通常有两种方法:一种是硬件延时,要用到定时器 /计数器,这种方法可以 提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用 循环体进行。
2、编写精确的延时函数 1)使用定时器/计数器实现精确延时
2)软件延时与时间计算
在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延 时。下面介绍几种软件延时的方法。 2.1 短暂延时 2.2 在C51中嵌套汇编程序段实现延时 2.3 使用示波器确定延时时间 2.4 使用反汇编工具计算延时时间
(216-初值)×振荡周期×12
例如:若晶振频率为12MHz,则最长的定时时间为(2160)×(1/12)×12us=65.536ms
4.2 技术准备
3. 方式2 THx作为常数缓冲器,当TLx计数溢出时,在置“1”溢出标志TFx 的同时,还自动的将THx中的初值送至TLx,使TLx从初值开始重新计 数。 其定时时间为:
例如:机器时钟频率为12MHZ,机器周期为1μs 时,
若工作在模式0,则最大定时值为:213×1μs =8.192ms 若工作在模式1,则最大定时值为: 216×1μs =65.536ms (2)置定时/计数器初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;
(3)对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,计数器 即按规定的工作模式和初值进行计数或开始定时。
4.2 技术准备
4.2.7定时器编程步骤 MCS-51单片机的定时器/计数器是可编程的,具体步骤如下: (1)对TMOD赋值,以确定定时器的工作模式; 初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。 (模式0: M为213=8192 ,模式1: M为216=65536,模式2和3: M为28=256)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目
录
引
言 单个灯闪烁
LED流水灯 户外广告灯
引
言
小实验:
① 注视右图中心四个黑点15秒 —
30秒钟;
② 然后朝自己身边的墙壁看(白色的 墙或白色的背景)或者看此页面的
白色部分;
③ 看的同时快速眨几下眼睛,看看 您能看到什么?
视觉暂留现象
视觉暂留
物体在快速运动时,当人眼所看到的影象消失后,人眼仍能继续保持 其影象0.1~0.4秒左右的图象,这种现象被称为视觉暂留现象。
1 0
1 0 1 0
1 0
1 0
单个LED闪烁范例1——程序代码
编程思路1:对P1.0进行反复置1、清0操作,以实现引脚上的LED闪烁。 实验现象: LED不闪烁,不太亮又有点亮。 .AREA命令定义了一个 以句点开头的命
绝对定位段——HOME 令为汇编命令
.AREA HOME(ABS,助记符 CODE) 操作码与操作数 0000 0x0000 1101 0010 SETB P1.0 地址
0000 1001 DJNZ 1010 $ 1111 R7,
0000 1010 DJNZ 0000 Delay1 1000 R6, SJMP 0x0000 0000 1010 SJMP 0100 1111 Start
上升沿与下降沿
LED点亮的过程就是在I/O口上产生了高电平“1”,并持续延时 143ms;LED熄灭就是在I/O上产生了低电平“0”,并持续延时143ms。 如此周而复始,LED既闪烁。
尽管上面的练习很简单,但必须认真实践,搞清楚每一行代 码的来龙去脉。看懂了!仅仅代表你“暂时记住”了而已,但很
快就会忘记。当你将调试中出现的所有“问题(bug)”都找到时,
才会体会更深。无数成功者的经验表明:过程比结果更重要! “延时时间”的计算以及“上升沿与下降沿”是本节至关重 要的知识点。其次,必须学会查阅相关的资料,了解单片机I/O口 和非门集成电路驱动电流的大小,LED的导通电压与回路电流以 及限流电阻的计算。
.AREA .AREA .ORG .ORG Start: Start: Delay: SETB SETB HOME(ABS, CODE) HOME(ABS, CODE) 0x0000 0x0000 P1.0 P1.0 这两条程序实现的功能 ;复位向量,程序起始地址 等价于CPL P1.0 ;P1.0=1,点亮LED ;P1.0=1,点亮LED 两者的作用和功能一样,却 占用2个程序空间
SJMP
Start
CLR
MOV MOV Delay1: MOV
P1.0
R6, #0x0 R6, #0x0 R7, #0x0 R7, .
Delay:
DJNZ
MOV
R7, #0x0
;1个机器周期 ;2个机器周期
;返回Start,循环执行程序 ;2个机器周期
DJNZ DJNZ
SJMP DJNZ
R7, $ R6, Delay1
0.557ms对人眼 来说仍然太快 MOV Delay: DJNZ #0x0 R7, #0xFF R7, . ;1个机器周期 ;2个机器周期 (*)
编程技巧:给R7赋值0xFF并不是最大的延时参数,其最大延时参数 应该是0。对计算机而言,0减1的结果是0xFF,因此用0做延时参数可循环 256次,其延时时间为(1 +2 ×256) × 1.085µs = 556.605µs ≈ 0.557ms。
(R7-1)=0?
Y
MOV Delay: MOV DJNZ DJNZ
R6, #0x0 R7, #0x0 R7, . R6, Delay
;1个机器周期
;1个机器周期 N (R6-1)=0? ;2个机器周期 下一步:把延时 ;2个机器周期 Y 程序插入程序
单个LED闪烁范例2——程序代码
编程思路2:对P1.0进行置1、延时、清0、延时的反复操作,使LED闪烁。 实现现象: 人眼能观察到LED的闪烁现象。
;执行延时Delay实体代码 ;执行延时Delay实体代码
单个LED闪烁范例2——延时程序编写
所谓停顿,就是站在那里不动,但单片机并不会停滞不前,它会一直 以微秒级的速度狂奔。我们并不要求单片机停止运行,而仅仅是让P1.0口 的输出信号维持一段时间即可。
将立即数0xFF传送到R7中 这段程序共占用机器周期: 1 + 2 ×255 = 511
机器周期的频率为(11.0592 ÷12)MHz DJNZ R7, .
一个机器周期耗时为:12 ÷ 11.0592MHz = 1.085µs
511 ×1.085µ s
= 0.5545ms SDCC51不支持$,用句点来代替,否则编译错误
单个LED闪烁范例2——延时程序编写
所谓停顿,就是站在那里不动,但单片机并不会停滞不前,它会一直 解决方法:在程序的外面再套上一层延时循环,以增加时间长度。 以微秒级的速度狂奔。我们并不要求单片机停止运行,而仅仅是让P1.0口 的输出信号维持一段时间即可。
电影 户外动画广告
电视
目
录
引
言 单个灯闪烁
LED流水灯 户外广告灯
LED驱动电路工作原理
编程思路1:对P1.0进行反复置1、清0操作,以实现引脚上的LED闪烁。
74HC04非门 与单片机的P1口 相连
1 0
1 0 1 0
P1.0 = 1 P1.0 = 0 P1 = 0XFF 0X00
00 11
1 0 1 0 1 0 1 0 1 0 1 0 1 0
单个LED闪烁范例2——延时程序编写
解决方法:在程序的外面再套上一层延时循环,以增加时间长度。 进行简单估算: 它的延时时间为:
流程图:
对于闪烁现象的观察,143ms 是一个比较理想的参数
给R6赋初值0 如果第一级延时时间为0.557ms,则第2级最大延时是它的256倍,即: MOV R7, #0x0 ;1个机器周期 (1+(1+2×256+2)×256) ×1.085µs 0.557ms ×256 =142.592ms ≈ 143ms
注释 ;复位向量,程序起始地址 ;P1.0口置1,点亮LED
.org命令在HOME程序中进 SDCC51编译器仅支持0x0000 0000 0001 1001 0000 行绝对定位,定位复位向量 格式,不支持0000H。
0000 0010 1100 0010 Start: SETB P1.0 0000 0011 1001 0000 0000 0100CLR 1000 P1.0 0000
CLR
P1.0
;P1.0口清0,熄灭LED ;P1.0=1,点亮LED
SJMP 0x0000 ;P1.0=0,熄灭LED ;跳转到程序头,重复执行 ;返回Start重复执行
0000 0101SJMP 1010 1111 Start
“Start”为程序的标号。在二进制层面,标号的值就是存储器的地址,而标号又 机器语言 汇编语言 每一个汇编程序必须要有一个以HOME命名的段,否则编译时会出现警告。 是引用存储器的值的别名,因此在语言层面 标号的值就是程序的地址。
单个LED闪烁范例1——问题分析
编程思路1:对P1.0进行反复置1、清0操作,以实现引脚上的LED闪烁。 实验现象: LED不闪烁,不太亮又有点亮。 问题解决: 在置1/清0操作之后,增加零点几秒或几秒的延时。
计算机指令的执行速度非常快,其执行时间是微秒级的
人眼的反应时间:毫秒级
因此,如果要让人眼看到LED闪烁,我们必须将 LED点亮和熄灭的停顿时间扩大接近秒的级别
MOV Delay: DJNZ
R7, #0xFF R7, Delay .
No
;1个机器周期 ;2个机器周期 (*) (R7-1)=0?
标号
$表示指令自身的存储地址
R7初值0xFF,
Yes 单片机的时钟晶振为11.0592MHz DJNZ R7, $ 根据汇编语言编译规则约定的正确书写格式 它将循环255次 它的延时时间为:
Start R6, Delay
单个LED闪烁范例3——程序代码 单个LED闪烁范例2——程序代码
编程思路2:对P1.0进行置1、延时、清0、延时的反复操作,使LED闪烁。 编程思路3:程序优化,用CPL P1.0替代SETB P1.0和CLR P1.0。 实现现象: 人眼能观察到LED的闪烁现象。
上升沿:数字电平由0变为1 的那一瞬间,用“↑”表示
286ms
下降沿:数字电平由1变为0 的那一瞬间,用“↓”表示
143ms 用软件来产生“↑”上升沿的代码: CLR NOP SETB P1.0 P1.0
NOP:一条只有一个机 器周期的空操作指令
;产生“那一瞬间”的延时 ;瞬间延时时间
关键知识点
单个LED闪烁范例2——编程思路
编程思路2:对P1.0进行置1、延时、清0、延时的反复操作,使LED闪烁。
.AREA HOME(ABS, CODE) .ORG 0x0000 ;复位向量,程序起始地址
Start:
SETB CLR SJMP
P1.0 P1.0 Start
;P1.0=1,点亮LED ;P1.0=0,熄灭LED ;返回Start重复执行
Delay: =DJNZ R7, .143ms 143047ms ≈
第3级延时时间又是第2级延时的256倍,即:
;2个机器周期 (*)
给R7赋初值0
143ms × 256=36608ms ≈36.6s 如果延时还不够,可以再加第三级延时, 如果再给程序加上2级延时,则它的最大延时时间将超过3个星期。 这样就需要再增加一个工作寄存器。 N
目
录
引
言 单个灯闪烁
LED流水灯 户外广告灯
流水灯现象分析
人们时常看到户外动画广告,一会儿从左到右地显示,一会儿又从右到左地显