《数码管动态显示模块设计.docx》由会员分享,可在线阅读,更多相关《数码管动态显示模块设计.docx(8页珍藏版)》请在第壹文秘上搜索。
1、数码管动态显示模块设计实验目的1、理解数码管动态显示原理2、理解数码管动态显示电路的设计方法3、掌握数码管动态显示程序的设计方法4、掌握单片机定时器与中断系统的使用方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、数码管动态显示原理几乎所有的单片机应用系统都要用到数码显示。数码显示是一个占用IO资源较多、程序设计较复杂的模块。在设计时,应从IO占用与软件复杂程度两方面考虑。这里以8位数码管动态显示电路以例数码管显示器的8个笔划段a-hp同名端连在一起,而每一位数码管显示器的公共端(1,2,3,4)各自独立地受三极管控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形
2、码,但究竟是那个显示器亮,那么取决于数码管的公共端,而这一端是由74LS164控制的,所以我们只要控制164的输出数据就可以决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的公共端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。图中100欧电阻起限流作用,保护发光二极管。电阻值越小,发光二极管越亮。2K电阻是位选端限流电阻,保护位选三极管。由上图可知,这里的数码管是共阳
3、极型。数码管上显示些符号,必须给数码管的笔形口接低电平信号,给要显示的位公共端送高电平,相应位的数码管就可以显示所要的符号。2、数码管动态显示程序设计数码管动态显示程序包含显示数字、局部字母符号、小数点、数码管闪烁、数码管消隐等。其它程序输出到显示程序的数据既可以是BCD码、二进制码、ASCn码、自定义显示码等。假设显示的符号与数据的对应关系如下:显示符号0123456789数据OOHOlH02H03H04H05H06H07H08H09H显示符号ABCDEFH全亮全暗-数据OAHOBHOCHODHOEHOFHIOHHH12H13H由硬件电路工作原理可知,为了显示稳定的数据,每秒必须显示数据50
4、次以上,才能到达预期目的。首先设计一个能显示一位数的程序,然后重夏执行这段程序,并改变所显示的内容。由上一实验内容可知,可把位选数据的输出用两种方法实现:据每显示一位送一字节;位选数据每显示一位二进制数。程序流程图如4-5所示。位选数送一位图4-5数码管动态显示程序流程图3、小数点显示原理在显示数据时,显示小数是一个必要功能。但在前面的分析中,并没有包含显示小数点的内容。小数点的显示方式有:(1)固定式:小数点的显示位置不能改变,程序设计较简单。(2)特征位式:每位二进制数控制一个小数点的亮暗情况,一个字节同时控制8个。(3)计数式:用数字控制第N位的小数点亮。如I:5表示第5位小数点亮,其它
5、喑。(4)ASCn码式:送到显示缓冲区的数是ASCIl码数据,在包含”.”时,相应位的小数点亮。这里以第(2)种为例说明,其它方式由读者自行设计。假定4、数点控制数据dispdot的各位情况如下所示。D7D6D5D4D3D2DlDO第1位小第2位小第3位小第4位小第5位小第6位小第7位小第8位小数点开关数点开关数点开关数点开关数点开关数点开关数点开关数点开关当对应位为1时,小数点亮;当对应位为O时,小数点暗。小数点显示的信息可以在显示码输出之前,也可以在扫描一帧结束后单独显示小点数。原理说明:当显示第一位数据时,判断dispdot的D7是否为1,如果为1点亮第一位小数点,为0熄灭第一位小数点。
6、流程图如图4-6所示。图4-6小数点控制程4、单片机定时器的工原理序流程图MCS-51单片机内部有两个16位可编程的定时器/计数器TO和TL它们即可用作定时器方式,又可用作计数器方式。其中TO由THO和TLO计数器构成;Tl由THl和TLl计数器构成。工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。故系统晶振频率直接影响定时时间。如果晶振频率为12MHZ,那么定时器每隔(112MHZ)12=lus加1。工作于计数器方式时,对P3.4或P3.5管脚的负跳变(IfO)计数。它在每个机器周期的S5P2时采样外部输入,当采样值在这个
7、机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。特殊功能存放器TMOD用于定时器/计数器的方式控制。高4位用于设置Tl,低4位用于设置TO。如图4-7所示。D7D6D5D4D3D2DlDOTMODGATE I C/T MlI MOGATE I CT I Ml I MOi TI方式控制.TO方式控制、图4-7定时器模式控制字格式TCON存放器用于定时器的计数控制和中断标志。如图4-8所示。D7D6D5D4D3D2DlDOTFlTRlTFOTROIElIllIEOITOY用于外部中断图4-8定时控制存放器数据格式编写程序
8、控制这两个存放器就可以控制定时器的运行方式。单片机内部定时器/计数器的使用,简而概之:(1)如需用中断,那么将EA和相关中断控制位置1;(2)根据需要设置工作方式,即对TMoD设置;(3)然后启动计数,即对TRO或TRl置1。(4)如使用中断,那么计数溢出后硬件会自动转入中断入口地址;如使用查询,那么必须对溢出中断标志位TFO或TFl进行判断。5、用定时器编写一个秒计时器假设系统使用的晶振频率为12MHz,即每个机器周期为lus。如使用方式1,那么定时时间最长是2脩XIUS=65536us=65.536ms,小于1s。故必须设置,个软件计数单元,即假设定时器定时中断时间为50ms,那么必须定时
9、中断20次才到达IS并对秒计时单元加1,20即为软件计数次数。最后再把秒计时单元的值转成显示数码送显示缓冲区。图49定时器应用程序流程图6、单片机中断系统结构及工作原理标准51单片机的中断系统有五个中断源。分别为:中断源外部中断0 定时器0溢出外部中断1 定时器1溢出 串行口中断 使用中断之前,入口地址 0003H OOOBH 0013H OOlBHOO23H优先级别(同级)最高最低必须对中断允许存放器IE进行设置,将中断允许标志EA和对应中断位置1,以CPU中断的过程为:当有中断源发生中断信号时,首先对IE中对应的中断位判断;如翻开,那么进行EA判断;如EA=I,将根据中断优先级IP的设置情
10、况进行优先级判别;如该中断优先级较高,在硬件控制下,先将程序计数器PC的内容压入堆栈,同时把被响应的中断效劳程序的入口地址装入PC中,以执行中断效劳程序。中断效劳程序的最后一条指令必须是中断返回指令RETLCPU执行完这条指令后,将从堆栈中弹出两个字节内容(断点地址)装入PC中,从而执行被中断的程序。实验内容1、在数码管上显示学号的后8位程序如下include*动态数码管显示,共阳极*/#defineuintunsignedint#defineucharunsignedchar#includesbitCLK=P34;sbitDIN=P23;uinti;ucharcodeduan=0x03,0x
11、9f,0x25,OxOd,0x99,0x49,0x41,Oxlf,0x01,0x09;/小数点不亮,段码0-9voiddelay(uintxms)(uinti,j;for(i=xms;i0;i)for(j=110;j0;-j);)voidmach()DIN=1;CLK=0;-11P-();CLK=I;_nop_();)voidmain()(while(l)(for(i=0;i2、设计一个以学号后两位加10秒的倒计时程序程序如下#include#include#defineucharunsignedchar#defineuintunsignedintucharcodenumber=0x03,0x
12、9f,0x25,OxOd,0x99,0x49,0x41,0x1f,OxO1,0x09;uchara8;uintcounter=0;sbitCLK=P34;sbitDIN=P23;voidDelay(uchart)(uchari;while(t-)for(i=120;i0;i);voidrefresh_led()(staticucharj=0;switch(j)(case0:DIN=0;CLK=0;_nop_();CLK=l;_nop_();CLK=0;j+;P0=numbera0;Delay(2);/break;case1:DIN=I;CLK=0;_nop_();CLK=l;_nop_();C
13、LK=O;j+;PO=numbera1;Delay(2);/break;case2:DIN=I;CLK=0;_nop_();CLK=l;_nop_();CLK=0;j+;P0=numbera2;Delay(2);/break;case3:DIN=I;CLK=0;_nop_();CLK=l;_nop_();CLK=0;j+;P0=numbera3;Delay(2);/break;case4:DIN=I;CLK=0;_nop_();CLK=l;_nop_();CLK=0;j+;P0=numbera4;Delay(2);/break;case5:DIN=I;CLK=0;_nop_();CLK=l;_nop_();CLK=0;j+;P0=numbera5;Delay(2);/break;case6:DIN=I;CLK=0;_nop_();CLK=l;_nop_();CLK=0;j+;P0=number