《视觉实验:LED流水》PPT课件.ppt_第1页
《视觉实验:LED流水》PPT课件.ppt_第2页
《视觉实验:LED流水》PPT课件.ppt_第3页
《视觉实验:LED流水》PPT课件.ppt_第4页
《视觉实验:LED流水》PPT课件.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.1 视觉实验:LED流水灯,目 录,小实验: 注视右图中心四个黑点15秒 30秒钟; 然后朝自己身边的墙壁看(白色的墙或白色的背景)或者看此页面的白色部分; 看的同时快速眨几下眼睛,看看您能看到什么?,视觉暂留现象,视觉暂留,物体在快速运动时,当人眼所看到的影象消失后,人眼仍能继续保持其影象0.10.4秒左右的图象,这种现象被称为视觉暂留现象。,目 录,LED驱动电路工作原理,与单片机的P1口相连,74HC04非门,11111111,P1 = 0XFF,0 0 0 0 0 0 0 0,P1.0 = 1,1,0,P1 = 0X00,00000000,1 1 1 1 1 1 1 1,P1.0 = 0,0,1,编程思路1:对P1.0进行反复置1、清0操作,以实现引脚上的LED闪烁。,单个LED闪烁范例1程序代码,.AREA HOME(ABS, CODE) .ORG 0x0000 ;复位向量,程序起始地址 Start: SETB P1.0 ;P1.0=1,点亮LED CLR P1.0 ;P1.0=0,熄灭LED SJMP Start ;返回Start重复执行,编程思路1:对P1.0进行反复置1、清0操作,以实现引脚上的LED闪烁。 实验现象: LED不闪烁,不太亮又有点亮。,每一个汇编程序必须要有一个以HOME命名的段,否则编译时会出现警告。,“Start”为程序的标号。在二进制层面,标号的值就是存储器的地址,而标号又是引用存储器的值的别名,因此在语言层面 标号的值就是程序的地址。,地址 操作码与操作数 助记符 注释 0000 0000 1101 0010 SETB P1.0 ;P1.0口置1,点亮LED 0000 0001 1001 0000 0000 0010 1100 0010 CLR P1.0 ;P1.0口清0,熄灭LED 0000 0011 1001 0000 0000 0100 1000 0000 SJMP 0x0000 ;跳转到程序头,重复执行 0000 0101 1111 1010,机器语言,汇编语言,单个LED闪烁范例1问题分析,编程思路1:对P1.0进行反复置1、清0操作,以实现引脚上的LED闪烁。 实验现象: LED不闪烁,不太亮又有点亮。 问题解决: 在置1/清0操作之后,增加零点几秒或几秒的延时。,单个LED闪烁范例2编程思路,编程思路2:对P1.0进行置1、延时、清0、延时的反复操作,使LED闪烁。,.AREA HOME(ABS, CODE) .ORG 0x0000 ;复位向量,程序起始地址 Start: SETB P1.0 ;P1.0=1,点亮LED CLR P1.0 ;P1.0=0,熄灭LED SJMP Start ;返回Start重复执行,;执行延时Delay实体代码,;执行延时Delay实体代码,单个LED闪烁范例2延时程序编写,所谓停顿,就是站在那里不动,但单片机并不会停滞不前,它会一直以微秒级的速度狂奔。我们并不要求单片机停止运行,而仅仅是让P1.0口的输出信号维持一段时间即可。,MOV R7, #0xFF ;1个机器周期 Delay: DJNZ R7, Delay ;2个机器周期 (*),标号,根据汇编语言编译规则约定的正确书写格式,R7初值0xFF,它将循环255次,DJNZ R7, .,SDCC51不支持$,用句点来代替,否则编译错误,单个LED闪烁范例2延时程序编写,所谓停顿,就是站在那里不动,但单片机并不会停滞不前,它会一直以微秒级的速度狂奔。我们并不要求单片机停止运行,而仅仅是让P1.0口的输出信号维持一段时间即可。,MOV R7, #0xFF ;1个机器周期 Delay: DJNZ R7, . ;2个机器周期 (*),编程技巧:给R7赋值0xFF并不是最大的延时参数,其最大延时参数应该是0。对计算机而言,0减1的结果是0xFF,因此用0做延时参数可循环256次,其延时时间为(1 2 256) 1.085s 556.605s 0.557ms。,解决方法:在程序的外面再套上一层延时循环,以增加时间长度。,MOV R7, #0x0,单个LED闪烁范例2延时程序编写,MOV R6, #0x0 ;1个机器周期 Delay: MOV R7, #0x0 ;1个机器周期 DJNZ R7, . ;2个机器周期 DJNZ R6, Delay ;2个机器周期,解决方法:在程序的外面再套上一层延时循环,以增加时间长度。,MOV R7, #0x0 ;1个机器周期 Delay: DJNZ R7, . ;2个机器周期 (*),它的延时时间为: (1(122562)256) 1.085s 143047ms 143ms 如果延时还不够,可以再加第三级延时,这样就需要再增加一个工作寄存器。,单个LED闪烁范例2程序代码,MOV R6, #0x0 ;1个机器周期 Delay: MOV R7, #0x0 ;1个机器周期 DJNZ R7, $ ;2个机器周期 DJNZ R6, Delay ;2个机器周期,.AREA HOME(ABS, CODE) .ORG 0x0000 Start: SETB P1.0 ;P1.0=1,点亮LED MOV R6, #0x0 ;延时143ms Delay: MOV R7, #0x0 DJNZ R7, . DJNZ R6, Delay CLR P1.0 ;P1.0=0,熄灭LED MOV R6, #0x0 ;延时143ms Delay1: MOV R7, #0x0 DJNZ R7, . DJNZ R6, Delay1 SJMP Start ;返回Start,循环执行程序,编程思路2:对P1.0进行置1、延时、清0、延时的反复操作,使LED闪烁。 实现现象: 人眼能观察到LED的闪烁现象。,单个LED闪烁范例2程序代码,.AREA HOME(ABS, CODE) .ORG 0x0000 Start: SETB P1.0 ;P1.0=1,点亮LED MOV R6, #0x0 ;延时143ms Delay: MOV R7, #0x0 DJNZ R7, $ DJNZ R6, Delay CLR P1.0 ;P1.0=0,熄灭LED MOV R6, #0x0 ;延时143ms Delay1: MOV R7, #0x0 DJNZ R7, $ DJNZ R6, Delay1 SJMP Start ;返回Start,循环执行程序,编程思路2:对P1.0进行置1、延时、清0、延时的反复操作,使LED闪烁。 实现现象: 人眼能观察到LED的闪烁现象。,CPL P1.0 ;LED状态取反,单个LED闪烁范例3程序代码,编程思路3:程序优化,用CPL P1.0替代SETB P1.0和CLR P1.0。,地址 操作码与操作数 助记符 注释 0000 0000 1011 0010 CPL P1.0 ;LED状态取反 0000 0001 1001 0000 0000 0010 0111 1110 MOV R6, #0x0 ;延时143ms 0000 0011 0000 0000 0000 0100 0111 1111 MOV R7,#0x00 0000 0101 0000 0000 0000 0110 1101 1111 DJNZ R7, . ;R70,返回指令本身 0000 0111 1111 1110 0000 1000 1101 1110 DJNZ R6, 0x0004 ;R70,返回地址0x0004 0000 1001 1111 1010 0000 1010 1000 0000 SJMP 0x0000 ;程序跳转到0x0000,循环执行程序 0000 1010 1111 0100,上升沿与下降沿,LED点亮的过程就是在I/O口上产生了高电平“1”,并持续延时143ms;LED熄灭就是在I/O上产生了低电平“0”,并持续延时143ms。如此周而复始,LED既闪烁。,143ms,286ms,CLR P1.0 NOP ;瞬间延时时间 SETB P1.0,;产生“那一瞬间”的延时,用软件来产生“”上升沿的代码:, 关键知识点,尽管上面的练习很简单,但必须认真实践,搞清楚每一行代码的来龙去脉。看懂了!仅仅代表你“暂时记住”了而已,但很快就会忘记。当你将调试中出现的所有“问题(bug)”都找到时,才会体会更深。无数成功者的经验表明:过程比结果更重要! “延时时间”的计算以及“上升沿与下降沿”是本节至关重要的知识点。其次,必须学会查阅相关的资料,了解单片机I/O口和非门集成电路驱动电流的大小,LED的导通电压与回路电流以及限流电阻的计算。,目 录,流水灯现象分析,人们时常看到户外动画广告,一会儿从左到右地显示,一会儿又从右到左地显示,这就是流水灯效果,其特征是将想要显示的画面切割成N份,且每次只让其中的一个画面显示,让肉眼能够看得清楚。,一个简单的例子:,这个动画就是由右边四个图形每个图形显示0.2s,循环显示制作而成的。 如果在中间再多加几个中间显示的图形,并缩短每个图形的显示时间可以使动画更流畅。,LED流水灯范例1现象实现,编程思路1:将0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80依次送往单片机P1口,即将“MOV direct, #data”指令使用8次,并加上合适的延时时间 。,.AREA HOME(ABS, CODE) .ORG 0x0000 ;复位向量,程序起始地址 Start: MOV P1, #0x01 ;LED的显示状态: ;执行延时Delay实体代码 MOV P1, #0x02 ;LED的显示状态: ;执行延时Delay实体代码 MOV P1, #0x80 ;LED的显示状态: ;执行延时Delay实体代码 AJMP Start ;跳转到Start,循环执行程序,观察分析:LED从右向左移动的过程中,每次只点亮一个LED,即数据0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80中的“1”是一个不断地从右向左移动的过程。对照指令表发现,逻辑运算“RLC A”指令可以将保存在累加器A中的数据实现左移。,LED流水灯范例2程序优化,编程思路2: 先用“MOV A,#0x01”指令将数据0x01存放到累加器A中,然后再将A中的数据传递给P1口; 接着使用“RLC A”移位运算指令,将A的内容全部向左移动1位。,MOV A, #0x01 MOV P1, A,CY A LED显示,初始值: 0 0000 0001 ,第1次移位: 0 0000 0010 ,第2次移位: 0 0000 0100 ,第3次移位: 0 0000 1000 ,第4次移位: 0 0001 0000 ,第5次移位: 0 0010 0000 ,第6次移位: 0 0100 0000 ,第7次移位: 0 1000 0000 ,第8次移位: 1 0000 0000 ,第9次移位: 0 0000 0001,9种状态循环显示,既实现了“流水”灯现象,LED流水灯范例2程序代码,.AREA HOME(ABS, CODE) .ORG 0x0000 Start: MOV A, #0x01 ;操作数据取初值0x01,设定第一个LED亮 Loop: MOV P1, A ;初次上电时LED的显示状态: RLC A ;左移一次后LED的显示状态: MOV R6, #0x0 ;延时143ms Delay: MOV R7, #0x0 DJNZ R7, . DJNZ R6, Delay SJMP Loop,编程思路2:程序优化,使用“RLC A”指令来实现“流水”灯现象。,地址 操作码与操作数 助记符 注释 0000 0000 0111 0100 MOV A, #0x01 ;操作数据取初值0x01,第一个LED亮 0000 0001 0000 0001 0000 0010 1111 0101 MOV P1, A ;将A的内容送到P1口 0000 0011 1001 0000 0000 0100 0011 0011 RLC A ;A的内容左移一次 0000 0101 0111 1110 MOV R6, #0x0 ;R6取延时初值0,延时143ms 0000 0110 0000 0000 0000 0111 0111 1111 MOV R7, #0x0 ;R7取延时初值0 0000 1000 0000 0000 0000 1001 11011111 DJNZ R7, . ;R7自减循环 0000 1010 1111 1110 0000 1011 1101 1111 DJNZ R6, 0x0007 ;R6自减循环 0000 1100 1111 1010 0000 1101 1000 0000 SJMP 0x0002 ;返回0x0002,重复操作 0000 1110 1111 0011, 关键知识点,附录A中的最后一题就是作者2010年面向全国电类专业招聘开发工程师的考题,其实就是从上面这个例子改过来,但很多学生做不出来。而事实上尽管上面这个很简单,很多学生虽然看懂了,但由于没有结合作者介绍的设计思想动手实践,到头来放下书本也就全部忘记了。因此,看懂了不见得真正地掌握了。 如果 将程序清单中“RLC A”指令改为“RL A”,请仔细观察流水灯的效果有什么不同?另,如果要求让流水灯从右到左变化,如何编程?,目 录,查表法的提出,查表法思路分析,Table: .DB 0x81, 0x42, 0x24, 0x18, 0x24, 0x42, 0x81, 0x00 .DB 0x18, 0x24, 0x42, 0x81, 0x42, 0x24, 0x18, 0x00 .DB 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 .DB 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 .DB 0x00, 0xFF , 0x00, 0xFF .DB 0x55,列表: 将一组数据按一定规律集中书写在一起的方式。它的好处是可以将用户最关心的最关键数据罗列在一起,看起来极其方便。如:,查表指令: MOVC A, A+DPTR C:表示该操作在代码存储区(CODE) DPTR:80C51单片机唯一的16位数据寄存器,数据,根据A的值加上DPTR的值,使PC指向表内相应的地址取出所需要的数据。由此可见,要想改变显示的花样,那么只需修改显示数据区的列表就可以了。,户外广告灯程序范例,.AREA HOME(ABS, CODE) .

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论