多位数码管计数器程序实现
大小:0.1 MB 人气: 2017-09-06 需要积分:0
1、2位数码管计数器
A_BIT EQU 20H ;个位数存放处B_BIT EQU 21H ;十位数存放处
TEMP EQU 22H ;计数器寄存处
STAR: MOV TEMP,#0 ;初始化计数器
STLOP: ACALL DISPLAY ;
INC TEMP
MOV A,TEMP
CJNE A,#100,NEXT ;等于100重来
MOV TEMP,#0
NEXT: LJMP STLOP
;显示子程序
DISPLAY: MOV A,TEMP
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
MOV DPTR,#NUMTAB
MOV R0,#4
DPL1: MOV R1,#5
DPLOP: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
ACALL D1MS
SETB P2.7
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
ACALL D1MS
SETB P2.6
DJNZ R1,DPLOP
DJNZ R0,DPL1
RET
D1MS:
MOV R7,#50
D1: MOV R6,#20
D2: DJNZ R6,$
DJNZ R7,D1
RET
NUMTAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;013456789字形码
END
2、4位数码管计数器经典例程
;本程序实现七段码动态显示功能;///////////////////////////////////////////
org 0000h
ajmp main
org 0030h
main:
mov dptr,#tab ;将表头位置送入DPTR
mov 30h,#00h ;将30H个位显示缓冲单元清零
mov 31h,#00h ;将31H十位显示缓冲单元清零
mov 32h,#00h ;将32H百位显示缓冲单元清零
mov 33h,#00h ;将33H千位显示缓冲单元清零
loop:
mov r4,#5 ;r4作为软件计数器
tt1:
lcall display ;调用显示程序
djnz r4,tt1 ;r4减一后不为零,返回tt1
lcall update ;调用刷新显示子程序
ajmp loop ;跳回loop,继续循环显示.
display: mov p2,#0ffh ;将P2口置高电平
mov r7,#100 ;软件计数器赋值
dd1:
mov a,30h ;将显示缓冲区30H中的值送入ACC
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.3 ;开个位显示单元
lcall delay100us ;延时100US
setb p2.3 ;关个位显示单
mov a,31h ;将显示缓冲区别31H中的值送入A
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.2 ;开十位显示单元
lcall delay100us ;延时100US
setb p2.2 ;关十位显示单元
mov a,32h ;将显示缓冲区32H中的值送入ACC
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.1 ;开百位显示单元
lcall delay100us ;延时100US
setb p2.1 ;关百位显示单元
mov a,33h ;将显示缓冲区33H中的值送入ACC
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口
clr p2.0 ;开千位显示单元
lcall delay100us ;延时100US
setb p2.0 ;关千位显示单元
djnz r7,dd1 ;R7不等于0返回至DD1处
ret ;R7等于0子程序返回
update: ;刷新显示子程序
inc 30h ;个位显示缓冲单元加一
mov a,30h
cjne a,#10,exit ;还没加到十,退出
mov 30h,#00h ;加到十了,个位清零
inc 31h ;十位显示缓冲单元加一
mov a,31h
cjne a,#10,exit ;还没加到十,退出
mov 31h,#00h ;加到十了,十位清零
inc 32h ;百位显示缓冲单元加一
mov a,32h
cjne a,#10,exit ;还没加到十,退出
mov 32h,#00h ;加到十了,百位清零
inc 33h ;千位显示缓冲单元加一
mov a,33h
cjne a,#10,exit ;还没加到十,退出
mov 33h,#00h ;加到十了,千位清零
exit:
ret ;刷新显示子程序返回
delay100us:
mov r5,#50
djnz r5,$
ret
delay10ms:
mov r6,#100
tt2:
mov r5,#50
djnz r5,$
djnz r6,tt2
ret
tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh
end
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%