任务引入
我们已经理解单片机控制LED灯的亮(灭),还有LED常亮,不停地有规律地闪烁。在一些高楼大厦、广告灯箱、智能设备的自检等中,常有若干个发光二极管像流水式地亮灭,来实现美妙的视觉效果。它们是如何控制的呢?我们在此共同实现吧!
任务目标
知识目标:1.理解流水灯控制工作原理及控制方法。
2.进一步熟悉掌握发光二极管工作原理和检测方法。
3.理解移位指令控制书写形式。
4.能独立编写单片机控制流水灯的流程图和程序。
技能目标:1.能使用相关仪表检测应用元器件的性能。
2.掌握各电器元件的焊接方法。
3.能编写单灯亮、灭的程序。
4.会调试单片机。
情感目标:1.在制作任务过程中养成严谨的工作态度。
2.在任务实施过程中加强沟通,团队合作。
任务描述
1.利用开发板,绘制流水灯控制流程图,设计流水灯控制程序。
2.对流水灯控制电路相关元器件进行检测和安装,并完成联机调试,如图2-10所示为流水灯显示过程。
图2-10 流水灯显示过程
图2-11 程序流程图
一、任务分析
要实现单片机控制8个LED的流水灯闪烁,实际控制过程是LED1灯亮→延时→LED2灯亮→延时→LED3灯亮→延时→LED4灯亮→延时→LED5灯亮→延时→LED6灯亮→延时→LED7灯亮→延时→LED8灯亮,周而复始的过程。此时需要单片机中P2口对外部输出控制。
二、画程序流程图
根据任务画出程序流程图,如图2-11所示。
三、编写程序
根据流程图和相关指令编写程序。
任务实施
四、硬件制作
1.器材准备
8个LED流水灯控制电路,所需硬件包含有:基本电路、限流电阻排、8个LED灯。
1)元器件表如表2-5所示。
表2-5 元器件表
2)流水灯电路实物图如图2-12所示。
2.工具准备
安装基本电路的焊接工具有:电烙铁、镊子、焊锡、松香等,如图1-58所示。
3.制作要求
(1)按元器件表清点所需安装元器件
(2)检测所有元器件的特性、好坏
(3)焊接要求
1)焊接元器件整体美观、分布均匀、焊接过程先焊接大件,再焊接小件。
2)焊接过程中严格按照电路施工,注重电源的正负极。
3)要求焊接的焊点光滑、饱满、无毛刺,导电性能良好。
4)焊接整体应居中部以底座分布,为以后的电路焊接调试预留布置地方。
图2-12 流水灯电路
4.电路安装
五、联机调试
1)将编写程序输入Keil中,进行程序检查,编译及下载。
2)将hex文件通过双龙下载器烧入单片机并调试。
知识链接
一、流水灯控制原理
以P2口为例,8个LED与单片机的连接如图2-13所示,要使D1灯亮,P2.0必然输出低电平信号及逻辑0信号,其余不亮的输出高电平信号及逻辑1信号。
图2-13 8个LED与单片机的连接图
根据流水灯显示要求,单片机P2口应输出的数据对应灯亮关系,如表2-6所示。
表2-6 单片机P2口输出数据对应灯亮关系
二、相关指令学习
1.累加器清零指令CLR A
指令功能:执行该指令后,对特殊寄存器A中的内容进行清除,相当于A的内容为00H。
2.累加器按位取反指令CPL A
指令功能:执行该指令后,对特殊寄存器A中的内容进行按位取反,其中某位是0,执行该指令后是1;相反是1,执行后为0。注意:按位取反是指的累加器以二进制方法进行。
3.移位指令
(1)循环左移指令RL
指令功能:执行该指令一次后,对累加器A中的内容进行按位依次左移一位,最高位移到最低位,最右边的第一位移到倒数第二位,依次移动。注意:按位移动是指的累加器以二进制方法进行,如图2-14所示。
图2-14 RL指令示意图
(2)循环右移指令RR(https://www.daowen.com)
指令功能:执行该指令一次后,对累加器A中的内容进行按位依次右移一位,最低位移到最高位,最左边的第一位移到左边第二位,依次移动,如图2-15所示。
图2-15 RR指令示意图
(3)循环左移指令RLC
指令功能:执行该指令一次后,对累加器A中的内容进行按位依次左移一位,最高位移到Cy,Cy内容移到最低位,最右边的第一位移到倒数第二位,依次移动。Cy是程序状态字PSW中的最高位,是进位标志位。在进行加减运算时,如果操作数结果使A中最高位D7有进位或借位时,则Cy=1;否则Cy=0,如图2-16所示。
图2-16 RLC指令示意图
(4)循环右移指令RRC
指令功能:执行该指令一次后,对累加器A中的内容进行按位依次右移一位,最低位移到Cy,Cy内容移到A最高位,左边的位依次向右移到一位,如图2-17所示。
图2-17 RRC指令示意图
注意:移位指令操作对象只能在累加器A中进行,不能在其他寄存器和地址中进行。
4.子程序调用和返回指令
MCS-51汇编语言程序在结构上有主程序和子程序之分,主程序是程序的主体,体现完整的工作流程,子程序完成某一具体和需要重复进行的工作(如延时程序、显示程序),主程序在执行时会多次重复调用子程序。子程序结构使程序的存储空间大大缩小,并为调试程序提供了方便。
子程序是一段完整的小程序,在主程序需要时被调用,子程序执行完后还应返回主程序继续执行。为了实现这一过程,必须有子程序调用指令和子程序返回指令。调用指令在主程序中使用,返回指令是子程序结束指令,在子程序中使用。由此可见,子程序调用指令和返回指令必须成对出现,缺一不可。
在一个程序中,往往子程序中还会调用子程序,这称为程序嵌套。程序嵌套中为保证正确调用和返回,必须有几个调用指令,就应有几个返回指令与之对应,如图2-18所示。
图2-18 子程序调用示意图
(1)长调用指令LCALL
指令功能:执行该指令后,无条件转移LCALL调用指令后跟的地址去执行子程序,这里相当于LJMP功能,但不完全相同。转移的地址范围64KB任意地方,也就是子程序可放在64KB任意地方,主程序都可以调得到。
指令格式:LCALL addr16; PC←addr16
注意:LJMP无条件转移指令与LCALL长调用指令有区别。LJMP指令是从程序一处跳过某些程序执行另一处程序,可以向前或向后转移,不需要返回。LCALL指令从主程序某一处到另一处子程序,转移前利用专门寄存器记住当前地址,便于程序返回,在执行子程序后返回当前转移的主程序的指令下一条继续执行。
(2)短调用指令ACALL
指令功能:执行该指令后,无条件转移ACALL调用指令后跟的地址去执行子程序,执行意义与长调用相似。但只可调用2KB范围内的子程序。
(3)返回指令RET指令功能:调用指令与返回指令是成对出现的,在主程序需要调用子程序时执行
LCALL指令,进入子程序后并执行完子程序,应使程序返回主程序继续执行下面程序,必
须在子程序后放置一条返回指令RET。
任务拓展
根据所学内容完成调试花样灯显示循环:
1)D1D2亮→D3D4亮→D5D6亮→D7D8亮→D1D2亮→……
2)D1D2D3D4亮→D5D6D7D8亮→D1D2D3D4亮→……
3)D1D3D5D7亮→D2D4D6D8亮→D1D3D5D7亮→……
评一评
项目2 《流水灯安装及调试》评价表
(续)
思考与练习
一、选择题
1.二进制数110010010对应的十六进制数为( )。
A.192H B.C90H C.1A2H D.CA0H
2.二进制数110110110对应的十六进制数为( )。
A.1D3H B.1B6H C.DB0H D.666H
3.LJMP跳转空间最大可达到( )。
A.2KBB.265BC.128BD.64KB
4.AT8952单片机中,唯一一个用户不能直接使用的寄存器是( )。
A.PSWB.DPTRC.PCD.B
5.执行如下三条指令后,30H单元的内容是( )。
MOV R1,30H
MOV 40H,OEH
MOV @R1,40H
A.40HB.30HC.00HD.70H
二、填空题
1.以助记符形式表示的单片机指令就是它的 语言。
2.十进制数21转换成二进制数 ,转换成十六进制数 。
3.十六进制数36H转化成二进制数 ,转换成十进制数 。
4.SET指令为置 指令,CLR指令为置 指令。
5.LJMP指令的转移地址范围 到 。AJMP指令的转移地址范围 到
。SJMP指令的转移地址范围 到 。
6.A=04H时,当执行一次PLA后,累加器的值为 。A=16H时,当执行一次RR后,累加器值为 。
三、编程题
1.单片机AT89S52的P1口接8个LED,让这8个LED实现闪烁功能,即8个LED亮一段时间,灭一段时间,如此循环。
2.单片机AT89S52的P1口接8个LED,让这8个LED先交互闪烁3次,然后双灯左移之后再双灯右移,如此循环,开成流水灯效果,延时0.5s。
3.利用单片机任意两口,实现8路按键输入信号显示到另一口所接的LED上。例如:P2口所接的第一按键按下,P3口对应的第一个LED工作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。