当前位置:文档之家› 实验四 数码管显示控制

实验四 数码管显示控制

实验四数码管显示控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握LED数码管显示接口技术;3、理解单片机定时器、中断技术。

二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。

图4.1共阴四位八段LED数码管的原理图图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。

实验开发板中LED数码管模块的电路原理图,如图4.2所示。

SP1a~hP0.4~P0.7SP2P0.0~P0.3图4.2 LED数码管模块电路原理图图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。

当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。

训练内容一:轮流点亮数码管来检测数码管是否正常。

参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110B;数码管“位选信号”初值,低电平有效LOOP:SETB P1.1;数码管位控制锁存器有效MOV P0,ACLR P1.1RL A ;形成新的“位选信号”,为选择下一位数码管做准备SETB P1.0;数码管段控制锁存器有效MOV P0,#0FFH ;数码管的所有段点亮,显示“8”CLR P1.0CALL DELAYSJMP LOOPDELAY:MOV R5,#0;延时子程序D1: MOV R6,#0D2:NOPDJNZ R6,D2DJNZ R5,D1RETEND训练内容二:静态显示,0~9计数。

参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110BSETB P1.1MOV P0,A ;数码管"位选"CLR P1.1MOV DPTR,#TABLE;初始化表首地址LOOP:MOV R0,#0;显示数字从0开始MOV R1,#10;显示数字个数NEXT:MOV A,R0MOVC A,@A+DPTR;查表,获取显示字型码SETB P1.0;数码管段控制锁存器有效MOV P0,A ;显示CLR P1.0INC R0 ;下一个数字ACALL DELAYDJNZ R1,NEXTSJMP LOOPDELAY:MOV R5,#0D1: MOV R6,#0D2: NOPNOPDJNZ R6,D2DJNZ R5,D1RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴字码表0~9 END训练内容三:动态显示,00~99计数。

动态显示:也称扫描显示,是一种按位轮流点亮各位数码管的显示方式,即在某个时刻,只让其中某一个数码管“位选端”有效,并送出相应的字型显示码,此时,其他的数码管因“位选端”无效而处于熄灭状态。

下一时刻,按顺序选通另一个数码管,并送出相应的字型显示码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。

由于人眼的“视觉驻留效应”,只要能保证每个数码管显示间断的时间间隔小于眼睛的驻留时间,就可以给人一种连续显示的视觉效果。

在显示位数较多时,动态显示方式可节省I/O接口资源,硬件电路与静态显示方式简单,但其显示亮度低于静态显示方式;由于CPU要不断地依次扫描显示程序,将占用CPU更多的时间,若显示位数较少,采用静态显示方式更加简便。

参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV DPTR,#TABLE;初始化表首地址START:MOV R0,#0 ;显示数据的初值,从数字0开始显示NEXT:MOV A,R0MOV B,#10DIV AB ;分解将要显示的数据,分为十位、个位MOV R2,A ;十位送R2MOV R3,B ;个位送R3MOV R1,#100 ;每个数字显示的次数,100次,即更长延时LOOP_VIEW:MOV A,R2MOVC A,@A+DPTR;获取十位的显示码SETB P1.0MOV P0,A;显示十位CLR P1.0SETB P1.1MOV P0,#11111110B;位选,选中显示十位的数码管CLR P1.1ACALL DELAYMOV A,R3MOVC A,@A+DPTR;获取个位的显示码SETB P1.0MOV P0,A;显示个位CLR P1.0SETB P1.1MOV P0,#11111101B;位选,选中显示个位的数码管CLR P1.1ACALL DELAYDJNZ R1,LOOP_VIEW;每个数字循环显示R1次,即延时INC R0;下一个数字CJNE R0, #100, NEXT ;若小于100,继续计数和显示;若大于100,则从0开始重新计数SJMP STARTDELAY:MOV R6,#25;延时子程序1msD1: MOV R7,#20D2: DJNZ R7,D2DJNZ R6,D1RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴字码表0~9 END训练内容四:利用定时器中断实现60秒计时,具有启动按键和清0按键。

说明:利用定时器T0产生50ms的延时,即每50ms中断一次,计满20次(20×50ms=1s),秒计数单元加1。

4位独立按键电路原理图,如图4.3所示。

4位独立按键使用了P2.4、P2.5、P2.6、P2.7四位I/O口,当键按下时,为低电平,因此,可以通过检测低电平来检测按键是否按下。

本实验中,选用s6为启动按键,s11为暂停按键,A18为清0按键,采用查询法检测按键状态。

在按下暂停按键或清0按键后,需重新按下启动按键,才能继续计时。

图4.3 四位独立按键流程图如图4.4、4,5、4.6所示。

关闭流水灯、点阵模块;初始化:定时器T0、中断DPTR ←表首地址T0中断次数20→R0显示初值0→R1启动定时器T0调用数码管显示子程序暂停定时器T0启动按键?开始NNY暂停按键?Y暂停定时器T0T0中断次数20→R0显示初值0→R1N清0按键?Y图4.4 主程序流程图图4.5 数码管扫描显示程序图4.6 T0中断服务子程序参考程序:ORG 00HJMP MAINORG 0BHJMP TIM0MAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV TMOD,#01H ;定时器T0工作在方式2MOV TH0,#HIGH(15536)MOV TL0,#LOW(15536) ;初值50msMOV IE,#82H ;开中断MOV DPTR,#TABLE;表首地址MOV R0,#20 ;存放定时器中断的循环次数MOV R1,#0 ;显示初值,从0开始显示START: JB P2.4,IF_STOP ;启动按键s6,启动定时器T0 SETB TR0 ;启动定时器T0IF_STOP: JB P2.5,IF_CLR;暂停按钮S11CLR TR0IF_CLR:JB P2.6,LED_SCAN;清0按钮s18CLR TR0MOV R0,#20MOV R1,#0LED_SCAN:ACALL SCAN ;调用显示子程序SJMP STARTSCAN: ;;;扫描显示子程序CJNE R1,#60,LED_VIEW ;到60则清零MOV R1,#0LED_VIEW:MOV A,R1 ;分解数字MOV B,#10DIV ABMOV 20H,B ; 个位MOV 21H,A ; 十位MOV R2,#11111110B;位选信号的初值MOV R3,#2 ;数码管显示2位数MOV A,21H ;个位,准备显示DISP: ;;;分别显示十位、个位MOVC A,@A+DPTRSETB P1.0MOV P0,A ;显示字型码CLR P1.0SETB P1.1MOV P0,R2 ;输出位选信号CLR P1.1MOV A,R2;形成下一个位选信号RL AMOV R2,ACALL DELAY;扫描延时MOV A,20H;十位,准备显示DJNZ R3,DISPRETTIM0: ;;;定时器T0中断子程序PUSH ACC ;现场保护MOV TH0,#HIGH(15536);重新装载初值TH0、TL0MOV TL0,#LOW(15536)DJNZ R0,EXIT ;判断是否到1SMOV R0,#20 ;若到1s,重置中断次数INC R1 ;秒单元加1EXIT:POP ACC ;恢复现场RETIDELAY:MOV R6,#4 ;扫描延时2ms,太小会重影,太大会闪烁D3: MOV R7,#248DJNZ R7,$DJNZ R6,D3RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;共阴字码表END。

相关主题