ORG 0000H ;程序执行开始地址
LJMP START ;跳到标号START执行
ORG 0003H ;外中断0中断程序入口
LJMP MENU
ORG 000BH ;定时器T0中断程序入口
LJMP INTT0 ;跳至INTTO执行
ORG 0013H ;外中断1中断程序入口
RETI ;外中断1中断返回
ORG 001BH ;定时器T1中断程序入口
RETI;LJMP INTT1 ;跳至INTT1执行
ORG 0023H ;串行中断程序入口地址
RETI ;串行中断程序返回
;; 主 程 序 ;;
START: MOV R0,#30H ;清30-7F共 80个内存单元
MOV R7,#50H ;
CLEARDISP: MOV @R0,#00H ;
INC R0 ;
DJNZ R7,CLEARDISP ;
CLR 00H ;清转存位
CLR 01H ;清是否改定时判断位
CLR 02H ;清第1路定时判断位
CLR 03H ;清第2路定时判断位
CLR 04H ;清第3路定时判断位
CLR 05H ;清第4路定时判断位
CLR 06H ;清第5路定时判断位
CLR 07H ;清第6路定时判断位
CLR 08H ;清第7路定时判断位
CLR 09H ;清第8路定时判断位
CLR 0AH ;清第9路定时判断位
CLR 0BH ;清第10路定时判断位
CLR 0CH ;清第11路定时判断位
CLR 0DH ;清第12路定时判断位
CLR P3.6 ;清输出口
MOV IP,#02H;时钟优先
MOV TMOD,#01H ;设T0、T1为16位定时器
MOV TL0,#0B0H ;50MS定时初值(T0计时用)
MOV TH0,#3CH ;50MS定时初值
SETB EA ;总中断开放
SETB EX0 ;允许外部中断即调试
SETB ET0 ;允许T0中断
SETB TR0 ;开启T0定时器
MOV R4,#14H ;1秒定时用初值(50MS×20)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;时间显示主程序包括对定时判断程序的调用;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMER:
MOV 30H,#14
MOV 31H,#14;第七八位不显示
;把小时存储区70H解析到第5,6显示位缓冲区
LCALL DISPLAY ;
MOV A,70H
ANL A,#0FH ;高四位变0
MOV 33H,A
MOV A,70H
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 32H,A
;把分存储区71H解析到第3,4显示位缓冲区
MOV A,71H
ANL A,#0FH ;高四位变0
MOV 35H,A
MOV A,71H
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 34H,A
;把秒存储区72H解析到第1,2显示位缓冲区
MOV A,72H
ANL A,#0FH ;高四位变0
MOV 37H,A
MOV A,72H
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 36H,A
LCALL DISPLAY;调用显示程序
LCALL TIMERCOMPARE;调用定时判断程序
AJMP TIMER ;返回循环执行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;定时器中断处理程序包括对秒分时的增长处理;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0:
MOV 76H,R0 ;把R0内数据暂存到76H
PUSH ACC ;累加器入栈保护
PUSH PSW ;状态字入栈保护
CLR ET0 ;关T0中断允许
CLR TR0 ;关闭定时器T0
MOV A,#0B7H ;中断响应时间同步修正
ADD A,TL0 ;低8位初值修正
MOV TL0,A ;重装初值(低8位修正值)
MOV A,#3CH ;高8位初值修正
ADDC A,TH0 ;
MOV TH0,A ;重装初值(高8位修正值)
SETB TR0 ;开启定时器T0
DJNZ R4, OUTT0 ;20次中断未到中断退出
ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
MOV R0,#72H ;指向秒计时单元(71H-72H)
ACALL ADD1 ;调用加1程序(加1秒操作)
MOV A,72H ;秒数据放入A(R3为2位十进制数组合)
CLR C ;清进位标志
CJNE A,#60H,ADDMM ;
ADDMM: JC OUTT0 ;小于60秒时中断退出
ACALL CLR0 ;大于或等于60秒时对秒计时单元清0
MOV R0,#71H ;指向分计时单元(76H-77H)
ACALL ADD1 ;分计时单元加1分钟
MOV A,71H ;分数据放入A
CLR C ;清进位标志
CJNE A,#60H,ADDHH ;
ADDHH: JC OUTT0 ;小于60分时中断退出
ACALL CLR0 ;大于或等于60分时分计时单元清0
MOV R0,#70H ;指向小时计时单元(78H-79H)
ACALL ADD1 ;小时计时单元加1小时
MOV A,70H ;时数据放入A
CLR C ;清进位标志
CJNE A,#24H,HOUR ;
HOUR: JC OUTT0 ;小于24小时中断退出
ACALL CLR0 ;大于或等于24小时小时计时单元清0
OUTT0: MOV R0,76H
POP PSW ;恢复状态字(出栈)
POP ACC ;恢复累加器
SETB ET0 ;开放T0中断
RETI ;中断返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 加1子 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ADD1: MOV A,@R0 ;取当前计时单元数据到A
ADD A,#01H ;A加1操作
DA A ;十进制调整
MOV @R0,A
RET ;子程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 清零子程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
CLR0: CLR A ;清累加器
MOV @R0,A ;清当前地址单元
RET ;子程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;调整时间子程序;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MENU:
LCALL DISPLAY
LCALL DISPLAY ;延时
JB P3.2,BACK ;判断是否是干扰,是则返回
JUDJE1:LCALL DISPLAY
JNB P3.2 ,JUDJE1 ;等待按键松开,否则只调用显示程序
MOV 3DH,#00H ;3DH清零
MENU2: ;把路存储区3DH解析到第7显示位缓冲区
MOV A,3DH
ANL A,#0FH ;高四位变0
MOV 31H,A
MOV 30H,#16 ;第八位显示F
;把小时存储区70H解析到第5,6显示位缓冲区
MOV A,70H
ANL A,#0FH ;高四位变0
MOV 33H,A
MOV A,70H
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 32H,A
;把分存储区71H解析到第3,4显示位缓冲区
MOV A,71H
ANL A,#0FH ;高四位变0
MOV 35H,A
MOV A,71H
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 34H,A
;把秒存储区72H解析到第1,2显示位缓冲区
MOV A,72H
ANL A,#0FH ;高四位变0
MOV 37H,A
MOV A,72H
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 36H,A
LCALL DISPLAY ;调用显示程序
JNB P3.2,TIME12 ;路选择按键按下跳到12路定时设置程序
MOV R0,#70H ;把小时地址移到R0内准备相加
JNB P3.0,ADDSPOT1; 跳到小时加1程序
MOV R0,#71H ;把分地址移到R0内准备相加
JNB P3.1,ADDSPOT2 ; 跳到分加1程序
MOV R0,#72H ;把秒地址移到R0内准备相加
JNB P3.3,ADDSPOT3 ;跳到秒加1程序
JNB P3.4,BACK ;返回键按下中断返回
AJMP MENU2 ;跳MENU2循环执行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中断返回程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BACK: LCALL DISPLAY
;等待按键松开
JNB P3.4,BACK
SETB TR0 ;开起定时器
RETI ; 中断返回
ADDSPOT1:CLR TR0
JB P3.0,SHORTD
AJMP LONGD ;按键松开时间判断延时的长短
ADDSPOT2:CLR TR0
JB P3.1,SHORTD
AJMP LONGD ;按键松开时间判断延时的长短
ADDSPOT3:CLR TR0
JB P3.3,SHORTD
AJMP LONGD ;按键松开时间判断延时的长短
SHORTD:MOV R5,#1 ;置短延迟系数
AJMP DISPLAYD ;跳到加一延时程序
LONGD:MOV R5,#15 ; 置长延迟系数
AJMP DISPLAYD ;跳到加一延时程序
DISPLAYD :LCALL DELAYJUST;调用延时判断程序
LCALL ADD1 ;调用加一子程序
LCALL OVERFLOWCLE ;调用到进位时清零程序
JNB P3.2,TIME12 ;键按下后跳到调定时程序
AJMP MENU2 ;返回MENU2循环程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 延时判断程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAYJUST:LCALL DISPLAY;调用显示程序
DJNZ R5 ,DELAYJUST ;走延迟系数
RET ; 返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 调整12路定时程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME12:
LCALL DISPLAY ;延时消抖
JNB P3.2,TIMGOONQQ;判断键
AJMP MENU2 ; 是干扰返回
TIMGOONQQ:MOV 3DH,#01;路指示为一
AJMP TIMGOON0 ;跳到调整12路定时程 序
TIMGOON0 :
LCALL DISPLAY
JNB P3.2,TIMGOON0 ;按键松开否
CLR 01H ;清是否改了定时开或关标志01H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 第一路定时开关处理程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMGOON1: MOV R0,#40H ;置第一路定时数据初始地址
JNB 01H,SUSSE1 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 02H,C ;把C标志位移到第一路标志02H
SUSSE1: JB 02H,REALYDIS ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第2路定时开关处理程序
TIMGOON2:MOV R0,#44H;置第2路定时数据初始地址
JNB 01H,SUSSE2 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 03H,C ;把C标志位移到第2路标志03H
SUSSE2: JB 03H,REALYDIS ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第3路定时开关处理程序
TIMGOON3: MOV R0,#48H ;置第3路定时数据初始地址
JNB 01H,SUSSE3 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 04H,C ;把C标志位移到第3路标志04H
SUSSE3:JB 04H,REALYDIS ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第4路定时开关处理程序
TIMGOON4: MOV R0,#4CH ;置第4路定时数据初始地址
JNB 01H,SUSSE4 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 05H,C ;把C标志位移到第4路标志05H
SUSSE4: JB 05H,REALYDIS ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第5路定时开关处理程序
TIMGOON5:MOV R0,#50H ;置第5路定时数据初始地址
JNB 01H,SUSSE5 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 06H,C ;把C标志位移到第5路标志06H
SUSSE5:JB 06H,REALYDIS ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第6路定时开关处理程序
TIMGOON6:MOV R0,#54H ;置第6路定时数据初始地址
JNB 01H,SUSSE6 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 07H,C ;把C标志位移到第6路标志07H
SUSSE6: JB 07H,REALYDIS ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第7路定时开关处理程序
TIMGOON7:MOV R0,#58H ;置第7路定时数据初始地址
JNB 01H,SUSSE7 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 08H,C ;把C标志位移到第7路标志08H
SUSSE7:JB 08H,REALYDIS ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;第N路定时开的设置和显示子程序;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REALYDIS:
CLR 01H ;清标志缓冲区
MOV 78H,R0 ;把小时数据地址存入 78H
INC R0 ; 指向分地址
MOV 79H,R0 ;把分数据地址存入 79H
UTENSIL:LCALL DISPLAY; 延时显示
LCALL DISPLAY ; 延时显示
JNB P3.2,UTENSIL;等待键松下
;定时开时显示循环程序
REALYDIS1:
LCALL FISTDISP ;调用显示第七八位分配显示缓存区程序
MOV R1,78H ;把时初值移到R1
LCALL TIMERDISP ;调用显示定时时间分配显示缓存区程序
MOV 36H,#10
MOV 37H,#11 ;显示OP
LCALL DISPLAY ;调用显示程序
JNB P3.4,BACK1 ;P3.4键按下返回
JNB P3.0,DELAYJUS1 ;调时键按下延时
JNB P3.1,DELAYJUS2 ;调分键按下延时
TIMG2:JB P3.2, TIMG3 ;
AJMP REALYDIS2 ; 路键松开否
TIMG3 :JB P3.5,REALYDIS1 ;
CANCLE:LCALL DISPLAY ;
JNB P3.5,CANCLE ;取消定时键松开否
SETB 01H ; 置改定时标志
CLR 00H ;置定时开关标志
LJMP FINDROUT;寻找对应的路
DELAYJUS1: ;小时延时判断程序
JB P3.0, SHORTD1 ;如松开是短定时
MOV R5,#20 ;一直按下是长定时
AJMP DISPLAYD1 ;跳到延时带加一和到位溢出
SHORTD1:MOV R5,#1 ; 短延时
AJMP DISPLAYD1 ;跳到延时带加一和到位溢出
DISPLAYD1 : ;延时带加一和到位溢出
MOV R0,78H ;时地址到R0
LCALL ADD1 ;时加一
LCALL OVERFLOWCLE ;满位否
LCALL DELAYJUST ;延时
AJMP REALYDIS1 ; 回到循环
DELAYJUS2: ;分延时判断程序
JB P3.1,SHORTD2 ;如松开是短定时
AJMP DISPLAYD2 ;跳到延时带加一和到位溢出
SHORTD2:MOV R5,#1 ; 短延时
AJMP DISPLAYD2 ;跳到延时带加一和到位溢出
DISPLAYD2 : ;延时带加一和到位溢出
MOV R5,#20
MOV R0,79H ;时地址到R0
LCALL ADD1 ;分加一
LCALL OVERFLOWCLE ;满位否
LCALL DELAYJUST ;延时
AJMP REALYDIS1 ; 回到循环
; 第8路定时开关处理程序
TIMGOON8: MOV R0,#5CH ;置第8路定时数据初始地址
JNB 01H,SUSSE8 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 09H,C ;把C标志位移到第8路标志09H
SUSSE8:JB 09H,REALYDISRELAY;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第9路定时开关处理程序
TIMGOON9:MOV R0,#60H ;置第9路定时数据初始地址
JNB 01H,SUSSE9 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 0AH,C ;把C标志位移到第9路标志0AH
SUSSE9:JB 0AH,REALYDISRELAY ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
BACK1 :RETI
; 第10路定时开关处理程序
TIMGOON10:MOV R0,#64H ;置第10路定时数据初始地址
JNB 01H,SUSSE10 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 0BH,C ;把C标志位移到第10路标志0BH
SUSSE10:JB 0BH,REALYDISRELAY ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第11路定时开关处理程序
TIMGOON11: MOV R0,#68H ;置第11路定时数据初始地址
JNB 01H,SUSSE11 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 0CH,C ;把C标志位移到第11路标志0CH
SUSSE11:JB 0CH,REALYDISRELAY ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
; 第12路定时开关处理程序
TIMGOON12:MOV R0,#6CH ;置第12路定时数据初始地址
JNB 01H,SUSSE12 ;是否改关或开定时
MOV C,00H ; 把缓冲位移到C
MOV 0DH,C ;把C标志位移到第12路标志0DH
SUSSE12:JB 0DH,REALYDISRELAY ;标志位为一进入开状态
CLR C ;清标志c
LJMP NOTIMOP ;跳到没定时显示
FINDROUTRELAY :AJMP FINDROUT ;FINDROUT 跳转接力
REALYDISRELAY:AJMP REALYDIS ;REALYDIS 跳转接力
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;第N路定时关的设置和显示子程序;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REALYDIS2:
CLR 01H
LCALL DISPLAY
JNB P3.2,NA3
AJMP REALYDIS
NA3:
LCALL DISPLAY
JNB P3.2,NA3 ;按键
INC 79H
MOV 78H,79H
INC 79H
REALYDIS2A:
LCALL FISTDISP
MOV R1,78H
LCALL TIMERDISP
MOV 36H,#12
MOV 37H,#13
LCALL DISPLAY
JNB P3.4,BACK1
JNB P3.0,DELAYJUS3
JNB P3.1,DELAYJUS4
TIMG22:JB P3.2, TIMG33
MOV R0,#3DH
LCALL ADD1
MOV A,3DH
CJNE A,#13H,FINDROUTRELAY
AJMP BACK2
TIMG33 :JB P3.5 ,REALYDIS2A
CANCLE1: LCALL DISPLAY
JNB P3.5,CANCLE1
SETB 01H
CLR 00H
LJMP FINDROUT
DELAYJUS3:
JB P3.0,SHORTD3
MOV R5,#15
AJMP DISPLAYD3
SHORTD3:MOV R5,#1
AJMP DISPLAYD3
DISPLAYD3 :LCALL DELAYJUST
MOV R0,78H
LCALL ADD1
LCALL OVERFLOWCLE
AJMP REALYDIS2A
DELAYJUS4:
JB P3.1,SHORTD4
MOV R5,#15
AJMP DISPLAYD4
SHORTD4:MOV R5,#1
AJMP DISPLAYD4
DISPLAYD4 :LCALL DELAYJUST
MOV R0,79H
LCALL ADD1
LCALL OVERFLOWCLE
AJMP REALYDIS2A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;没有设置定时显示子程序;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NOTIMOP:CLR 01H
MOV A,3DH
ANL A,#0FH ;高四位变0
MOV 31H,A
MOV A,3DH
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 30H,A
MOV 32H,#15
MOV 33H,#15
MOV 34H,#15
MOV 35H,#15
MOV 36H,#15
MOV 37H,#15
LCALL DISPLAY
NN2: LCALL DISPLAY
JNB P3.2,NN2
LOOP1: JNB P3.4,BACK2
JB P3.2,NN1
MOV R0,#3DH
LCALL ADD1
MOV A,3DH
CJNE A,#13H,FINDROUT
AJMP BACK2
NN1:LCALL DISPLAY
JB P3.5,LOOP1
CANCLE2:LCALL DISPLAY
JNB P3.5,CANCLE2
SETB 01H
SETB 00H
AJMP FINDROUT
BACK2:RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;寻找定时第几路子程序;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FINDROUT: MOV A,3DH
CJNE A,#01, N1
LJMP TIMGOON1
N1:CJNE A,#02, N2
LJMP TIMGOON2
N2:CJNE A,#03, N3
LJMP TIMGOON3
N3:CJNE A,#04, N4
LJMP TIMGOON4
N4:CJNE A,#05, N5
LJMP TIMGOON5
N5:CJNE A,#06, N6
LJMP TIMGOON6
N6:CJNE A,#07, N7
LJMP TIMGOON7
N7:CJNE A,#08, N8
LJMP TIMGOON8
N8:CJNE A,#09, N9
LJMP TIMGOON5
N9:CJNE A,#10H, N10
LJMP TIMGOON6
N10:CJNE A,#11H, N11
LJMP TIMGOON11
N11:CJNE A,#12H, N12
LJMP TIMGOON12
N12:CJNE A,#00,N13
N13:LJMP BACK1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;定时路即前两位放入显示缓冲区子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FISTDISP:MOV A,3DH
ANL A,#0FH ;高四位变0
MOV 31H,A
MOV A,3DH
SWAP A ;A中数据高四位与低四位交换
ANL A,#0FH ;高四位变0
MOV 30H,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;小时和分四位放入显示缓冲区子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMERDISP: MOV A,@R1
ANL A,#0FH
MOV 33H,A
MOV A,@R1
SWAP A
ANL A,#0FH
MOV 32H,A
INC R1
MOV A,@R1
ANL A,#0FH
MOV 35H,A
MOV A,@R1
SWAP A
ANL A,#0FH
MOV 34H,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;后两位OP放入显示缓冲区子程序;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FOURTHOP:MOV 36H,#10
MOV 37H,#11
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;后两位CL放入显示缓冲区子程序;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FOURTHCL: MOV 36H,#12
MOV 37H,#13
RET
;;;;显示程序;;;;;;
; ,P0口输出段码数据,P2口作为位扫描
; 扫描控制,每个LED数码管亮1MS时间再逐位循环。
DISPLAY:MOV A,30H
CJNE A,#00,NOCONTRAST
MOV 30H,#14
NOCONTRAST: MOV 3BH,#8
MOV 3CH,#0FEH
MOV R1,#37H
MOV DPTR,#TAB
LOOP: MOV A,@R1
MOVC A,@A+DPTR
MOV P0,A
MOV P2,3CH
LCALL DELAY
DEC R1
MOV A,3CH
RL A
MOV 3CH,A
DJNZ 3BH,LOOP
MOV P0,#0FFH ;P1口复位
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;小时24分60后清零判断子程序;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OVERFLOWCLE:
MOV 73H,#24
MOV 74H,#24
MOV A,70H
MOV R0,#70H
CJNE A,#24H,GOON1
LCALL CLR0
GOON1: MOV A,71H
MOV R0,#71H
CJNE A,#60H,GOON2
LCALL CLR0
GOON2:MOV A,72H
MOV R0,#72H
CJNE A,#60H,GOON3
LCALL CLR0
GOON3:MOV R0,#40H
GOON5: MOV A,@R0
CJNE A,#24H,GOON6
LCALL CLR0
GOON6:INC R0
INC R0
DJNZ 73H,GOON5
MOV R0,#41H
GOON7: MOV A,@R0
CJNE A,#60H,GOON8
LCALL CLR0
GOON8:INC R0
INC R0
DJNZ 74H,GOON7
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;定时判断开关输出口子程序;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMERCOMPARE:JNB 02H,ANTHERCOM1
MOV A,40H
CJNE A,70H,ANTHERCOM1
MOV A,41H
CJNE A,71H,ANTHERCOM1
SETB P3.6
ANTHERCOM1:JNB 03H,ANTHERCOM2
MOV A,44H
CJNE A,70H,ANTHERCOM2
MOV A,45H
CJNE A,71H,ANTHERCOM2
SETB P3.6
ANTHERCOM2:JNB 04H,ANTHERCOM3
MOV A,48H
CJNE A,70H,ANTHERCOM3
MOV A,49H
CJNE A,71H,ANTHERCOM3
SETB P3.6
ANTHERCOM3:JNB 05H,ANTHERCOM4
MOV A,4CH
CJNE A,70H,ANTHERCOM4
MOV A,4DH
CJNE A,71H,ANTHERCOM4
SETB P3.6
ANTHERCOM4:JNB 06H,ANTHERCOM5
MOV A,50H
CJNE A,70H,ANTHERCOM5
MOV A,51H
CJNE A,71H,ANTHERCOM5
SETB P3.6
ANTHERCOM5:JNB 07H,ANTHERCOM6
MOV A,54H
CJNE A,70H,ANTHERCOM6
MOV A,55H
CJNE A,71H,ANTHERCOM6
SETB P3.6
ANTHERCOM6:JNB 08H,ANTHERCOM7
MOV A,58H
CJNE A,70H,ANTHERCOM7
MOV A,59H
CJNE A,71H,ANTHERCOM7
SETB P3.6
ANTHERCOM7:JNB 09H,ANTHERCOM8
MOV A,5CH
CJNE A,70H,ANTHERCOM8
MOV A,5DH
CJNE A,71H,ANTHERCOM8
SETB P3.6
ANTHERCOM8:JNB 0AH,ANTHERCOM9
MOV A,60H
CJNE A,70H,ANTHERCOM9
MOV A,61H
CJNE A,71H,ANTHERCOM9
SETB P3.6
ANTHERCOM9:JNB 0BH,ANTHERCOM10
MOV A,64H
CJNE A,70H,ANTHERCOM10
MOV A,65H
CJNE A,71H,ANTHERCOM10
SETB P3.6
ANTHERCOM10:JNB 0CH,ANTHERCOM11
MOV A,68H
CJNE A,70H,ANTHERCOM11
MOV A,69H
CJNE A,71H,ANTHERCOM11
SETB P3.6
ANTHERCOM11:JNB 0DH,CLOSECOMP
MOV A,6CH
CJNE A,70H,CLOSECOMP
MOV A,6DH
CJNE A,71H,CLOSECOMP
SETB P3.6
CLOSECOMP:JNB 02H, CLOSECOMP1
MOV A,42H
CJNE A,70H, CLOSECOMP1
MOV A,43H
CJNE A,71H, CLOSECOMP1
CLR P3.6
CLOSECOMP1:JNB 03H,CLOSECOMP2
MOV A,46H
CJNE A,70H,CLOSECOMP2
MOV A,47H
CJNE A,71H,CLOSECOMP2
CLR P3.6
CLOSECOMP2:JNB 04H,CLOSECOMP3
MOV A,4AH
CJNE A,70H,CLOSECOMP3
MOV A,4BH
CJNE A,71H,CLOSECOMP3
CLR P3.6
CLOSECOMP3:JNB 05H,CLOSECOMP4
MOV A,4EH
CJNE A,70H,CLOSECOMP4
MOV A,4FH
CJNE A,71H,CLOSECOMP4
CLR P3.6
CLOSECOMP4:JNB 06H,CLOSECOMP5
MOV A,52H
CJNE A,70H,CLOSECOMP5
MOV A,53H
CJNE A,71H,CLOSECOMP5
CLR P3.6
CLOSECOMP5:JNB 07H,CLOSECOMP6
MOV A,56H
CJNE A,70H,CLOSECOMP6
MOV A,57H
CJNE A,71H,CLOSECOMP6
CLR P3.6
CLOSECOMP6:JNB 08H,CLOSECOMP7
MOV A,5AH
CJNE A,70H,CLOSECOMP7
MOV A,5BH
CJNE A,71H,CLOSECOMP7
CLR P3.6
CLOSECOMP7:JNB 09H,CLOSECOMP8
MOV A,5EH
CJNE A,70H,CLOSECOMP8
MOV A,5FH
CJNE A,71H,CLOSECOMP8
CLR P3.6
CLOSECOMP8:JNB 0AH,CLOSECOMP9
MOV A,62H
CJNE A,70H,CLOSECOMP9
MOV A,63H
CJNE A,71H,CLOSECOMP9
CLR P3.6
CLOSECOMP9:JNB 0BH,CLOSECOMP10
MOV A,66H
CJNE A,70H,CLOSECOMP10
MOV A,67H
CJNE A,71H,CLOSECOMP10
CLR P3.6
CLOSECOMP10:JNB 0CH,CLOSECOMP11
MOV A,6AH
CJNE A,70H,CLOSECOMP11
MOV A,6BH
CJNE A,71H,CLOSECOMP11
CLR P3.6
CLOSECOMP11:JNB 0DH,ACCOMPLISH
MOV A,6EH
CJNE A,70H,ACCOMPLISH
MOV A,6FH
CJNE A,71H,ACCOMPLISH
CLR P3.6
ACCOMPLISH: RET
;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;延时程序;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;
DELAY: MOV R6,#20H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
DELAY2: MOV R6,#50H
DL3: MOV R7,#19H
DL4: DJNZ R7,DL4
DJNZ R6,DL3
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,9CH,8CH,0C6H,0C7H,0FFH,0BFH,8EH ; 共阳数码管段码表
;3FH,006H,05BH,04FH,66H,6dH,7dH,007H,7fH,6fH,63H,73H,39H,38h,00H, 40H,71H ; 共阴数码管段码表
;段码表依次代表 "0" "1" "2" "3""4" "5" "6" "7" "8" "9" "O" "P" "C" "L""不亮""-" "F"
文章评论(0条评论)
登录后参与讨论