《单片机应用实例开发》课件第3章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《单片机应用实例开发》课件第3章.ppt》由用户(kld)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机应用实例开发 单片机 应用 实例 开发 课件
- 资源描述:
-
1、3.1 多彩流水灯电路的设计 3.2 多彩流水灯程序的设计 3.3 按键控制彩灯的设计 3.4 单个数码管显示接口的设计 3.5 习题 实例三实例三 循环、查表和中断系统循环、查表和中断系统 学习目标学习目标 理解多彩流水灯控制电路的构成、工作原理和电路中各元器件的作用,并对电路进行分析和计算。理解51单片机的时序概念和内部数据/程序存储器结构,掌握工作寄存器的使用方法。正确使用MedWin软件的端口、查看寄存器、特殊功能、设置断点、执行到光标处等调试功能,调整指令的执行时间。正确理解程序设计框架,掌握循环结构程序的编写方法,掌握EQU、DATA等伪指令的使用方法。掌握特殊功能寄存器中累加器A
2、CC和状态寄存器PSW的使用。理解51单片机的内部定时器/计数器结构,掌握定时器的工作原理和TMOD的使用。正确使用RR、RL、RRC、RLC等逻辑运算指令和MOVC查表指令。正确使用DJNZ、CJNE、NOP、ACALL/LCALL、RET和INC等指令。正确使用Proteus仿真软件调试电动车转向灯控制系统。设计和制作多彩流水灯控制系统,对电路中的故障现象进行分析判断并加以解决,通过调试得到正确结果。工作任务工作任务 测试多彩流水灯控制电路并进行结果描述。设计、制作与调试多彩流水灯控制系统。撰写设计文档与测试报告。大街上人们经常能看见各式各样的霓虹灯,五颜六色的灯以不同的闪亮方式装点着城市
3、,下面我们就从控制彩灯开始学习单片机编程的旅程。本实例以彩灯控制为例介绍LJ_2彩灯控制板的应用,并以此为引子逐步引导大家掌握单片机的基本结构及开发方法。3.1 多彩流水灯电路的设计多彩流水灯电路的设计学习目标学习目标 理解多彩流水灯控制电路的构成、工作原理和电路中各元器件的作用,并对电路进行分析和计算。工作任务工作任务 测试多彩流水灯控制电路并进行结果描述。多彩流水灯的控制电路根据不同的设计要求有不同的设计,我们先学习较简单的控制电路设计。在实例二中我们学习了单个发光二极管的控制,因此不难想象多彩流水灯的控制电路可以采用和2.1.2节中单个发光二极管控制电路类似的设计。假设多彩流水灯由8个发
4、光二极管构成,那么,就可以采用如图31所示的电路设计。图31 8盏流水灯仿真图【练习】项目:16盏流水灯控制电路的设计。项目编号:EX3_1。任务要求:在Proteus平台中绘制单灯点亮控制电路,撰写练习报告(格式要求见附录A)。设计设备与软件:计算机1台,Proteus软件1套。设计步骤:(1)打开Proteus软件。(2)取用所需元器件,并摆放好位置。(3)连接好电路。(4)计算电路中的主要参数值,并设置好相关器件。仿真图如图32所示。图32 16盏流水灯仿真图3.2 多彩流水灯程序的设计多彩流水灯程序的设计 学习目标学习目标 正确使用MedWin软件的端口、设置断点、执行到光标处等调试功
5、能,调整指令的执行时间。正确使用MedWin软件的查看寄存器、特殊功能寄存器等功能。正确理解程序设计框架,掌握循环结构程序的编写方法,掌握EQU、DATA等伪指令的使用方法。掌握特殊功能寄存器中累加器ACC和状态寄存器PSW的使用。正确使用RR、RL、RRC、RLC等逻辑运算指令和MOVC查表指令。工作任务工作任务 设计与调试多彩流水灯控制程序。撰写设计文档与测试报告。3.2.1 8盏灯轮流式点亮盏灯轮流式点亮假设将要实现如下要求:P1口作输出口,编写程序控制P1口各发光二极管依次向左轮流点亮,每次点亮的时间为0.5 s。1设计思路设计思路(1)通过前面2.2.1节寻址方式的介绍,不难想到,若
6、要控制P1口的发光二极管的亮灭,则使用立即寻址方式的指令,将相应的控制代码直接送给P1口就可以实现,所以很显然我们将要用到立即寻址方式的指令“MOV P1,#data”。(2)设计要求中提到各发光二极管的点亮时间为0.2 s,故彩灯状态控制代码需保持0.2s后再修改,所以我们需要有能延时0.2 s的延时子程序。(3)由于设计要求中各发光二极管是依次轮流点亮的,因此通过分析控制代码之间的关系,不难发现它们之间的循环移位的特点。2基本知识基本知识1)寄存器寻址(Rn)由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器寻址。理解:以去图书馆借书为例,一般图书馆都会设置一个新书架,近期买的
7、书都放在新书架上,以便于读者借阅。新书架和其他的书架都是统一编号的,只是为了读者借阅方便,通常不说它的编号而直接称其为新书架。这和寄存器及其他的直接地址单元统一编址是一样的。为了使用方便,给指定的一些直接地址单元另取了名称(R0R7),这样我们就可以不用记它们的地址了。例如:MOV P1,R2;机器码为8AH,90H图33 寄存器寻址方式指令执行示意图这条指令的功能是把寄存器R2中存放的数送到P1端口。至于这里的寄存器R2属于哪一个寄存器组,则由PSW中RS1和RS0的值来确定。假设PSW中RS1和RS0的值分别为0和1,可知此时的R2属于第一组,那么它的地址为0AH。假设0AH中存放的数据为
8、7FH,则执行该指令后,P1端口的值为7FH。该指令执行示意图如图33所示。图33 寄存器寻址方式指令执行示意图可以通过在MedWin中仿真以下程序来帮助理解寄存器寻址方式指令的执行情况。ORG 0000H;程序头LJMP MAINORG0030HMAIN:MOVP1,R2;寄存器R2的值送P1端口SJMP$;“$”的含义为包含该符号的指令的地址,动态暂停END;程序尾仿真过程如下:(1)在MedWin中编辑好上面这段程序,然后选择“项目管理”/“编译汇编”编译代码。若没有语法错误,则选择“调试”/“开始调试”进行调试。(2)为了观察数据方便,读者可以选择“外围部件”/“端口”,打开“端口”窗
9、口;选择“查看”/“寄存器”,打开“寄存器”窗口;选择“查看”/“特殊功能寄存器”,打开“特殊功能寄存器”窗口。寄存器窗口中的值可以通过在数据区双击鼠标修改,如图34(b)所示。图34 “MOV P1,R2”执行过程(a)“MOV P1,R2”执行前1;(b)“MOV P1,R2”执行前2;(c)“MOV P1,R2”执行后图34 “MOV P1,R2”执行过程(a)“MOV P1,R2”执行前1;(b)“MOV P1,R2”执行前2;(c)“MOV P1,R2”执行后图34 “MOV P1,R2”执行过程(a)“MOV P1,R2”执行前1;(b)“MOV P1,R2”执行前2;(c)“MO
10、V P1,R2”执行后(3)为观察程序运行每一步的结果,读者可以选择“调试”/“单步”,使程序单步运行。调试过程如图34(a)(c)所示。(4)调试成功后,可产生代码。将代码下载到实验板LJ_2,观察效果。2)伪指令(1)为标号赋值伪指令EQU(Equate)。伪指令格式:标号(字符名称)EQU 数或汇编符号该指令的作用是将操作数中的地址或数据赋给标号字段中的标号。例如:HOUREQU30H;HOUR与30H等值INCHOUR;HOUR加1,实际为30H存储单元 的数据加1(2)数据地址赋值伪指令DATA。伪指令格式:标号(字符名称)DATA 数或表达式该指令的作用是给标号段中的标号赋值,与E
11、QU类似,但也有差别。用DATA定义的标识符汇编时将作为标号登记在符号表中,故可以先使用后定义;EQU定义的标识符必须先定义后使用。用DATA只能将数据或表达式的值赋给字符名,而用EQU可以将一个汇编符号赋给字符名,但不能将表达式的值赋给字符名。DATA常用来定义数据地址。例如:XRAMDATA 20F0H汇编后XRAM的值为20F0H。3)逻辑运算类指令逻辑运算类指令主要包括逻辑与、逻辑或、逻辑异或、移位、取反和清零等指令,涉及的助记符包括ANL(逻辑与)、ORL(逻辑或)、XRL(逻辑异或)、RL(左环移)、RR(右环移)、RLC(带进位左环移)、RRC(带进位右环移)、CPL(取反)、C
12、LR(清零)等。这类指令一般不影响PSW中的标志位,仅当目的操作数为A时会影响P。采用的寻址方式有立即寻址、直接寻址、寄存器寻址和寄存器间接寻址,其指令格式如下:ANL目的操作数,源操作数ORL目的操作数,源操作数XRL目的操作数,源操作数RLARRARLCARRCACPLACLRA逻辑运算类指令的助记图如图35所示。图35 逻辑运算指令的助记图循环移位指令示意图如图36所示。图36 循环移位指令示意图下面通过一个例子来加以说明。设(A)=0C5H(1100 0101B),C=0,(R0)=47H,(47H)=39H。RLA;执行指令后,A=8BH(1000 1011B),C=0RLC A;执
13、行指令后,A=8AH(1000 1010B),C=1ANL A,40H;执行指令后,A=00H(0000 0000B),C=0ORL A,R0;执行指令后,A=39HXRLA,47H;执行指令后,A=00H(0000 0000B)CPLA;执行指令后,A=0FFHCLR A;执行指令后,A=03设计步骤设计步骤(1)设计仿真图如图31所示,流程图如图37所示。图37 8盏灯轮流点亮的流程图(2)程序设计所需指令表如表31所示。若在MedWin软件中仿真调试,则可以在“端口”窗口中观察到P1口跑马灯的效果。调试好的程序代码可以加载到Protues仿真电路中调试,调试过程中可以看见实际的流水灯效果
14、,然后下载到目标板上查看实际的效果。说明:读者应先理解本书所给出的实例,然后自行设计彩灯点亮方式进行训练。首先,我们提出一些设计要求,然后根据要求分析并找出实现的方法(设计方案),确定实现方法后结合单片机程序设计的基本框架,举一反三,完成程序初步设计,再利用MedWin仿真软件仿真,检查是否能达到预期效果。若不能,则重新编辑、仿真;若能,则下载到目标板上,观察实际效果能否顺利实现,若不能实现,则重复上述过程,直至最后设计成功。【练习】项目:8盏流水灯控制程序设计一。项目编号:EX3_2。任务要求:P1口作输出口,编写程序控制P1口各发光二极管依次向右轮流点亮,每次点亮的时间为0.2 s。在Me
15、dWin集成开发环境中编辑/编译控制程序,并产生代码,在Proteus平台里仿真系统,撰写练习报告(格式要求见附录A)。设计设备与软件:计算机1台,MedWin或其他同类软件1套,Proteus软件1套。设计步骤:(1)打开MedWin软件。(2)新建源程序文件,编辑源代码。(3)编译源程序,若没有错,则产生代码;若有错,则修改错误。(4)仿真调试程序代码。(5)在Proteus中打开8盏流水灯控制电路图。(6)加载程序代码,调试。3.2.2 8盏灯缩展式点亮盏灯缩展式点亮假设我们在P1口连接了如图38所示的8个红、黄、绿三种不同颜色的发光二极管。以182736454536271827这样的方
16、式点亮,相邻状态的间隔时间为0.5 s。图38 8盏流水灯的颜色安排1设计思路设计思路从设计要求中我们可以找出一定的规律,因此程序设计时可以考虑利用循环结构来实现。分析后可知,设计的效果实际为彩灯从两端亮开始逐步向中间收缩,然后向两端扩展,再向中间收缩,如此反复。因此我们想到用两个参数,让它们每次分别左移和右移后再叠加来实现。2设计步骤设计步骤(1)仿真图如图31所示,流程图如图39所示。图39 8盏灯递进点亮的流程图(2)程序设计所需指令表如表32所示。【练习】项目:8盏流水灯控制程序设计二。项目编号:EX3_3。任务要求:设计要求同3.2.2节,要求用不同的设计方案来实现。在MedWin集
17、成开发环境中编辑/编译控制程序,并产生代码,在Proteus平台里仿真系统,撰写练习报告(格式要求见附录A)。设计设备与软件:计算机1台,MedWin或其他同类软件1套,Proteus软件1套。设计步骤:(1)打开MedWin软件。(2)新建源程序文件,编辑源代码。(3)编译源程序,若没有错,则产生代码;若有错,则修改错误。(4)仿真调试程序代码。(5)在Proteus中打开8盏流水灯控制电路图。(6)加载程序代码,调试。3.2.3 8盏灯复杂循环点亮盏灯复杂循环点亮彩灯的颜色安排如图38所示,要求以这样的方式点亮:112123123412345123456123456712345678234
18、5678345678456785678678788,相邻状态的间隔时间为0.5 s。1设计思路设计思路从设计要求中我们同样可以找到一些规律,但是这种规律通过简单的循环指令并不能实现,因此这次我们考虑用带进位循环指令RLC、RRC试一试。刚开始每次移位前先预置进位标志为0,这样依次左移后送给P1口的代码如下:再将进位标志置为1后,将代码依次右移即可实现。2设计步骤设计步骤(1)仿真图如图31所示,流程图如图310所示。图310 8盏灯复杂循环点亮(2)程序设计所需指令表如表33所示。【练习】项目:8盏流水灯控制程序设计三。项目编号:EX3_4。任务要求:设计一个利用51单片机I/O口输出信号,控
19、制16个发光二极管每0.2s交替闪亮,实现跑马灯,即D1D2D15D16D循环点亮。闪亮时间由简单延时电路实现。在MedWin集成开发环境中编辑/编译控制程序,并产生代码,在Proteus平台里仿真系统,撰写练习报告(格式要求见附录A)。1思路分析思路分析要求实现16盏灯的闪烁,每次灯亮的时间为0.2s,形成跑马灯。参考3.2.3节举例,可以采用51单片机的I/O口(此时用作输出)中的P0和P1口来控制,通过指令周期性地重复改变此I/O口的电平状态,此时的间隔时间可以通过执行延时指令(无意义的指令)来实现。根据状态控制码的分析,我们可以采用P1口的状态依次左移后再使P0口的状态依次右移来实现设
20、计要求。2设计步骤设计步骤1)硬件电路设计(1)思路。根据设计要求分析,可以将16个发光二极管分别接到P0口(P0.0P0.7)和P1口(P1.0P1.7)的端口上,采用直接驱动,为提高驱动电流能力,采用共阳极接法。单片机其他电路接成最小系统即可。(2)在Proteus中画好电路图,如图311所示。图311 16盏流水灯仿真图2)软件设计(1)绘制程序流程图,如图312所示。(2)编写程序代码如下:ORG0000HLJMP STARTORG0030HSTART:MOV A,#0FEH;送P1口循环控制初始状态值图312 16盏灯循环点亮的流程图3)练习(1)设计一个利用51单片机I/O口输出信
21、号,控制16个发光二极管每0.2s间隔交替闪亮,实现跑马灯,即D1D3D5D12D15D1循环点亮,应该怎样修改程序呢?(2)若要实现D1D3D5D13D15D13D11D5D3D1D3D5的效果,又该怎样修改程序呢?3.2.4 8盏灯无序点亮盏灯无序点亮彩灯的颜色安排如图38所示。要求以这样的方式点亮,即红灯亮绿灯亮黄灯亮红绿灯亮黄绿灯亮黄红灯亮全亮全灭红灯亮绿灯亮,相邻状态的间隔时间为0.5 s。1设计思路设计思路分析设计要求后,我们会发现虽然这个设计要求的彩灯效果是有规律的,但所应设置的控制代码却不能找出什么规律,而每个状态分别送又比较繁琐,所以能不能事先把一些显示状态的代码设计好,并按
22、照一定的顺序保存在一个表格中,当想改变彩灯的状态时,就从这个表格里取数据出来呢?这样即便灯前后显示的状态并没有规律也没关系,所以我们这次需要查表指令。2基本知识基本知识1)基址变址寻址(A+PC/A+DPTR)这种寻址方式以DPTR或PC为基址寄存器,累加器A为变址寄存器,A中的数据为无符号数。当变址寻址时,把基址和变址两者的内容相加,所得到的结果作为操作数的地址。这种寻址方式是单字节的,用于读出程序存储器(ROM)中的内容。该寻址方式的指令也称为查表指令。理解:为了更好地理解基址变址寻址方式,可以把它看做是去宾馆会朋友。好朋友来出差,住在宾馆里,你想和他见个面,叙叙旧,朋友让你去宾馆找他,于
23、是你就起程了。要找到你的朋友,首先要找到朋友住的宾馆(基址),然后根据朋友的房号(变址)找到朋友的房间,这样就可以找到多年未见的朋友,好好叙叙旧了。例如:MOVCA,A+DPTR;机器码为93H假设ACC中原来的值为02H,DPTR中的值为01E0H,则A+DPTR形成的地址为01E2H。假设01E2H单元中的内容为27H,则执行该指令后,ACC中原来的02H被27H替代。该指令执行示意图如图313所示。图313 基址变址寻址方式指令执行示意图可以通过在MedWin中仿真以下程序来帮助理解基址变址寻址方式指令的执行情况。要点:DB为伪指令,稍后再对其做详细解释。仿真过程如下:(1)在MedWi
24、n中编辑好上面这段程序,然后选择“项目管理”/“编译汇编”编译代码。若没有语法错误,则选择“调试”/“开始调试”进行调试。(2)为观察数据方便,读者可以选择“外围部件”/“端口”,打开“端口”窗口;选择“查看”/“寄存器”,打开“寄存器”窗口;选择“查看”/“特殊功能寄存器”,打开“特殊功能寄存器”窗口;选择“查看”/“数据区”,打开内部程序存储区,观察01E0H单元段的数据。调试过程中可以直接双击数据区单元,修改数据区的数值,如图314(b)所示。(3)为观察程序运行每一步的结果,读者可以选择“调试”/“单步”,使程序单步运行。调试过程如图314(a)(c)所示。(4)调试成功后,可产生代码
25、。将代码下载到实验板LJ_2,观察效果。图314 “MOV P1,A”的执行过程(a)“MOV P1,A”执行前1;(b)“MOV P1,A”执行前2;(c)“MOV P1,A”执行后图314 “MOV P1,A”的执行过程(a)“MOV P1,A”执行前1;(b)“MOV P1,A”执行前2;(c)“MOV P1,A”执行后图314 “MOV P1,A”的执行过程(a)“MOV P1,A”执行前1;(b)“MOV P1,A”执行前2;(c)“MOV P1,A”执行后2)伪指令(1)定义字节伪指令DB(Define Byte)。伪指令格式:DB定义字节伪指令是在以标号为首地址的连续存储单元中存
展开阅读全文