单片机项目3 8个LED发光二级管控制课件.ppt
项目3 8个LED发光二极管控制,知识与能力目标,进一步掌握单片机的I/O口功能与特性。,1,掌握简单按键接口电路及消除抖动的措施。,2,初步学会按键软件消抖的编程实现方法。,3,4,学会使用汇编语言进行较复杂I/O口控制程序的分析与设计。,1,2,学会使用C语言进行较复杂I/O口控制程序的分析与设计。,5,进一步学习Keil uVsion3与Proteus软件的使用。,6,项目3 8个LED发光二极管控制,训练任务3.1 双边拉幕灯控制,3.1.1 训练目的与控制要求,3.1.3 Proteus仿真电路图创建,3.1.5 C语言程序设计与调试,3.2.2 硬件系统与控制流程分析,3.1.2 硬件系统与控制流程分析,3.1.4 汇编语言程序设计与调试,3.2.1 训练目的与控制要求,3.2.3 Proteus仿真电路图创建,3.2.4 汇编语言程序设计与调试,3.2.5 C语言程序设计与调试,2,训练任务3.2 双向跑马灯控制,训练任务3.1 双边拉幕灯控制,1.训练目的,3.1.1 训练目的与控制要求,2.训练任务,训练任务3.1 双边拉幕灯控制,所示电路为一个89C51单片机控制8个LED发光管进行“双边拉幕灯控制”运行的电路原理图,LED1至LED4为模拟的左边幕,LED5至LED8为模拟的右边幕。该单片机应用系统的具体功能为:当系统上电运行工作时,模拟左右两边幕的LED灯同步由两边向中间逐一点亮,当全部亮后,再同步由中间向两边逐一熄灭。以此往复循环运行,形成“双边拉幕灯”效果。开关S2用于系统的运行和停止控制,当其闭合时,系统工作;当其断开时,系统暂停处于当前状态,训练任务3.1 双边拉幕灯控制,3.训练要求,训练任务要求如下:1)进行单片机应用电路分析,并完成Proteus仿真电路图的绘制。2)根据任务要求进行单片机控制程序流程和程序设计思路分析,画出程序流程图。3)依据程序流程图在Keil中进行源程序的编写与编译工作。4)在Proteus中进行程序的调试与仿真工作,最终完成实现任务要求的程序。5)完成单片机应用系统实物装置的焊接制作,并下载程序实现正常运行。,训练任务3.1 双边拉幕灯控制,3.1.2 硬件系统与控制流程分析,1.任务硬件系统分析,该电路是在单片机最小系统的基础之上,添加8个LED驱动电路设计而成。所有LED电路都与P1连接,接口方式均设计为低电平驱动。同时,在P2.3口外接一个开关接口电路。,2.任务控制流程分析,根据电路原理图和任务控制功能要求可知,本任务功能上主要是通过一个开关控制单片机应用系统的运行和停止。当开关断开时,系统暂停且处于当前状态;当开关闭合时,系统运行。运行方式为:左右两边幕的LED灯同步由两边向中间逐一点亮,当全部亮后,再同步由中间向两边逐一熄灭,以此往复循环运行。如图3-2所示为本任务程序设计的程序控制流程图。,训练任务3.1 双边拉幕灯控制,训练任务3.1 双边拉幕灯控制,3.1.3 Proteus仿真电路图创建,表3-1 元器件配置表,训练任务3.1 双边拉幕灯控制,图3-3 双边拉幕灯控制仿真图,汇编语言程序设计分析,训练任务3.1 双边拉幕灯控制,3.1.4 汇编语言程序设计与调试,1)按照前面任务2.1.4中Proteus与Keil联调的步骤完成基本的软件设置。如果前面已经设置过一次,在此可以跳过忽略。2)用Proteus打开已绘制好的“双边拉幕灯控制.DSN”文件,在Proteus的“Debug”菜单中选中“Use Remote Debug Monitor(远程监控)”。同时,右键选中STC89C51单片机,在弹出对话框“Program File”项中,导入在Keil中生成的十六进制HEX文件“双边拉幕灯控制.HEX”。3)用Keil打开刚才创建好的“双边拉幕灯控制.UV2”文件,打开窗口“Option for Target工程名”。在Debug选项中右栏上部的下拉菜单选中Proteus VSM Simulator。接着再点击进入Settings窗口,设置IP为127.0.0.1,端口号为8000。,训练任务3.1 双边拉幕灯控制,4)在Keil中点击 ,使用单步执行来调试程序,同时在Proteus中查看直观的仿真结果。这样就可以像使用仿真器一样调试程序了,如图3-4所示。,图3-4 Proteus与Keil联调界面,训练任务3.1 双边拉幕灯控制,首先,将Proteus仿真电路中的开关SW闭合,来联合调试当开关闭合时的系统运行情况。当执行完“MOV R0,#0FFH”、“MOV R1,#7EH”、“MOV R2,#3CH”、“MOV R3,#18H”、“MOV R4,#00H”程序时,能够看到右侧Keil软件CPU窗口中R0=0XFF(全都熄灭的值)、R1=0X7E(左右各点亮一盏其余熄灭的值)、R2=0X3C(左右各点亮两盏其余熄灭的值)、R3=0X18(中间两盏熄灭其余点亮的值)以及R4=0X00(全都点亮的值)的赋值。当单步执行程序,按顺序分别执行完“MOV P1,R0”、“MOV P1,R1”、“MOV P1,R2”、“MOV P1,R3”和“MOV P1,R4”程序语句后,就能看到LED灯由两边同步向中间逐一点亮的效果,如图3-5和图3-6所示。,训练任务3.1 双边拉幕灯控制,图3-5 点亮2个LED,训练任务3.1 双边拉幕灯控制,图3-6 点亮8个LED,训练任务3.1 双边拉幕灯控制,当单步执行程序,按顺序分别执行完“MOV P1,R4”、“MOV P1,R3”、“MOV P1,R2”、“MOV P1,R1”、“MOV P1,R0”程序语句后,就能看到LED灯由中间同步向两边逐一熄灭的效果,如图3-7所示。,训练任务3.1 双边拉幕灯控制,其次,将Proteus仿真电路在联合调试过程中断开开关SW,观察开关断开时的系统运行情况。,训练任务3.1 双边拉幕灯控制,Proteus仿真运行,图3-9 仿真运行结果(一)界面,当开关闭合时,系统运行,观察到LED灯由两边同步向中间逐一点亮,其运行结果如图3-9。,训练任务3.1 双边拉幕灯控制,图3-10 仿真运行结果(二)界面,当全部点亮后,再由中间同步向两边逐一熄灭,其运行结果如图3-10,以此往复循环运行。,训练任务3.1 双边拉幕灯控制,图3-11 仿真运行结果(三)界面,当开关断开时,系统运行暂停,会观察到LED灯运行暂停在SW开光断开之前的状态,其运行结果如图3-11所示。,仿真运行视频,C语言程序设计分析,训练任务3.1 双边拉幕灯控制,3.1.5 C语言程序设计与调试,1)按照前面任务2.1.5中Proteus与Keil联调的步骤完成基本的软件设置。如果前面已经设置过一次,在此可以跳过忽略。2)用Proteus打开已绘制好的“双边拉幕灯控制.DSN”文件,在Proteus的“Debug”菜单中选中“Use Remote Debug Monitor(远程监控)”。同时,右键选中STC89C51单片机,在弹出对话框“Program File”项中,导入在Keil中生成的十六进制HEX文件“双边拉幕灯控制.HEX”。3)用Keil打开刚才创建好的“双边拉幕灯控制.UV2”文件,打开窗口“Option for Target工程名”。在Debug选项中右栏上部的下拉菜单选中Proteus VSM Simulator。接着再点击进入Settings窗口,设置IP为127.0.0.1,端口号为8000。,训练任务3.1 双边拉幕灯控制,4)在Keil中点击 ,使用单步执行来调试程序,同时在Proteus中查看直观的仿真结果。这样就可以像使用仿真器一样调试程序了,Proteus与Keil联调界面如图3-12所示。,训练任务3.1 双边拉幕灯控制,首先,将Proteus仿真电路中的开关SW闭合,来联合调试当开关闭合时的系统运行情况。当单步执行程序运行到“LED=0X7E;”时,能够清楚地看到左侧Proteus仿真电路中P1口中P1.0和P1.7所接的LED发光管点亮,其余熄灭,如图3-13所示。,训练任务3.1 双边拉幕灯控制,当单步执行程序运行到“for(i=0;i1);”后,就会增加点亮2个LED灯,就能观察到LED灯由两边同步向中间逐一点亮的效果。直到程序进行完4次循环后,程序将跳出for程序段继续往下执行,如图3-14所示。,训练任务3.1 双边拉幕灯控制,当单步执行程序运行到“LED=0X18;”后,能够清楚地看到左侧Proteus仿真电路中P1口中P1.3和P1.4所接的LED发光管熄灭,其余点亮,如图3-15所示。,训练任务3.1 双边拉幕灯控制,当单步执行程序又运行到“for(i=0;i1);”后,就会增加熄灭2个LED灯,就能观察到LED灯由中间同步向两边逐一熄灭的效果,4次循环后8个LED灯全部熄灭,且跳出for循环体,如图3-16和图3-17所示。,训练任务3.1 双边拉幕灯控制,图3-17 熄灭8个LED,训练任务3.1 双边拉幕灯控制,其次,将Proteus仿真电路在联合调试过程中断开开关SW,观察开关断开时的系统运行情况。,训练任务3.1 双边拉幕灯控制,图3-18 运行暂停状态,训练任务3.1 双边拉幕灯控制,训练任务3.1 双边拉幕灯控制,训练任务3.2 双向跑马灯控制,1.训练目的,3.2.1 训练目的与控制要求,训练任务3.2 双向跑马灯控制,2.训练任务,如图3-19所示电路为一个89C51单片机控制8个LED发光管进行“双向跑马灯控制”运行的电路原理图。该单片机应用系统的具体功能为:当系统上电运行工作时,当有启动按钮按下后,8个LED从LED1开始轮流右移点亮,当右移到LED8点亮时;再返向左移轮流点亮,一直到LED1点亮为止,以此往复循环运行,形成一个亮点来回跑动的“双向跑马灯”效果。当停止按钮按下时,系统暂停处于当前状态,但是启动按钮按下时又会继续运行;其具体的工作运行情况见本书配套教材附带光盘中的仿真运行视频文件。,训练任务3.2 双向跑马灯控制,3.训练要求,训练任务要求如下:1)进行单片机应用电路分析,并完成Proteus仿真电路图的绘制。2)根据任务要求进行单片机控制程序流程和程序设计思路分析,画出程序流程图。3)依据程序流程图在Keil中进行源程序的编写与编译工作。4)在Proteus中进行程序的调试与仿真工作,最终完成实现任务要求的程序。5)完成单片机应用系统实物装置的焊接制作,并下载程序实现正常运行。,训练任务3.2 双向跑马灯控制,3.2.2 硬件系统与控制流程分析,1.任务硬件系统分析,该电路是在单片机最小系统的基础之上,添加8个LED驱动电路设计而成。所有LED电路都与P2口连接,接口方式均设计为低电平驱动。同时,在P3.0和P3.1口外分别接有一按键接口电路,用于系统的运行和暂停输入控制。,2.任务控制流程分析,根据电路原理图和任务控制功能要求可知,本任务功能上主要是通过两个按钮控制单片机的应用系统启动和停止。当启动按钮按下后,8个LED从LED1开始轮流右移点亮;当右移到LED8点亮时,再返向左移轮流点亮,一直到LED1点亮为止,以此往复循环运行。当暂停按钮按下时,系统暂停于当前状态,直到启动按钮再次按下时继续运行。,训练任务3.2 双向跑马灯控制,图3-20 双向跑马灯控制流程图,训练任务3.2 双向跑马灯控制,3.2.3 Proteus仿真电路图创建,表3-2 元器件配置表,训练任务3.2 双向跑马灯控制,用鼠标双击桌面上的图标 进入“Proteus ISIS”编辑窗口,单击菜单命令“File” “New Design”,新建一个DEFAULT模板,并保存为“双向跑马灯控制.DSN”。在器件选择按钮 单击“P”按钮,将表3-2中的元器件添加至对象选择器窗口中。然后将各个元器件摆放好,最后依照图3-19所示的原理图将各个器件连接起来,如图3-21所示。,汇编语言程序设计分析,训练任务3.2 双向跑马灯控制,3.2.4 汇编语言程序设计与调试,1)按照前面任务2.1.4中Proteus与Keil联调的步骤完成基本的软件设置。如果前面已经设置过一次,在此可以跳过忽略。2)用Proteus打开已绘制好的“双向跑马灯控制.DSN”文件,在Proteus的“Debug”菜单中选中“Use Remote Debug Monitor(远程监控)”。同时,右键选中STC89C51单片机,在弹出对话框“Program File”项中,导入在Keil中生成的十六进制HEX文件“双向跑马灯控制.HEX”。3)用Keil打开刚才创建好的“双向跑马灯控制.UV2”文件,打开窗口“Option for Target工程名”。在Debug选项中右栏上部的下拉菜单选中Proteus VSM Simulator。接着再点击进入Settings窗口,设置IP为127.0.0.1,端口号为8000。,训练任务3.2 双向跑马灯控制,4)在Keil中点击 ,使用单步执行来调试程序,同时在Proteus中查看直观的仿真结果。这样就可以像使用仿真器一样调试程序了,Proteus与Keil联调界面如图3-22所示。,训练任务3.2 双向跑马灯控制,在联调时需要启动按键输入信号,点击按键旁的双向箭头,单击此箭头按钮变成常闭导通状态;再次单击箭头或单击按钮,则按钮恢复原状。,先将启动按键设置为常闭状态,再使用单步执行程序。模拟启动按钮按下, P3.0输入低电平,执行程序“LCALL AN_JIAN”。由于AN_JIAN子程序中有调用按键按下和松开功能的去抖子程序,所以退出子程序之前必须将模拟启动按钮断开。当有检测有运行信号后,子程序执行结果反馈X为0,执行双向跑马灯的程序段,如图3-23和3-24所示。,训练任务3.2 双向跑马灯控制,图3-23 模拟运行信号调试界面,训练任务3.2 双向跑马灯控制,图3-24 模拟运行信号解除界面,训练任务3.2 双向跑马灯控制,单步运行程序,可在左侧Proteus仿真电路图中看到跑马灯的效果,如图3-25所示,图3-25 双向跑马灯运行状态调试界面,训练任务3.2 双向跑马灯控制,同样,暂停信号也可以使用这样方法模拟,当暂停信号产生后跑马灯会立即停止移动,直到运行信号重新产生,如图3-26所示。,图3-26 双向跑马灯暂停状态调试界面,训练任务3.2 双向跑马灯控制,Proteus仿真运行,用Proteus打开已绘制好的“双向跑马灯控制.DSN”,并将最后调试完成的程序重新编译生成新“.HEX”文件导入Proteus中。,运行时,当P3.0启动按钮按下后,8个LED进行双向点亮运行,如图3-26所示。,图3-27 仿真运行结果(一)界面,训练任务3.2 双向跑马灯控制,当P3.1暂停按钮按下后,8个LED暂停运行并保持在当前状态,如图3-28所示。直到P3.0再次按下,8个LED从暂停状态再次继续运行。,图3-28 仿真运行结果(二)界面,仿真运行视频,C语言程序设计分析,训练任务3.2 双向跑马灯控制,3.2.5 C语言程序设计与调试,1)按照前面任务2.1.5中Proteus与Keil联调的步骤完成基本的软件设置。如果前面已经设置过一次,在此可以跳过。2)用Proteus打开已绘制好的“双向跑马灯控制.DSN”文件,在Proteus的“Debug”菜单中选中“Use Remote Debug Monitor(远程监控)”。同时,右键选中STC89C51单片机,在弹出对话框“Program File”项中,导入在Keil中生成的十六进制HEX文件“双向跑马灯控制.HEX”。3)用Keil打开刚才创建好的“双向跑马灯控制.UV2”文件,打开窗口“Option for Target工程名”。在Debug选项中右栏上部的下拉菜单选中Proteus VSM Simulator。接着再点击进入Settings窗口,设置IP为127.0.0.1,端口号为8000。,训练任务3.2 双向跑马灯控制,4)在Keil中点击 ,使用单步执行来调试程序,同时在Proteus中查看直观的仿真结果。这样就可以像使用仿真器一样调试程序了,Proteus与Keil联调界面如图3-29所示。,图3-29 Proteus与Keil联调界面,训练任务3.2 双向跑马灯控制,在联调时需要启动按键输入信号,点击按键旁的双向箭头,单击此箭头按钮变成常闭导通状态;再次单击箭头或单击按钮,则按钮恢复原状。,先将启动按键设置为常闭状态,再使用单步执行程序。模拟启动按钮按下, P3.0输入低电平,执行程序“if(K1=0)”,if里表达式结果为真,执行后续括号里的程序。检测按键子程序中有调用按键按下和松开功能的去抖子程序,所以退出子程序之前必须将模拟启动按钮断开。flag赋值为1,执行while语句内部跑马灯的程序段,如图3-28和3-29所示。,训练任务3.2 双向跑马灯控制,图3-30 模拟运行信号调试界面,训练任务3.2 双向跑马灯控制,图3-31 模拟运行信号解除界面,训练任务3.2 双向跑马灯控制,单步运行程序,可在左侧Proteus仿真电路图中看到跑马灯的效果,如图3-32所示。,图3-32 双向跑马灯启动状态调试界面,训练任务3.2 双向跑马灯控制,同样,暂停信号也可以使用这样方法模拟,当暂停信号产生后跑马灯会立即停止移动,直到启动信号重新产生,如图3-33所示。,训练任务3.2 双向跑马灯控制,训练任务3.2 双向跑马灯控制,