📄 jidainqi.asm
字号:
CLSECOND DATA 5DH;定义时钟中间两个点闪动
CLOCK5 DATA 5EH ;定义小时高位
CLOCK DATA 5FH ;定义小时低位
CLOCK0 DATA 60H ;定义分钟高位
CLOCK1 DATA 61H ; 定义分钟低位
CLOCK2 DATA 62H ; 定义秒钟高位
CLOCK3 DATA 63H ;定义秒钟低位
CLOCK4 DATA 64H ;值每100进位给秒
CLOCK6 DATA 65H ; --以下四个空间是为了把小时和分钟送给修改部分--
CLOCK7 DATA 66H
CLOCK8 DATA 67H
CLOCK9 DATA 68H
DATA1 DATA 70H;显示温度个位
DATA2 DATA 71H ;显示温度十位
DATA3 DATA 72H ;显示温度百位
DATA4 DATA 73H ;--以下三个空间是用于设定温度使蜂鸣器工作--
DATA5 DATA 74H ; 十
DATA6 DATA 75H ;个
DATA7 DATA 76H ;---以下三个空间用于蜂鸣器---
DATA8 DATA 77H ; 十
DATA9 DATA 78H; 百
ORG 0000H
LJMP MAIN1
ORG 000BH
LJMP DVT0
ORG 0100H
MAIN1 :
;-------内存清零------
CLRRAM: MOV R0 , #2
MOV R1 , #7EH
MOV A , #0
CLRRAM1: MOV @R0, A
INC R0
DJNZ R1 , CLRRAM1
MOV SP,#32H
DISPLAY_P:MOV P2,#0F7H ;显示P.
MOV A,#0CH
MOV DPTR,#0EFFFH
MOVX @DPTR,A
LCALL DELAY
JNB P1.0,TEMDISPL;按p1。0跳转,开始显示温度
AJMP DISPLAY_P
MAIN: JNB P1.1,CHANGE0
SJMP TEMDISP
CHANGE0:LCALL CHANGE
TEMDISPL:JNB P1.0,$;等待按键放开
MOV TMOD,#01H;定时器T0为定时10ms
MOV TH0,#0DCH
MOV TL0,#09H
SETB ET0;设置中断
SETB EA
SETB TR0
SJMP TEMDISP
TIMETOTEM:JNB P1.0,$
TEMDISP:JNB P1.0,TIME_DISPLAY1 ;p1.0按下跳转显示时间
;-----信号输入-----
ADC0804 : MOV R2,#80H
MOV R5,#00H
MOV R1,#DATA1
ADC08041:JNB P1.1,CHANGE0
CLR C
MOV DPTR,#0FFFFH
MOVX @DPTR,A
JB P3.2,$
MOVX A,@DPTR
MOV DPTR,#7FFFH
MOVX A,@DPTR
ADD A,@R1
MOV @R1,A
JNC NEXT
INC R5
JNB P1.0,TIME_DISPLAY1
NEXT:DJNZ R2,ADC08041
MOV A,R5
MOV B,#100
DIV AB ; 取百位数 余数在B寄存器
MOV DATA3,A ;把百位存入百位寄存器DISPBUF
MOV A,B ;余数再送A
MOV B,#10 ;余数除10商为十位数
DIV AB ; 除法,余数在寄存器B
MOV DATA2,A ;A是十位数存第二位显示寄存器
MOV DATA1,B ; B是个位数存第三位显示寄存器
SJMP DISP
TIME_DISPLAY1:LJMP TIME_DISPLAY ;中转指令
DISP0:JNB P1.0,$
MOV DATA1,DATA6
MOV DATA2,DATA5
MOV DATA3,DATA4
MOV DATA7,DATA6
MOV DATA8,DATA5
MOV DATA9,DATA4
;----显示温度程序-----
DISP: MOV R4,#0FFH ;延时数字显示时间
DISP1: MOV R1,#DATA3 ;置数据存储区首地址
MOV R2,#0FEH ;置选通数码管位
MOV R3,#03H ;显示位数
DISP2: JNB P1.1,CHANGE0
MOV P2,R2
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0EFFFH;LS377地址
MOVX @DPTR,A
LCALL DELAY
DEC R1
MOV A,R2
RL A
MOV R2,A
JNB P1.0,TIME_DISPLAY_0
DJNZ R3,DISP2
MOV P2,#0D7H ;显示摄氏度
MOV A,#0C6H
MOV DPTR,#0EFFFH
MOVX @DPTR,A
LCALL DELAY
DJNZ R4,DISP1
;------蜂鸣器-------
MOV A,DATA9
CLR C
SUBB A,DATA3
JC SOUND
MOV A,DATA8
SUBB A,DATA2
JC SOUND
MOV A,DATA7
SUBB A,DATA1
JC SOUND
SETB P1.7
SETB P1.4
AJMP MAIN
CHANG_12:LJMP CHANGE0
SOUND :CLR P1.7
CLR P1.4;制冷
AJMP MAIN
TIME_DISPLAY_0:LJMP TIME_DISPLAY
;-----设定显示值-----
CHANGE: JNB P1.1,$
MOV DATA6,DATA1
MOV DATA5,DATA2
MOV DATA4,DATA3
CHANGE2:MOV R1,#DATA4
MOV R2,#0FEH
TEMSET :MOV P2,R2
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0EFFFH
MOVX @DPTR,A
LCALL DELAY
JNB P1.0,DISP_000
JNB P1.2,ADD1
JNB P1.3,SUB1
JB P1.1,TEMSET
JNB P1.1,$
INC R1
MOV A,R2
RL A
MOV R2,A
CJNE R2,#0F7H,CHANGE1
SJMP CHANGE2
DISP_000:LJMP DISP0
CHANGE1:AJMP TEMSET
ADD1 :JNB P1.2,$
INC @R1
CJNE @R1,#0AH,ADD11
MOV @R1,#00H
ADD11 :AJMP TEMSET
SUB1 :JNB P1.3,$
DEC @R1
CJNE @R1,#0FFH,SUB11
MOV @R1,#09H
SUB11 :AJMP TEMSET
TEMDISP1:LJMP TEMDISP
;----时间显示程序-----
;------秒钟的跳动中断---------
TIME_DISPLAY:JNB P1.0,$
TIMEDISP: MOV R4,#0FH ;延时数字显示时间
TIMEDISP1: MOV R1,#CLOCK5 ;置数据存储区首地址
MOV R2,#0FEH ;置选通数码管位
MOV R3,#04H ;显示位数
TIMEDISP2:JNB P1.1,CHANGETIME
JNB P1.0,TIME_TO_TEM
MOV P2,R2
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0EFFFH;LS377地址
MOVX @DPTR,A
LCALL DELAY
INC R1
MOV A,R2
RL A
MOV R2,A
DJNZ R3,TIMEDISP2
JB P3.0,AA
CLR P2.6
LCALL DELAY_1 ;为了使灯亮点,可以适当加长延迟时间
AA: DJNZ R4,TIMEDISP1
JNB P1.1,CHANGETIME
SJMP TIMEDISP
TIMEDISP0:JNB P1.0,$
MOV CLOCK5, CLOCK6
MOV CLOCK, CLOCK7
MOV CLOCK0, CLOCK8
MOV CLOCK1, CLOCK9
SETB EA
MOV CLOCK2,#00H
MOV CLOCK3,#00H
MOV CLOCK4,#00H
TIME_DISP: MOV R4,#0FFH ;延时数字显示时间
TIME_DISP1: MOV R1,#CLOCK5 ;置数据存储区首地址
MOV R2,#0FEH ;置选通数码管位
MOV R3,#04H ;显示位数
TIME_DISP2:JNB P1.0,TIME_TO_TEM
MOV P2,R2
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0EFFFH;LS377地址
MOVX @DPTR,A
LCALL DELAY
INC R1
MOV A,R2
RL A
MOV R2,A
DJNZ R3,TIME_DISP2
CLR P2.6
LCALL DELAY
JNB P1.1,CHANGETIME
DJNZ R4,TIME_DISP1
SJMP TIMEDISP
TIME_TO_TEM:LJMP TIMETOTEM
;-----时间设置----
CHANGETIME: CLR EA
JNB P1.1,$
MOV CLOCK6, CLOCK5
MOV CLOCK7, CLOCK
MOV CLOCK8, CLOCK0
MOV CLOCK9, CLOCK1
CHANGETIME2:MOV R0,#CLOCK6
MOV R1,#0FEH
TIMESET :MOV P2,R1
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0EFFFH
MOVX @DPTR,A
LCALL DELAY
JNB P1.0,TIMEDISP0
JNB P1.2,ADDTIME1
JNB P1.3,SUBTIME1
JB P1.1,TIMESET
JNB P1.1,$
INC R0
MOV A,R1
RL A
MOV R1,A
CJNE R1,#0EFH,CHANGETIME1
SJMP CHANGETIME2
CHANGETIME1:AJMP TIMESET
;------加1-----
ADDTIME1 :JNB P1.2,$
CJNE R1,#0FEH,NEXT1
INC @R0
CJNE @R0,#03H,FIRST
MOV @R0,#00H
SJMP FIRST
FIRST : CJNE @R0,#02H,ADDTIME11
MOV A,CLOCK7
CLR C
SUBB A,#03H
JC ADDTIME11
MOV CLOCK7,#03H
SJMP ADDTIME11
NEXT1 :CJNE R1,#0FDH,NEXT2
MOV A,CLOCK6
CJNE A,#02H,SECOND
INC @R0
CJNE @R0,#04H,ADDTIME11
MOV @R0,#00H
SJMP ADDTIME11
SECOND : INC @R0
CJNE @R0,#0AH,ADDTIME11
MOV @R0,#00H
SJMP ADDTIME11
NEXT2 :CJNE R1,#0FBH,NEXT3
INC @R0
CJNE @R0,#06H,ADDTIME11
MOV @R0,#00
SJMP ADDTIME11
NEXT3 : INC @R0
CJNE @R0,#0AH,ADDTIME11
MOV @R0,#00
ADDTIME11 :AJMP TIMESET
;--------减1--------
SUBTIME1 :JNB P1.3,$
CJNE R1,#0FEH,NEXT_1
DEC @R0
CJNE @R0,#0FFH,FIRSTS
MOV @R0,#02H
MOV A,CLOCK7
CLR C
SUBB A,#03H
JC SUBTIME11
MOV CLOCK7,#03H
FIRSTS : SJMP SUBTIME11
NEXT_1 :CJNE R1,#0FDH,NEXT_2
MOV A,CLOCK6
CJNE A,#02H,SECOND_S
MOV A,#03H
CLR C
SUBB A,@R0
JNC SECOND_S1
MOV @R0,#03H
SJMP SUBTIME11
SECOND_S1:DEC @R0
CJNE @R0,#0FFH,SUBTIME11
MOV @R0,#03H
SJMP SUBTIME11
SECOND_S :DEC @R0
CJNE @R0,#0FFH,SUBTIME11
MOV @R0,#09H
SJMP SUBTIME11
NEXT_2 :CJNE R1,#0FBH,NEXT_3
DEC @R0
CJNE @R0,#0FFH,SUBTIME11
MOV @R0,#05H
SJMP SUBTIME11
NEXT_3 : DEC @R0
CJNE @R0,#0FFH,SUBTIME11
MOV @R0,#09H
SUBTIME11 :AJMP TIMESET
DVT0:
MOV TH0,#0DCH
MOV TL0,#09H
MOV R0,#CLOCK4
INC @R0
CJNE @R0,#64H,CHUZHI
MOV @R0,#00H
DEC R0
INC @R0
CJNE @R0,#0AH,CHUZHI
MOV @R0,#00H
DEC R0
INC @R0
CJNE @R0,#06H,CHUZHI
MOV @R0,#00H
DEC R0
INC @R0
CJNE @R0,#0AH,CHUZHI
MOV @R0,#00H
DEC R0
INC @R0
CJNE @R0,#06H,CHUZHI
MOV @R0,#00H
MOV A,CLOCK5
CJNE A,#02,CHUZHI1
DEC R0
INC @R0
CJNE @R0,#04, CHUZHI
SJMP CHUZHI2
CHUZHI1:MOV @R0,#00H
DEC R0
INC @R0
CJNE @R0,#0AH,CHUZHI
CHUZHI2:MOV @R0,#00H
DEC R0
INC @R0
CJNE @R0,#03H,CHUZHI
MOV @R0,#00H
CHUZHI:MOV R0,#CLSECOND
INC @R0
CJNE @R0,#32H,BB
MOV @R0,#00H
CPL P3.0
BB:RETI
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;------延时子程序-------
DELAY :MOV R7,#50H ;1μs
DELAY1 :MOV R6,#10H ;1μs
DJNZ R6,$ ;2μs
DJNZ R7,DELAY1 ;2μs
RET
DELAY_1:MOV R7,#35H
DELAY_11:MOV R6,#10H
DJNZ R6,$
DJNZ R7,DELAY_11
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -