jmp LED mov p3,#00h
ljmp loop ;返回LOOP处不断的循环 LED: MOV TMOD,#00000001B MOV TH0,#10000 MOV TL0,#10000 SETB TR0
MOV IE,#10000010B ; MOV R5,#10
MOV P3,#01H jmp loop TIM0: PUSH ACC PUSH PSW MOV TH0,#10000 MOV TL0,#10000 DJNZ R5,LOOP1 MOV R5,#10 MOV A,P3 RL A MOV P3,A LOOP1: POP PSW POP ACC
10
RETI
kk1: inc 39h ;将39H向上加一 mov a,39h ;将39H中的值送入ACC
cjne a,#10,kk2 ;ACC中的值与10相等则跳转至KK2 mov 39h,#00h ;若ACC等于零则将35H清零 cpl 00h ;将00H位取反 ajmp kk2 ;跳转至KK2处 norp: mov 37h,36h mov 36h,35h mov 35h,34h mov 34h,33h
mov 33h,32h ;将32H显示单元的内容送入33H mov 32h,31h ;将31H显示单元的内容送入32H mov 31h,30h ;将30H单元的内容送入31H mov a,38h ;将键值送入ACC mov 30h,a ;将ACC的值送入30H ljmp loop ;返回主程序循环 display: mov p2,#0ffh ;将P2口置高电平 mov r7,#100 ;软件计数器赋值 dd1: jnb 00h,dd1d ;若00H等0跳至DD1D ajmp dd1b ;若00H等于1则跳转至DD1B dd1d:
11
mov a,30h ;将显示缓冲区30H中的值送入ACC movc a,@a+dptr;查表取要显示的数并把查表的结果送入ACC mov p0,a ;将要显示的数送入P0口
clr p2.7 ;开个位显示单元 lcall delay100us ;延时100US setb p2.7 ;关个位显示单
ajmp dd1c dd1b: mov a,30h ;将显示缓冲区30H中的值送入ACC movc a,@a+dptr;查表取要显示的数并把查表的结果送入ACC
mov p0,a ;将要显示的数送入P0口 setb p2.7 ;开个位显示单元 lcall delay100us ;延时100US setb p2.7 ;开个位显示单元
dd1c: mov a,31h ;将显示缓冲区别31H中的值送入A movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC mov p0,a ;将要显示的数送入P0口 clr p2.6 ;开十位显示单元 lcall delay100us ;延时100US setb p2.6 ;关十位显示单元
mov a,32h ;将显示缓冲区32H中的值送入ACC movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC mov p0,a ;将要显示的数送入P0口
12
clr p2.5 ;开百位显示单元 lcall delay100us ;延时100US
setb p2.5 ;关百位显示单元
mov a,33h ;将显示缓冲区33H中的值送入ACC movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC mov p0,a ;将要显示的数送入P0口 clr p2.4 ;开千位显示单元 lcall delay100us ;延时100US setb p2.4
mov a,34h ;将显示缓冲区34H中的值送入ACC movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC mov p0,a ;将要显示的数送入P0口 clr p2.3 ;开万位显示单元 lcall delay100us ;延时100US setb p2.3
mov a,35h ;将显示缓冲区35H中的值送入ACC movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC mov p0,a ;将要显示的数送入P0口 clr p2.2 ;开十万位显示单元 lcall delay100us ;延时100US setb p2.2
mov a,36h ;将显示缓冲区36H中的值送入ACC
13
movc a,@a+dptr ;查表取要显示的数并把查表的结果送入ACC mov p0,a ;将要显示的数送入P0口 clr p2.1 ;开百万位显示单元 lcall delay100us ;延时100US setb p2.1
mov a,37h ;将显示缓冲区37H中的值送入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子程序返回 KEY: LCALL KS ;调用检测按键子程序 JNZ K1 ;有键按下继续
ljmp key_exit ;无键按下退出KEY子程序 K1: LCALL delay4ms ;返回继续检测有无按键按下
LCALL delay4ms LCALL KS ;有键按下继续延时去抖动 JNZ K2 ;再一次调用检测按键程序 ljmp key_exit ;无键按下退出KEY子程序
K2: MOV R2,#0efH ;将扫描值送入 R2暂存
14