单片机应用技术课件-002_第1页
单片机应用技术课件-002_第2页
单片机应用技术课件-002_第3页
单片机应用技术课件-002_第4页
单片机应用技术课件-002_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

《单片机应用技术》项目2数码管显示系统设计泸州职业技术学院机电工程系《单片机应用技术》精品课程组《单片机应用技术》项目2数码管显示系统设计泸州职业技术学1本讲主要内容4相关知识1教学目标2工作任务3项目实践5能力拓展6项目考核本讲主要内容4相关知识1教学目标2工作任务3项目实践21、终极目标:制作一个数码管循环显示数字0-9的单片机控制系统。2、促成目标:(1)掌握单片机查表程序的设计方法;(2)掌握单片机的LED显示接口电路工作原理及其应用;(3)掌单片机LED显示接口的程序设计方法;(4)初步掌握单片机应用系统分析和软硬件设计的基本方法,建立单片机系统设计的基本概念;【教学目标】1、终极目标:【教学目标】3

在数码管上循环显示数字0-9,时间间隔为0.2秒。【工作任务】【工作任务】4【活动一】总体设计1.系统组成本系统功能由硬件和软件两大部份协调完成,硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。本系统的硬件采用模块化设计,以AT89S52单片机为核心,与数码管接口电路组成控制系统。该系统硬件主要包括以下几个模块:AT89S52主控模块、数码管显示模块等。其中AT89S52主要完成外围硬件的控制以及一些运算功能,数码管显示模块完成字符、数字的显示功能。系统组成方框图如图2.1所示。【项目实践】【活动一】总体设计1.系统组成【项目实践】5

单片机数码管显示电路复位电路时钟电路电源电路

图2.1数码管显示系统组成方框图【项目实践】单数码管显示电路复位电路时钟电路电源电路6

应用软件采用模块化设计方法。该系统软件主要由主程序、延时子程序等模块组成,系统软件结构框图如图2.2所示。延时子程序主程序图2.2系统软件结构框图【项目实践】

72.系统工作原理数码管由8个发光二极管构成,可以用来显示数字、字符等,它在家电及工业控制中有着很广泛的应用,例如用来显示温度、数量、重量、日期、时间等,具有显示醒目、直观的有点,如图2.3所示。

图2.3数码管实物图【项目实践】2.系统工作原理图2.3数码管实物图【项目实践】8数码管实际上是由7个发光管组成“8”字形构成的,加上小数点就是8个。这些段分别由字母a、b、c、d、e、f、g、dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样。例如:显示一个“3”字,那么应当是a亮、b亮、c亮、d亮、e不亮、f不亮、g亮、dp不亮。数码管的内部结构如图2.4所示,其中COM引脚为公共端,用来控制数码管显示的打开或关闭,即起到“使能”作用。根据公共端接法的不同,数码管又分为共阴极和共阳极两种结构,分别如图2.4(b)和图2.4(c)所示。共阳极就是将8个LED的阳极连接到一起组成公共端COM,接正极,当相应字段为低电平“0”时,可以点亮该字段;当相应字段为高电平“1”时,该字段不亮。共阴极就是将8个LED的阴极连接到一起组成公共端COM,接负极,当相应字段为高电平“1”时,可以点亮该字段;当相应字段为低电平“0”时,该字段不亮。【项目实践】数码管实际上是由7个发光管组成“8”字形构成9图2.4数码管内部结构图【项目实践】图2.4数码管内部结构图【项目实践】10【活动二】硬件设计1.主控模块设计本项目采用ATMEL公司生产的AT89S52单片机,主控模块的具体设计参见项目1。2.数码管显示模块设计本项目中选用8段共阳极数码管,数码管的a、b、c、d、e、f、g、dp段分别与单片机P0口的P0.5、P0.3、P0.1、P0.0、P0.4、P0.6、P0.7、P0.2相连,用来控制显示数字的形状。数码管的公共使能端COM连接三极管C8550的集电极,三极管C8550主要用于信号的放大,以驱动数码管工作。三极管8550的基极通过限流电阻接到单片机P2口的P2.0,通过控制三极管C8550基极电平来打开或关闭数码管的显示,起到“使能作用”。三极管C8550的集电极接+5V电源。数码管显示模块与单片机的接口电路如图2.5所示。【项目实践】【活动二】硬件设计【项目实践】11图2.5数码管显示模块与单片机的接口电路原理图【项目实践】图2.5数码管显示模块与单片机的接口电路原理图【项目实践】121.算法设计对于数码管而言,要想显示数字或字母,首先应该选中该数码管,然后相应字段被点亮。例如:显示一个“3”字,那么应当是a亮、b亮、c亮、d亮、e不亮、f不亮、g亮、dp不亮。对于共阳极数码管,对应到单片机的P0口,P0.7为低电平“0”,P0.6为高电平“1”,P0.5为低电平“0”,P0.4为高电平“1”,P0.3为低电平“0”,P0.2为高电平“1”,P0.1为低电平“0”,P0.0为低电平“0”,即当把01010100(54H)送给P0口时,可以显示“3”字。其他数字的显示依此类推,那么可以列出数码管显示数字的段码表如表2.1所示。【项目实践】【项目实践】【活动三】软件设计【项目实践】【项目实践】【活动三】软件设计13

