一.静态显示数码管
代码:
注意:使用的单片机具有段选(P2.6)和位选(P2.7)
应用代码时请结合实际使用单片机自行修改或接线!!!
ORG 0000H
AJMP MAIN
ORG 0100H
DULA BIT P2.6
WELA BIT P2.7
MAIN:
SETB WELA ;打开位选
MOV P0,#0FEH ;选择数码管第一位
CLR WELA ;关闭位选
SETB DULA ;打开段选
MOV P0,#3FH ;数码管显示0
CLR DULA ;关闭段选
END
二.动态显示数码管
使用延时动态显示(非常简单的重复)
代码:
******************************************************************************
* 文件名:延时动态显示数码管01234567
* 描 述:
* 作 者:思索与猫
* 日 期: 19/6/26
* 备 注:
*
******************************************************************************
ORG 0000H
AJMP MAIN
ORG 0100H
DULA BIT P2.6
WELA BIT P2.7
MAIN:
SETB WELA ;显示0
MOV P0,#0FEH
CLR WELA
SETB DULA
MOV P0,#03FH
CLR DULA
ACALL DELAY2MS ;延时2ms
SETB WELA ;显示1
MOV P0,#0FDH
CLR WELA
SETB DULA
MOV P0,#006H
CLR DULA
ACALL DELAY2MS ;延时2ms
SETB WELA ;显示2
MOV P0,#0FBH
CLR WELA
SETB DULA
MOV P0,#05BH
CLR DULA
ACALL DELAY2MS ;延时2ms
SETB WELA ;显示3
MOV P0,#0F7H
CLR WELA
SETB DULA
MOV P0,#04FH
CLR DULA
ACALL DELAY2MS ;延时2ms
SETB WELA ;显示4
MOV P0,#0EFH
CLR WELA
SETB DULA
MOV P0,#066H
CLR DULA
ACALL DELAY2MS ;延时2ms
SETB WELA ;显示5
MOV P0,#0DFH
CLR WELA
SETB DULA
MOV P0,#06DH
CLR DULA
ACALL DELAY2MS ;延时2ms
SETB WELA ;显示6
MOV P0,#0BFH
CLR WELA
SETB DULA
MOV P0,#07DH
CLR DULA
ACALL DELAY2MS ;延时2ms
SETB WELA ;显示7
MOV P0,#07FH
CLR WELA
SETB DULA
MOV P0,#007H
CLR DULA
ACALL DELAY2MS ;延时2ms
DELAY2MS: ;@11.0592MHz
NOP
PUSH 30H
PUSH 31H
MOV 30H,#4
MOV 31H,#141
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
END
定时器动态显示
代码:
******************************************************************************
* 文件名:定时器动态显示数码管01234567
* 描 述:
* 作 者:思索与猫
* 日 期: 19/6/26
* 备 注:
*
******************************************************************************
ORG 0000H
AJMP MAIN
ORG 000BH ;定时器0中断地址
AJMP TIMER0
ORG 0100H
DULA BIT P2.6
WELA BIT P2.7
DISPLAY:DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH ;段码0~9,可根据要求修改
DISPCOM:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH ;位码
MAIN:
ACALL TIMER0INIT
MOV R7,#0
LOOP:
AJMP LOOP
TIMER0INIT: ;2ms@11.0592MHz
MOV TMOD,#001H
MOV TL0,#0CDH
MOV TH0,#0F8H
CLR TF0
SETB TR0
SETB ET0
SETB EA
RET
TIMER0:
MOV TL0,#0CDH
MOV TH0,#0F8H
SETB WELA ;位选
MOV DPTR,#DISPCOM ;利用查表设置位
MOV A,R7
MOVC A,@A+DPTR
MOV P0,A
CLR WELA
SETB DULA ;段选
MOV DPTR,#DISPLAY ;利用查表设置段
MOV A,R7
MOVC A,@A+DPTR
MOV P0,A
CLR DULA
INC R7
CJNE R7,#8,RE ;R7自加到8归零
MOV R7,#0
RE:RETI
END
数码管自加
代码:
******************************************************************************
* 文件名:第一个数码管从0加到9
* 描 述:
* 作 者:思索与猫
* 日 期: 19/6/26
* 备 注:
*
******************************************************************************
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER0
ORG 0100H
DULA BIT P2.6
WELA BIT P2.7
DISPLAY:DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
DISPCOM:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
MAIN:
ACALL TIMER0INIT
MOV R7,#0
MOV R6,#250 ;250*2=500ms
LOOP:
AJMP LOOP
TIMER0INIT: ;2ms@11.0592MHz
MOV TMOD,#001H
MOV TL0,#0CDH
MOV TH0,#0F8H
CLR TF0
SETB TR0
SETB ET0
SETB EA
RET
TIMER0:
MOV TL0,#0CDH
MOV TH0,#0F8H
DJNZ R6,RE
MOV R6,#250
SETB WELA ;位选选择第一个数码管
MOV P0,#0FEH
CLR WELA
SETB DULA ;段选
MOV DPTR,#DISPLAY ;利用查表选择段
MOV A,R7
MOVC A,@A+DPTR
MOV P0,A
CLR DULA
INC R7
CJNE R7,#10,RE ;自加到10清0
MOV R7,#0
RE:RETI
END