实验四 数码管显示控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四数码管显示控制
一、实验目的
1、熟悉Keil uVision2软件的使用;
2、掌握LED数码管显示接口技术;
3、理解单片机定时器、中断技术。
二、实验设备及仪器
Keil μVision2软件;单片机开发板;PC机一台
三、实验原理及内容
1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。
图4.1共阴四位八段LED数码管的原理图
图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。
实验开发板中LED数码管模块的电路原理图,如图4.2所示。
SP1
a~h
P0.4~P0.7
SP2
P0.0~P0.3
图4.2 LED数码管模块电路原理图
图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。
训练内容一:轮流点亮数码管来检测数码管是否正常。参考程序:
ORG 00H
AJMP MAIN
MAIN:
SETB P1.2;LED流水灯模块锁存器的控制位
MOV P0,#0FFH;关闭LED灯
CLR P1.2
SETB P1.3 ;点阵模块的行控制锁存器
MOV P0,#0 ;关闭点阵行
CLR P1.3
MOV A,#11111110B;数码管“位选信号”初值,低电平有效
LOOP:SETB P1.1;数码管位控制锁存器有效
MOV P0,A
CLR P1.1
RL A ;形成新的“位选信号”,为选择下一位数码管做准备
SETB P1.0;数码管段控制锁存器有效
MOV P0,#0FFH ;数码管的所有段点亮,显示“8”
CLR P1.0
CALL DELAY
SJMP LOOP
DELAY:MOV R5,#0;延时子程序
D1: MOV R6,#0
D2:NOP
DJNZ R6,D2
DJNZ R5,D1
RET
END
训练内容二:静态显示,0~9计数。参考程序:ORG 00H
AJMP MAIN
MAIN:SETB P1.2
MOV P0,#0FFH;关闭LED灯
CLR P1.2
SETB P1.3
MOV P0,#0 ;关闭点阵行
CLR P1.3
MOV A,#11111110B
SETB P1.1
MOV P0,A ;数码管"位选"
CLR P1.1
MOV DPTR,#TABLE;初始化表首地址
LOOP:MOV R0,#0;显示数字从0开始
MOV R1,#10;显示数字个数
NEXT:MOV A,R0
MOVC A,@A+DPTR;查表,获取显示字型码
SETB P1.0;数码管段控制锁存器有效
MOV P0,A ;显示
CLR P1.0
INC R0 ;下一个数字
ACALL DELAY
DJNZ R1,NEXT
SJMP LOOP
DELAY:MOV R5,#0
D1: MOV R6,#0
D2: NOP
NOP
DJNZ R6,D2
DJNZ R5,D1
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴字码表0~9 END
训练内容三:动态显示,00~99计数。
动态显示:也称扫描显示,是一种按位轮流点亮各位数码管的显示方式,即在某个时刻,只让其中某一个数码管“位选端”有效,并送出相应的字型显示码,此时,其他的数码管因“位选端”无效而处于熄灭状态。下一时刻,按顺序选通另一个数码管,并送出相应的字型显示码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。由于人眼的“视觉驻留效应”,只要能保证每个数码管显示间断的时间间隔小于眼睛的驻留时间,就可以给人一种连续显示的视觉效果。
在显示位数较多时,动态显示方式可节省I/O接口资源,硬件电路与静态显示方式简单,但其显示亮度低于静态显示方式;由于CPU要不断地依次扫描显示程序,将占用CPU更多的时间,若显示位数较少,采用静态显示方式更加简便。参考程序:
ORG 00H
AJMP MAIN
MAIN:SETB P1.2;LED流水灯模块锁存器的控制位
MOV P0,#0FFH;关闭LED灯
CLR P1.2
SETB P1.3 ;点阵模块的行控制锁存器
MOV P0,#0 ;关闭点阵行
CLR P1.3
MOV DPTR,#TABLE;初始化表首地址
START:MOV R0,#0 ;显示数据的初值,从数字0开始显示
NEXT:MOV A,R0
MOV B,#10
DIV AB ;分解将要显示的数据,分为十位、个位
MOV R2,A ;十位送R2
MOV R3,B ;个位送R3
MOV R1,#100 ;每个数字显示的次数,100次,即更长延时
LOOP_VIEW:MOV A,R2
MOVC A,@A+DPTR;获取十位的显示码
SETB P1.0
MOV P0,A;显示十位
CLR P1.0
SETB P1.1
MOV P0,#11111110B;位选,选中显示十位的数码管
CLR P1.1
ACALL DELAY
MOV A,R3
MOVC A,@A+DPTR;获取个位的显示码
SETB P1.0
MOV P0,A;显示个位
CLR P1.0