表2.1数码管显示数字的段码表段名称GFAEBDPCD对应段码对应引脚P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0数字01000010084H数字111110101F5H数字20100011046H数字30101010054H数字40010010135H数字5000111001CH数字6000011000CH数字711010101D5H数字80000010004H数字90001010014H【项目实践】表2.1数码管显示数字的段码表段名称14如表2.1所示,由于数码管显示的数字“0~9”的字型码“84H、0F5H、46H、54H、35H、1CH、0CH、0D5H、04H、14H”没有规律可循,只能采用查表的方式来完成我们所需的要求。在程序设计中可以设计一个变量,每隔一定时间在“0~9”之间变化,然后按照这个数据去查找段码表,把查到的数据送到P0口。所谓表格是指在程序中定义的一串有序的常数,如平方表、字形码表、键码表等。因为程序一般都是固化在程序存储器(通常是只读存储器ROM类型)中,因此可以说表格是预先定义在程序的数据区中,然后和程序一起固化在ROM中的一串常数。在程序设计中,有时需要预先把非线性数据以表格的形式存放在存储器中,然后使用程序读出,这种能读出数据表格的程序就称为查表程序。查表程序的关键是表格的定义和如何实现查表。表格的定义可以用伪指令DB来实现,查表的实现可以用指令MOVCA,@A+PC或者MOVCA,@A+DPTR来实现。【项目实践】如表2.1所示,由于数码管显示的数字“0~915按照数字0-9的顺序,把每个数字的字型编码按顺序排列好,再用伪指令DB建立表格,最后利用指令MOVCA,@A+PC或者MOVCA,@A+DPTR来实现查表。建立的表格的程序代码如下所示:TABLE:DB84H,0F5H,46H,54H,35H,1CH,0CH,0D5H,04H,14H2.数据结构设计单片机的P0口用于控制数码管所要显示的字形;P2口P2.0用于控制三极管8550是否导通,从而实现对数码管的片选;工作寄存器R1为数码管数据表索引寄存器;数据指针DPTR为数码管字型码的基址寄存器;工作寄存器R5、R6、R7为延时子程序的循环变量。【项目实践】按照数字0-9的顺序,把每个数字的字型编码按163.程序设计(1)主程序设计主程序主要完成硬件初始化、子程序调用等功能。①初始化设置数码管使能信号有效,即P2.0=0;将数码管数据表索引寄存器R1赋初值00H。②字符显示在查表时首先用MOVA,R1指令将存放在R1中的索引值送给累加器A,将数据表的表首地址TABLE送给数据指针DPTR,然后用查表指令MOVCA,@A+DPTR取出数码管显示数据,DPTR的值加上A的值即为所取数据的地址,将该地址中的数据送给A;接着把A的值送给用于控制数码管显示字形的P0口,即可在数码管上显示相应的数字。调用延时子程序是使数码管能够稳定显示相应的数字。最后数码管数据表索引寄存器R1加1,为下一个数字的显示做准备。【项目实践】3.程序设计【项目实践】17

③查表结束判断对数码管数据表索引寄存器R1的值进行判断是否为结束码0AH,应用比较转移指令CJNER1,#10,NEXT来判断数字0—9是否显示完。若未显示完则程序转移至标号NEXT的指令处执行,将存放在R1中的索引值送给累加器A,将数据表的表首地址TABLE送给数据指针DPTR,然后用查表指令MOVCA,@A+DPTR取出数码管显示数据,为下一个数字的显示做准备;若显示完则顺序执行,将跳转至主程序开始,重新将数码管数据表索引寄存器R1赋初值00H。从而实现数字0-9的循环显示。主程序设计流程图如图2.6所示。【项目实践】③查表结束判断主程序设计流程18设置数码管字型码变址寄存器初值R1=0开始调用延时子程序YR1=10?N根据R1的值查表查表获得的数据送P0R1+1→R1数码管使能信号有效,P2.0=0图2.6主程序设计流程图【项目实践】设置数码管字型码变址寄存器初值R1=0开始调用延19(2)延时子程序模块设计延时子程序模块设计请参考项目1。4.汇编语言源程序;****************************************************************;功能:主程序;****************************************************************

