ORG 0000H
ajmp main
org 000bh
AJMP PDF ;TR0中斷入口
org 0030h
MAIN:clr f0 ;觸發標志位 ****************************************
MOV DPTR,#TAB01
MOV 32H,#10H;預設定
MOV 31H,#60H;預設定
MOV 30H,#003H;預設定;
MOV R1,#32H;設定指針與R0配合,很重要值不能改;而且是工作是的指針,最重要
MOV TMOD,#01H;定時器設定
MOV TH0,#0BH
MOV TL0,#0DCH
mov r7,#20h
SETB ea
setb et0 ;開中斷 ****************** ***************************************
STA:MOV R0,#30H; ***************************** 以下是顯示程序
mov p2,#80h;顯示字
hgfd:jb f0,s;判是否觸發
cvbn:mov 40h,r1
mov a,r0
cjne a,40h,kz ;進行比較R1和R0相等時便是設定狀態可以通過加減修改30H,31H,32H,
jnb p3.4,INCr1
JNB P3.5,DECR1
JNB P1.5,INCR0 ;按鍵檢測,在設定狀態有效工做狀態無效
JNB P1.6,DECR0
JNB P1.7,CFKS
S:CJNE R0,#31H,XX ;顯示31H是要加小數點
MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A ; ;顯示高BCD
MOV A,P2
RL A
MOV P2,A
LCALL YS
MOV DPTR,#TAB
MOV A,@R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A ;顯示低BCD
MOV A,P2
RL A
MOV P2,A
MOV DPTR,#TAB01
AJMP ER ;............................................
DECR0:AJMP ECR0
INCR0:AJMP NCR0
CFKS:AJMP FKS ;中轉戰因為程序太長
DECR1:AJMP ECR1
INCR1:AJMP NCR1
XX: MOV A,@R0;.30H,32H顯示
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
MOV A,P2
RL A
MOV P2,A
LCALL YS
MOV A,@R0
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
MOV A,P2
RL A
MOV P2,A
ER:LCALL YS ;延時可設定
jb f0,kdm ;判設定還是工作狀態
ajmp sta ;若是設定狀態則返回
kdm:JB ACC.5,STA;吃大虧了和下面的DJNZ R7,S矛盾改STA的位置就行
kz:INC R0 ;顯示用指針
js:AJMP hgfd ;**************以上是顯示程序*****************************.
PDF:DJNZ R7,PT01 ;*********以下是中斷和工作減一 程序*******************
BN:CJNE R1,#32H,KJ
AJMP HG
KJ:CJNE R1,#31H,SF
AJMP FS
SF:CJNE R1,#30H,BN
AJMP XW
HG:MOV A,32H
CJNE A,#00H,V ;判32
CLR P1.0
DEC R1
FS:MOV A,31H
CJNE A,#00H,DDJY;判31
CLR P1.3
DEC R1
XW:MOV A,30H
CJNE A,#00H,V ;判30
CLR P1.4
MOV R1,#32H
CLR TR0
AJMP STA;............................
V: MOV A,@R1
ANL A,#0FH
CJNE A,#00h,k
MOV A,@R1
swap a
anl a,#0fh
CJNE A,#00H,h
MOV @R1,#00H
MOV R7,#20H ;設定
CLR TR0
reti
K:MOV A,@R1
DEC A
MOV @R1,A
MOV R7,#20H ;設定
reti
h: dec A
SWAP A
add A,#09H
mov @R1,A
MOV R7,#20H ;設定
PT01:reti;...................................................................
SWG:AJMP S
DDJY: MOV A,@R1
ANL A,#0FH
CJNE A,#00h,XA
MOV A,@R1
swap a
anl a,#0fh
CJNE A,#00H,CQ
MOV R7,#20H ;設定
reti
XA:MOV A,@R1
DEC A
MOV @R1,A
MOV R7,#01H ;設定
reti
CQ: dec A
SWAP A
add A,#09H
mov @R1,A
MOV R7,#01H ;設定
RETI ;****************************8以上是中斷和工作減一 程序***********
NCR1:MOV R5,#099H ;*************以下是工作在設定狀態時的按鍵選單元****
Z:MOV R6,#0FFH
X:NOP
DJNZ R6,X
DJNZ R5,Z;去抖動
JB P3.4,SWG
MOV A,R1
CJNE A,#32H,TQ
MOV R1,#32H
AJMP STA
TQ:INC R1
AJMP STA ;********************
ECr1: mov r5,#99h ;******************************
cv:mov r6,#0FFh
os:nop
djnz r6,os
djnz r5,cv
JB P3.5,SWG;注意這里要重復檢查
mov a,r1
cjne a,#30h,QT
mov r1,#30h
ajmp sta
QT:DEC R1
AJMP STA;**************以上是工作在設定狀態時的按鍵選單元********************************
NCR0:MOV R5,#0F9H;************以下是單元加減鍵*************************
ZCP:MOV R6,#0FFH
XMQ:NOP
DJNZ R6,XMQ
DJNZ R5,ZCP;去抖動
MOV A,@R1
ANL A,#0FH
CJNE A,#09h,DAMQ
MOV A,@R1
swap a
anl a,#0fh
CJNE A,#09H,FUL
MOV @R1,#99H
AJMP S
DAMQ:MOV A,@R0
INC A
MOV @R1,A
AJMP S
FUL: INC A
SWAP A
mov @R1,a
AJMP S;******************************************
ECR0:MOV R5,#0F9H;***************************************
Zh:MOV R6,#0FFH
Xj:NOP
DJNZ R6,Xj
DJNZ R5,Zh;去抖動
MOV A,@R1
ANL A,#0FH
CJNE A,#00h,kWS
MOV A,@R1
swap a
anl a,#0fh
CJNE A,#00H,hIV
MOV @R1,#00H
AJMP S
KWS:MOV A,@R1
DEC A
MOV @R1,A
AJMP S
hIV: dec A
SWAP A
add A,#09H
mov @R1,A
AJMP S;*****************以上是單元加減鍵****************************
FKS:SETB F0
SETB TR0
MOV R1,#32H;工作重裝!
AJMP STA ;**
ys:mov r3,#05h ;******************************
l:mov r4,#056h
lo:nop
djnz r4,lo
djnz r3,l
ret ; ***************************************
TAB01: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H
TAB: DB 02H,9EH,24H,0CH,98H,48H,40H,1EH,00H,08H
END
|