正文

51单片机 0~99S 正倒计时秒表(汇编)2013-12-20 20:38:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/enc999/54366.html

分享到:

;0~99S正倒计时。倒计时初始可99S内任设
;时间到,蜂鸣3S。
;E:\DPJ\0~99S倒计时\0~99可设定正倒计时\0~99可设定正倒计时.ASM
STRT EQU P2.2
P_S  EQU P2.3
CLRR EQU P2.4
CDWN EQU   P2.5
ADJH EQU P2.6
ADJL EQU P2.7
 
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT  
 
ORG 30H
MAIN: 
MOV SP,#60H
MOV DPTR,#TAB
MOV TMOD,#01H ;T0定时方式1
SETB EA
SETB ET0
MOV TH0,#3CH ;50ms定时常数
MOV TL0,#0B0H
MOV   R0,#20  ;20x50mS=1S
 
MAIN1:
ACALL ALARM  ;调用报警子程序
k1:     ;按键检测子程序开始键
LCALL DISP 
JB STRT,K2
ACALL DISP
JNB STRT,$-2
AJMP START

k2:     ;暂停键
JB P_S,K3
LCALL DISP
JNB P_S,$-3
AJMP PAUSE

K3:     ;清零键 
JB CLRR,K4
LCALL DISP
JNB CLRR,$-3 
AJMP CLEAR

K4:     ;倒计时键 
JB CDWN,K5
ACALL DISP
JNB CDWN,$-2
AJMP CDOWN

K5:     ;倒计时设定十位
JB 7EH,K51
AJMP MAIN1
K51:
JB ADJH,K6
ACALL DISP
JNB ADJH,$-2
AJMP SHINC

K6:     ;倒计时设定个位
JB 7EH,K61
AJMP  MAIN1
K61:
JB ADJL,MAIN1
ACALL DISP
JNB ADJL,$-2
AJMP SLINC

START: 
SETB TR0
CLR 7DH       ;开始后此标志清0 ,跳过显示子程序的设定部分
MOV R3,#3   ;蜂鸣3S
AJMP K1
 
PAUSE: 
CLR TR0
AJMP K2

CLEAR: 
CLR     TR0
MOV R4,#0
AJMP K3

CDOWN:
SETB 7EH   ;倒计标志,作倒计减1计数用
SETB 7DH   ;倒计标志,作倒计设定显示用
AJMP K4

SHINC:
INC 23H   ;23H为设定值十位缓存
MOV A,23H
CJNE A,#10,K5
MOV 23H,#0
AJMP K5

SLINC:
INC 22H   ;22H为设定值个位缓存
MOV A,22H
CJNE A,#10,K6
MOV 22H,#0
AJMP K5

ALARM:
JB 7FH,ALARM0     ;7FH为时间到标志,RAM内存2FH的D7位
AJMP ALARMRT     ;时间未到,跳出报警
ALARM0:
CPL P1.0
ACALL DISP   ;利用显示子程序延时约2ms求反,产生250H的方波。
AJMP ALARM
ALARMRT:
RET


T0INT: 
MOV TH0,#03CH; ;定时中断子程序。重装定时常数
MOV TL0,#0B0H;
DJNZ R0,T0INTR ;50msX20=1S,未满20次,跳出中断子程序
MOV R0,#20
JNB 7FH,T0INT00 ;时间未到转T0INT00
DJNZ R3,T0INTR   ;未到3 S 跳出中断子程序
CLR 7FH                ;3 S时间到,清计时时间到标志
CLR TR0    ;关定时器
AJMP T0INTR          ;跳出中断
T0INT00:
JNB 7EH,T0INT0   ;7EH为倒计时标志,1为倒计时
DEC R4     ;=1,R4-1
CJNE    R4,#0,T0INTR 
CLR 7EH               
SETB 7FH     ;时间到标志
AJMP T0INTR
T0INT0:
INC R4
CJNE R4,#99,T0INTR
SETB 7FH   ;时间到标志
T0INTR:
RETI
 

DISP: 
JNB 7DH,DISP1
MOV 20H,22H  ;22H存设定个位
MOV 21H,23H ;23H存设定十位
MOV A,23H  
MOV B,#10
MUL AB
ADD A,22H
MOV R4,A
DISP1:
MOV  A,R4
MOV  B,#10
DIV  AB         ;当前值除以10
MOV  20H,A      ;得出的商送给十位
MOV  21H,B      ;得出的余数送给个位
      
MOV  A,20H      ;十位显示
MOVC A,@A+DPTR
MOV  P0,A
SETB P2.1
LCALL DELAY
CLR  P2.1
 
MOV  A,21H      ;个位显示
MOVC A,@A+DPTR
MOV  P0,A
SETB P2.0
LCALL DELAY
CLR P2.0
RET

DELAY:   ;误差 0us
MOV R6,#10
DL0:
MOV R5,#50
DJNZ R5,$
DJNZ R6,DL0
RET


TAB:  
DB  0C0H,0F9H,0A4H,0B0H,99H      ;共阳极0-9显示代码
DB  92H,82H,0F8H,80H,90H
    
END

阅读(2312) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册