ORG0000HMOVP2,#0FEH;P2.0用于控制数码管的片选START:MOVR1,#00H;R1为数码管字型码的变址寄存器NEXT:MOVA,R1;把字型码的变址地址送给累加器AMOVDPTR,#TABLE;取得表首地址MOVCA,@A+DPTR;查表,取得显示的字型码MOVP0,A;P0用于数码管的字位口控制LCALLDELAY200ms;调用延时子程序INCR1;下一个字型码的变址寄存器CJNER1,#10,NEXT;判断0—9是否显示完毕LJMPSTART;循环显示【项目实践】(2)延时子程序模块设计4.汇编语言源20;****************************************************************;功能:延时子程序;****************************************************************DELAY200ms:MOVR5,#20LOOP1:MOVR6,#20LOOP2:MOVR7,#230DJNZR7,$DJNZR6,LOOP2DJNZR5,LOOP1RET【项目实践】;*****************************21;*******************************************************************;功能:;LED字段码表;********************************************************************;8字LED的连接方法;P0.7,P0.6,P0.5,P0.4,P0.3,P0.2,P0.1,P0.0;G,FAEBHCDTABLE:DB84H,0F5H,46H,54H,35H,1CH,0CH,0D5H,04H,14HEND【项目实践】【项目实践】225.C语言源程序#include<AT89X51.H>unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};unsignedchardispcount;voiddelay02s(void){unsignedchari,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}【项目实践】5.C语言源程序【项目实践】23voidmain(void){P2=0xfe;while(1){for(dispcount=0;dispcount<10;dispcount++){P0=table[dispcount];delay02s();}}}【项目实践】voidmain(void)【项目实践】24系统仿真调试过程参见项目1。【项目实践】【活动四】系统仿真调试【项目实践】【活动四】系统仿真调试25一、数码管基本知识显示器是最常用的输出设备。特别是发光二级管显示器(LED:LightEmittingDiode)和液晶显示器(LCD),由于结构简单、价格便宜、接口容易,得到广泛的应用,尤其在单片机系统中大量使用。本项目主要介绍发光二级管显示器(LED)与单片机的接口设计和相应的程序设计。液晶显示器(LCD)与单片机的接口设计请参见项目6。【相关知识】【相关知识】261.数码管的结构数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0~9、字符A~F、H、L、P、、U、符号“-”及小数点“.”。数码管的外形结构如图2.7(a)所示,数码管又分为共阴极和共阳极两种结构,分别如图2.7(b)和图2.7(c)所示。所谓共阴极,即是将所有LED的阴极连接到一起,而共阳极则相反,所有的阳极被连接到了一起。但不管哪种结构,其显示设计的原理基本相同,唯一的是其驱动的电路的设计有所差异,一般共阴极采用推(Push)电流的方式来驱动,而共阳极结构则采用拉(Pull)电流的方式来驱动。【相关知识】1.数码管的结构【相关知识】27图2.7数码管的外形结构图【相关知识】图2.7数码管的外形结构图【相282.数码管工作原理共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其他管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。3.数码管的字形编码

要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。对照图2.7,字型码各位定义为:数据线D0与a字段对应,D1与b字段对应……,依次类推。如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。如要显示“0”,共阳极数码管的字型编码应为11000000B(即C0H);共阴极数码管的字型编码应为00111111B(即3FH)。依次类推,可求得数码管字形编码见表2.2。【相关知识】2.数码管工作原理【相关知识】29表2.2数码管字型编码表【相关知识】

30【相关知识】【相关知识】314.LED数码管显示方式

根据LED显示的硬件设计方法的不同,LED显示驱动分为静态法和动态法两种方法。(1)LED的静态显示方式所谓静态显示驱动法,即是指每一个LED灯分别对应一个独立的I/O驱动口;其点亮和关闭由该I/O来对其进行控制,互不干扰。对于I/O驱动能力弱的MCU,必须增加外部的驱动芯片或驱动三极管等器件。LED显示器工作在静态方式时,其公共端应接到一个固定的电平(共阴极接低电平,共阳极接高电平)。如图2.8所示为两位共阳极LED数码管与单片机连接。【相关知识】4.LED数码管显示方式【相关知识】32

