下面是两个汇编程序.一个是数码管显示程序,一分钟+1;另一个是延时程序.
可不可以将两个程序合并,但是两个程序互不影响.
怎么合并,请详细说说
请指教.不胜感激....
;本程序实现8段码动态显示功能
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,#143 ;r4作为软件计数器
tt2: lcall display
jb p3.0,tt
ajmp tt1
tt: lcall delay1ms
jb p3.0,tt2
tt1: lcall display ;调用显示程序
djnz r4,tt1 ;r4减一后不为零,返回tt1
lcall update ;调用刷新显示子程序
ajmp loop ;跳回loop,继续循环显示.
display:
mov dptr,#tab
mov r7,#100 ;软件计数器赋值
dd1:
mov a,30h ;将显示缓冲区30H中的值送入ACC
movc a,@a+dptr
mov p0,a ;将要显示的数送入P0口
clr p2.4 ;选中第一个数码管
lcall delay1ms ;延时1mS
setb p2.4 ;关个位显示单元
mov a,31h ;将显示缓冲区别31H中的值送入A
movc a,@a+dptr
mov p0,a ;将要显示的数送入P0口
clr p2.5 ;开十位显示单元
lcall delay1ms ;延时1mS
setb p2.5 ;关十位显示单元
mov a,32h ;将显示缓冲区32H中的值送入ACC
movc a,@a+dptr
mov p0,a ;将要显示的数送入P0口
clr p2.6 ;开百位显示单元
lcall delay1ms ;延时1mS
setb p2.6 ;关百位显示单元
mov a,33h ;将显示缓冲区33H中的值送入ACC
movc a,@a+dptr
mov p0,a ;将要显示的数送入P0口
clr p2.7 ;开千位显示单元
lcall delay1ms ;延时1mS
setb p2.7 ;关千位显示单元
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 ;刷新显示子程序返回
delay1ms:
mov r6,#10
tt7:
mov r5,#50
djnz r5,$
djnz r6,tt7
ret
delay10ms:
mov r6,#100
tt8:
mov r5,#50
djnz r5,$
djnz r6,tt8
ret
tab:
db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
end
延时控制程序:
ORG 0000H
JMP MAIN
MAIN: CLR P1.0
JB P3.0, $ ;P3.0为高电平停止
CALL DELAY_2MS
JB P3.0, main
SETB P1.0
CALL DELAY_2MS
CLR P1.0
CALL DELAY_6S
JMP MAIN
delay_2ms:
mov r6,#20
tt7:
mov r5,#50
djnz r5,$
djnz r6,tt7
ret
delay_6s: ;6,018,356uS
mov r6,#118
tt6:
mov r5,#255
djnz r5,$
djnz r6,tt6
ret
END