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
|