此种设计一般应用在对单个LED的驱动或LED数量较少,且所选的MCUI/O比较充裕的情况下。比如一些项目的LED指示灯、产品的设计中只有一个7-段LED码需要显示等。由于每一个LED均由独立的I/O口来控制,因此此种显示驱动的软件设计比较简单明了,无需特别的处理,在需要点亮和关闭时设置相应的I/O输出口的电平即可(即“0”或“1”,具体须根据驱动电路的设计来决定)。【相关知识】此种设计一般应用在对单个LED的驱动或LED数33图2.8LED静态显示电路【相关知识】图2.8LED静态显示电路【相关知识】34优点:电路设计简单,编程简单,而且LED的亮度控制容易,只需在驱动端增加相应的电流调节电阻即可方便地实现亮度的调节(对于存在独立驱动的设计,还可以通过调整驱动电压来达到亮度的调节)。缺点:由于每一个LED灯需要一个I/O口,因此对I/O口的需求较大,不易实现大数量的LED驱动和显示,扩展性能差。【相关知识】优点:电路设计简单,编程简单,而且LED的亮度35(2)LED的动态显示方式在LED的位数比较多时,采用静态显示方式,要占用大量的I/O,硬件电路比较复杂,为了简化电路,降低成本,可采用动态显示方式。所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于每一位显示器来说,每隔一段时间点亮一次。显示器的点亮既跟点亮时的导通电流有关,也跟点亮时间和间隔时间的比例有关。调整电流和时间的参数,可实现亮度较高较稳定的显示。若显示器的位数不大于8位,则控制显示器公共极电位只需一个I/O口(称为扫描口),控制各位显示器所显示的字形也需一个8位口(称为段数据口)。动态显示的硬件接法是将所有LED显示器的段选线并在一起,接到一个8位的I/O接口上,而位选线则分开接到各自的控制I/O线上。【相关知识】(2)LED的动态显示方式【相关知识】36各LED的段选线是并到一起的,如果不加控制,在送显示字模时各LED会显示同样的内容,为解决这一问题,应使LED在每一个时间段内只显示一位,在此期间只使一位LED的位选线有效,则在此期间内只有一位LED显示,而其他LED不显示,通过程序或硬件电路控制,各LED在一个显示周期内分别显示一段时间,当一个显示周期足够短时(小于100ms),由于人眼的视觉暂留特性,使人感觉每个LED总在亮。这种方式称动态扫描显示方式,完成这种功能可由软件也可由硬件完成。图2.9是用MCS-51单片机设计的一个5位共阴极LED动态显示电路。8位共阳极显示器和单片机的接口逻辑如图2.9所示。P0端口接动态数码管的字形码笔段(段数据口),P2端口接动态数码管的数位选择端(扫描口)。【相关知识】各LED的段选线是并到一起的,如果不加控制,在37

图2.9LED动态显示电路【相关知识】图2.9LED动态显示电路【相关38二、项目相关的指令1.定义字节指令伪指令DB指令格式:标号:DB字节常数表或ASCII码字符表功能:从指定的地址单元开始定义若干个字节的数值或ASCII码字符,各数据之间用逗号分隔,常用于定义一个数据表格存入程序存储器。在表示ASCII码字符时需要在字符上加单引号,标号表示数据表的首地址。【相关知识】二、项目相关的指令【相关知识】39

【例如】下面的DB指令从0100H单元开始定义了一个10个字节的数据表。

ORG0100HTAB:DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FHDB定义的数据表一行可以写多个数据,当一行写不下要分行时,在下一行也必须用DB伪指令开头。数据表首地址为0100H,那么标号TAB=0100H,定义了10个字节数据,(0100H)=3FH,(0101H)=06H,(0102H)=5BH,以此类推,(0109H)=6FH。

2.16位数据传送指令

MOVDPTR,#data16;DPTR←data16这是51单片机唯一的一条16位数据传送指令,其功能是将16位立即数送入数据指针DPTR。【相关知识】【例如】下面的DB指令从0100H单元开始定义了403.程序存储器传送指令

MOVCA,@A+PC;PC←PC+1,A←(A+PC)MOVCA,@A+DPTR;A←(A+DPTR)这两条指令都是一字节指令,并且都为变址寻址方式,其寻址范围为64KB。程序存储器传送指令的助记符是在MOV的后面加C,“C”是Code的第一个字母,是代码的意思。这两条指令用于访问程序存储器中的数据表格,因此可以把它们看成是查表专用指令

温馨提示

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

评论

0/150

提交评论