51单片机数码管显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;该程序库为4位显示,可以设置3个小数点的位置,数据在R2中,LED_DATA EQU P0 ;数码管数据口定义
SHOW1 EQU 30H ;个位
SHOW2 EQU 31H ;十位
SHOW3 EQU 32H ;百位
SHOW4 EQU 33H ;千位
SHOW5 EQU 34H ;万位
XSDW EQU 50H ;小数点位数
ORG 0000H
AJMP LOOP
ORG 0030H
LOOP: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
MOV SP,#60H
MOV XSDW,#00H
LOOP0: CALL CONVT
CALL PLAY
JB P3.7,LOOP0
CALL DELAY2MS
CALL DELAY2MS
CALL DELAY2MS
CALL DELAY2MS
CALL DELAY2MS
CALL DELAY2MS
CALL DELAY2MS
JB P3.7,LOOP0
JNB P3.7, LOOP1
NOP
LOOP1: CALL PLAY
JNB P3.7, LOOP1
MOV A,XSDW
CJNE A,#3,LOOP2
MOV XSDW,#00H
AJMP LOOP0
LOOP2: INC XSDW
AJMP LOOP0
;---------------------------------------------------------
;代码变换(HEX TO BCD)
;---------------------------------------------------------
CONVT: CLR EA
MOV 41H,#00H
MOV R4,40H ;待转换低位
MOV R3,41H ;待转换高位HEX2BCD: CLR A
MOV R5,A
MOV R6,A
MOV R7,A
MOV R2,#16 ;转换16位H2B: CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
DJNZ R2,H2B
MOV A,R7
MOV B,#16
DIV AB
MOV R4,A
MOV R4,A
MOV R3,B
MOV A,R5
MOV R7,A
MOV A,R6
MOV B,#16
DIV AB
MOV R6,A
MOV R5,B
MOV SHOW5,R7 ;万位
MOV SHOW4,R6
MOV SHOW2,R4
MOV SHOW1,R3 ;个位
H2B0: SETB EA
RET
;-----------------------------------------------------
;显示子程序
;---------------------------------------------
PLAY: PUSH ACC
MOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示
CJNE A,#3, PLAY0
AJMP PLAY5
PLAY0: NOP
MOV A,SHOW4 ;取千位
JNZ PLAY5 ;等于0吗
MOV SHOW4,#0AH ;等于0送数据0A,即不显示
MOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示
CJNE A,#2, PLAY1
AJMP PLAY5
PLAY1: NOP
MOV A,SHOW3 ;取百位
JNZ PLAY5
MOV SHOW3,#0AH
MOV A,XSDW ;小数点的位数是3则直接跳转到显示,即千位是0也要显示
CJNE A,#1, PLAY2
AJMP PLAY5
PLAY2: NOP
MOV A,SHOW2 ;取十位
JNZ PLAY5
MOV SHOW2,#0AH
PLAY5: MOV R1,XSDW ;小数点的位数送R2
MOV A,SHOW4 ;获得当前位地址
MOV DPTR,#TAB_NU ;获得表头
MOVC A,@A+DPTR ;查表获得显示数据
MOV LED_DATA,A ;显示数据
CJNE R1,#3, PLAY6 ;小数点的位数送R2,如果是3就点亮3位的小数点
CLR P0.7
PLAY6: NOP ;不是则不点亮
CLR P2.4
LCALL DELAY2MS ;延时2 MS
SETB P2.4