?? 時鐘溫度計程序12232f.asm
字號:
;****************************************************************;
; 時鐘\溫度計程序( 用1302\18B20\12232F顯示) ;
; ;
; AT89C52/12M晶振/2007.07.10 ;
; ;
;****************************************************************;
;
; 從1302中讀出的數據放在 52H(小時)51H(分鐘)50H(秒)
; 時間顯示緩沖單元:70H-79H: 72H-73H(45H-44H)小時,75H-76H(43H-42H)分鐘,78H-79H(41H-40H)秒
; 溫度顯示緩沖單元:60H-67H: :\空\百\十\個\小數點\小數位\空\℃
; 定時器T1為時間調整時候閃爍用。
; 顯示式樣第一行為: 時間: 15:38:12
; 顯示式樣第二行為: 溫度: 100.5 ℃
;*****************定義*********************;
PLAYFLG EQU P3.4 ; 主程序運行指示燈用
SCLK EQU P1.0 ; 1302時鐘口,1302第7腳
IO EQU P1.1 ; 數據口,1302第6腳
RST EQU P1.2 ; 使能口,1302第5腳
SPEAK BIT P0.2 ;
KEY2 BIT P3.2
KEYSW0 EQU P2.6 ; 調時按鍵
KEYSW1 EQU P2.7 ; 加1按鍵
hour DATA 52H ; 1302讀出時
mintue DATA 51H ; 1302讀出分
second DATA 50H ; 1302讀出秒
DS1302_ADDR DATA 3EH ; 1302需操作的地址數據存放
DS1302_DATA DATA 3DH ; 1302讀出或需寫入的數據存放
INTCON DATA 3CH ; 閃爍中斷計時用
CON_DATA DATA 06H ; 閃爍時間=65*6=0.39秒
CON1S DATA 3BH ; 1秒計時用,溫度1-2秒測量一次
CON1S_DATA DATA 0FH ; 測溫間隔定時值65*15ms
FLG1S EQU 07H ; 1秒到標志
;************LCD定義***********************;
LAMPBLAK EQU P1.4 ;背光燈控制,=0時開,=1時關.
CS EQU P1.5 ;液晶使能,=1操作,=0禁止.
SID EQU P1.6 ;液晶串行數據輸入口
CLK EQU P1.7 ;液晶串行操作時鐘口
;溫度部分定義
TEMPHEAD EQU 30H ;
TEMPL DATA 26H
TEMPH DATA 27H
TEMPHC DATA 28H
TEMPLC DATA 29H
TEMPDIN BIT P1.3
;
VSDA BIT P3.6 ; EEPROM數據傳送口,24C16的5腳
VSCL BIT P3.5 ; EEPROM時鐘傳送口 ,24C16的6腳
BDATA DATA 2AH ;百十個小數位比較用
SDATA DATA 2BH
GDATA DATA 2CH
XSDATA DATA 2DH
;
;*********************程序入口*********************;
;
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP INTT0
ORG 0013H
RETI
ORG 001BH
LJMP INTT1
ORG 0023H
RETI
ORG 002BH
RETI
;
;*****************;主程序;*********************;
;
START:
CLR CS ;液晶操作禁止
mov SP, #80H ;堆棧在80H上
MOV 70H,#0AH ;放北京時間后的“:”代碼字
MOV 71H,#0FH ;空
MOV 74H,#0AH ; ": "
MOV 77H,#0AH ; ": "
LCALL READTEMP ;上電時先溫度轉換一次
MOV TMOD,#11H ;計數器1,方式1
MOV TL1,#00H
MOV TH1,#00H
MOV TL0,#00H ;1秒定時用
MOV TH0,#00H
MOV INTCON,#CON_DATA
CLR 00H ;清閃爍標志
CLR 01H ;清閃爍標志
CLR A ;
MOV R0, A ;從24C16中 0000H開始讀出4個字節放在40H始單元
MOV R1, #BDATA ;
MOV R7, #04H ;
LCALL C16SERD ;
SETB EA
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允許寫1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振開始振蕩
LCALL WRITE
MOV DS1302_ADDR,#90H
MOV DS1302_DATA,#0A6H;1302充電,充電電流1.1MA
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止寫入1302
LCALL WRITE
;
LCALL SETUP ;LCD初始化
LCALL LOGON ;開機顯示畫面
LCALL TIME ;上行顯示"時間: 00:00:00"
LCALL TEMPP ;下行顯示“溫度:
SETB ET0
SETB TR0
CLR FLG1S
MOV CON1S,#CON1S_DATA
AJMP MAIN11
;以下主程序
MAIN1: MOV DS1302_ADDR,#85H ;讀出小時
LCALL READ
MOV hour,DS1302_DATA
MOV DS1302_ADDR,#83H ;讀出分鐘
LCALL READ
MOV mintue,DS1302_DATA
MOV DS1302_ADDR,#81H ;讀出秒
LCALL READ
MOV second,DS1302_DATA
;
MOV R0,hour ;小時分離,送顯示緩存
LCALL DIVIDE
MOV 73H,R1 ;時個位
MOV 44H,R1
MOV 72H,R2 ;時十位
MOV 45H,R2
MOV R0,mintue ;分鐘分離,送顯示緩存
LCALL DIVIDE
MOV 76H,R1 ;時個位
MOV 42H,R1
MOV 75H,R2 ;時十位
MOV 43H,R2
MOV R0,second ;秒分離,送顯示緩存
LCALL DIVIDE
MOV 79H,R1 ;秒個位
MOV 40H,R1
MOV 78H,R2 ;秒十位
MOV 41H,R2
LCALL TIMEUP ;時間顯示涮新一次
JNB KEYSW0,SETGG ;調整時間控制鍵
JNB KEY2,BAOJSET ;設置溫度報警
JBC FLG1S,MAIN11
AJMP MAIN1
SETGG: LJMP SETG
MAIN11:
LCALL READTEMP1 ;讀出溫度值子程序
LCALL CONVTEMP ;溫度BCD 碼計算處理子程序
LCALL DISPTEMP ;溫度值顯示涮新子程序
LCALL BAOJ ; 報警處理
LCALL READTEMP ;再發一次轉換溫度命令
SETB TR0
SETB ET0
CPL PLAYFLG ;程序運行指示燈
LJMP MAIN1
;
BAOJSET: LCALL DELAY1
JNB KEY2,BAOJSET
CLR ET0
CLR EA
CLR TR0
MOV A,#90H ;第二行左第一個字開始
LCALL WRITE_COM
MOV DPTR,#CHINESE4 ;16*16點陣“報警-----”
LCALL WRITE_HZ
MOV 66H,XSDATA
MOV 64H,GDATA
MOV 63H,SDATA
MOV 62H,BDATA
MOV 60H,#0AH ; :
MOV 61H,#0FH ; 空
MOV 65H,#11H ; 小數點.
MOV 67H,#0FH ; 空
LCALL TEMPUP ;顯示報警溫度
MOV R0,#62H
SET10:
JNB KEY2,SET2
JNB KEYSW0,SAFEADD1
JNB KEYSW1,SAFESUBB1
LCALL TEMPUP ;顯示報警溫度
LJMP SET10
SET2: LCALL DELAY1
JNB KEY2,SET2
INC R0
MOV A,R0
CLR C
CJNE A,#65H,SET101
SET101: JC SET10
AJMP SETOUT
;
SAFEADD1: LCALL DELAY1
JNB KEYSW0,SAFEADD1
MOV A,@R0
LCALL ADD11
MOV @R0,A
LJMP SET10
SAFESUBB1: LCALL DELAY1
JNB KEYSW1,SAFESUBB1
MOV A,@R0
LCALL SUBB11
MOV @R0,A
LJMP SET10
;
SETOUT: MOV BDATA,62H
MOV SDATA,63H
MOV GDATA,64H
MOV XSDATA,66H
CLR A ; 把4 字節寫入24C16的0000H開始地址中
MOV R0, A ;
MOV R1, #BDATA ;
MOV R7, #4 ;R7中的最大數據在1-16
LCALL C16PAWR ;
LCALL TEMPP
SETB ET0
SETB EA
SETB TR0
MAIN111: LJMP MAIN1
;
ADD11:
ADD A,#01H
CJNE A,#0AH,OLOOP
OLOOP: JC OUTT
MOV A,#00H
OUTT: RET
;
SUBB11:
JZ PPP1
DEC A
OUTP: RET
PPP1: MOV A,#09H
AJMP OUTP
;******************公歷設置程序*********************;
;
SETG : LCALL DELAY1
JB KEYSW0,MAIN111
SETB TR1
SETB ET1
CLR TR0
CLR ET0
MOV 78H,#00H ;調時時秒位為0
MOV 79H,#00H ;調時時秒位為0
MOV 40H,#00H ;調時時秒位為0
MOV 41H,#00H ;調時時秒位為0
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允許寫1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302停止振蕩
LCALL WRITE
GWAIT8: LCALL DELAY1
JNB KEYSW0,GWAIT8
;
SETG9: JNB KEYSW0,SETG10
JNB KEYSW1,GADDHOUR
AJMP SETG9
GADDHOUR: MOV R7,52H ;小時加一
LCALL ADD1
MOV 52H,A
CJNE A,#24H,GADDHOUR11
GADDHOUR11: JC GADDHOUR1
MOV 52H,#00H
GADDHOUR1: MOV DS1302_ADDR,#84H ;小時值送人1302
MOV DS1302_DATA,52H
LCALL WRITE
MOV R0,52H
LCALL DIVIDE ;小時值分離送顯示緩存
MOV 73H,R1
MOV 44H,R1
MOV 72H,R2
MOV 45H,R2
WAITT5:
JNB KEYSW1,WAITT5
AJMP SETG9
SETG10: SETB 01H ;調分時候閃標志
GWAIT10: LCALL DELAY1
JNB KEYSW0,GWAIT10
SETG11:
JNB KEYSW0,SETGOUT
JNB KEYSW1,GADDMINTUE
AJMP SETG11
GADDMINTUE: MOV R7,51H ;分鐘加一
LCALL ADD1
MOV 51H,A
CJNE A,#60H,GADDMINTUE11
GADDMINTUE11: JC GADDMINTUE1
MOV 51H,#00H
GADDMINTUE1: MOV DS1302_ADDR,#82H ;分鐘值送人1302
MOV DS1302_DATA,51H
LCALL WRITE
MOV R0,51H
LCALL DIVIDE ;分鐘值分離送顯示緩存
MOV 76H,R1
MOV 42H,R1
MOV 75H,R2
MOV 43H,R2
WAITT6:
JNB KEYSW1,WAITT6
AJMP SETG11
SETGOUT: LCALL DELAY1
JNB KEYSW0,SETGOUT
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302晶振開始振蕩
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;禁止寫入1302
LCALL WRITE
CLR 00H
CLR 01H
CLR ET1 ;關閃中斷
CLR TR1
SETB TR0
SETB ET0
LJMP MAIN1
;以下中斷程序用于1秒定時用
INTT0:
DJNZ CON1S,INTOUT
CLR TR0
CLR ET0
MOV CON1S,#CON1S_DATA
SETB FLG1S
INTOUT: RETI
;
BAOJ: SETB SPEAK
MOV A,62H
CJNE A,#0FH,BB3
MOV A,#00H
CLR C
BB3: CJNE A,BDATA,BAO1
MOV A,63H
CJNE A,#0FH,BB2
MOV A,#00H
CLR C
BB2: CJNE A,SDATA,BAO1
MOV A,64H
CLR C
CJNE A,GDATA,BAO1
MOV A,66H
CLR C
CJNE A,XSDATA,BAO1
BAOJING: CLR SPEAK
BBAO: RET
;
BAO1: JC BBAO
LJMP BAOJING
;
;****************閃動調時程序*********************;
;
INTT1: PUSH ACC
PUSH PSW
DJNZ INTCON,GFLASHOUT
MOV INTCON,#CON_DATA
GFLASH: CPL 00H
JB 00H,GFLASH5
MOV 72H,45H ;全顯示
MOV 73H,44H
MOV 75H,43H
MOV 76H,42H
MOV 78H,41H
MOV 79H,40H
GFLASHOUT: LCALL TIMEUP
POP PSW
POP ACC
RETI
;
GFLASH5: JB 01H,GFLASH6 ;調小時閃
MOV 72H,#0FH
MOV 73H,#0FH
AJMP GFLASHOUT
GFLASH6: MOV 75H,#0FH ;調分鐘閃
MOV 76H,#0FH
AJMP GFLASHOUT
;
;*******************加一程序***************;
;
ADD1: MOV A,R7
ADD A,#01H
DA A
RET
;
;*****************分離程序**********************;
;
DIVIDE: MOV A,R0
ANL A,#0FH
MOV R1,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV R2,A
RET
;
;****************寫1302程序****************;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -