|
昨天晚上剛弄完工的,相機(jī)不在,用手機(jī)拍的,不清晰。日歷,星期,溫度,農(nóng)歷滾動(dòng)顯示:高手看了別笑話。
100703122327aca058e1e4f374.jpg.thumb.jpg (76.66 KB, 下載次數(shù): 125)
下載附件
2015-7-18 20:13 上傳
1007031223b3ccad870653e48f.jpg.thumb.jpg (69.78 KB, 下載次數(shù): 147)
下載附件
2015-7-18 20:13 上傳
10070520192d2c8f513ede4609.bmp (1.22 MB, 下載次數(shù): 163)
下載附件
2015-7-18 20:13 上傳
1007052019abcd8c97a28fe45b.bmp (1.2 MB, 下載次數(shù): 209)
下載附件
2015-7-18 20:13 上傳
- ;***************引腳定義,根據(jù)使用不同的管腳而改動(dòng)*************
- ;農(nóng)歷,星期,1302程序由網(wǎng)上下載
- ABCD EQU P2 ;行掃描0-7
- SEG EQU P1.1 ; 紅
- SER EQU P1.0 ;內(nèi)容發(fā)送綠
- SRCLK EQU P1.2 ;串行CP端
- RCLK EQU P1.3 ;輸出CP端
- EN EQU P1.4 ;EN為138使能端.高電平關(guān)閉顯示;低電平顯示
- DQ EQU P3.6 ;溫度18b20
- BEEP EQU P3.7 ;蜂鳴器
- AN EQU P0.1 ;中間按鍵
- ANS EQU P0.0 ;上按鍵
- ANX EQU P0.4 ;下按鍵
- ANZ EQU P0.2 ;左按鍵
- ANY EQU P0.3 ;右按鍵
- T_CLK EQU P0.7 ;實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳
- T_IO EQU P0.6 ;實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳
- T_RST EQU P0.5 ;實(shí)時(shí)時(shí)鐘復(fù)位線引腳
- ;溫度存放地址
- A_BIT EQU 22H ;存放個(gè)位數(shù)變量
- B_BIT EQU 21H ;存放十位數(shù)變量
- C_BIT EQU 24H ;存放 小數(shù)變量
- D_BIT EQU 20H ;存放 百 位數(shù)變量
- FLAG EQU 26H ;DS18B20是否存在標(biāo)志
- XSD EQU 23H ;點(diǎn)
- WDFH EQU 25H ;℃
- WDGW EQU 27H ;溫度高位值
- WDDW EQU 28H ;溫度低位值
- QUSHU EQU 28H
- QUSHU1 EQU 08H
- QUSHU2 EQU 09H
- LSTZSJ1 EQU 0AH
- LSTZSJ EQU 0BH
- MIAO EQU 20H ;秒
- FEN EQU 21H ;分
- SHI EQU 22H ;時(shí)
- RIQI EQU 23H ;日
- YUE EQU 24H ;月 ACC.7=0為2000年
- XQI EQU 25H ;星期
- NIAN EQU 26H ;年
- start_year EQU 01; 定義查詢(xún)表起始年份,01--199 表示 1901-2099 年
- ;以下三單元為需轉(zhuǎn)換的公歷日期 是子程序的入口數(shù)據(jù)
- time_year EQU NIAN
- time_month EQU YUE ;BIT7 表示世紀(jì),為 1 表示 19 世紀(jì),為 0 表示 20 世紀(jì)
- time_date EQU RIQI
- ;以下三單元存轉(zhuǎn)換后農(nóng)歷日期 與入口單元重疊,如要保留入口信息,請(qǐng)重定義出口地址
- CONvert_yeAr DATA 3Fh
- CONvert_mONth DATA 3Eh ;BIT7 為 1 表示閏月
- CONvert_dAte DATA 3Dh
- temp_Byte4 DATA 3Bh
- temp_Byte5 DATA 3Ch
- temp_Byte1 EQU 20H
- temp_Byte2 EQU 21H
- temp_Byte3 EQU 22H
- ;*************************************************************
- ;*********************中斷入口程序****************************
- ORG 0000H
- LJMP MAIN
- ; ORG 0003H
- ; RETI
- ; ORG 000BH ; 定時(shí)器 T0中斷入口
- ; JMP EXT0 ; 跳至T0中斷子程序
- ; ORG 0013H
- ; RETI
- ;; ORG 001BH
- ; RETI
- ; ORG 0023H
- ; RETI
- ;***************主程序****************************************/
- MAIN: MOV SP,#69H ;堆棧首址
- LCALL BEEP_BZ
- LCALL AN_DEL
- LCALL BEEP_BZ ;開(kāi)機(jī)鳴響2聲
- LCALL RE_TEMP ;對(duì)DS18B20初始化及讀取
- LCALL GET1302 ;讀時(shí)間
- MOV A,MIAO
- JNB ACC.7,STRAT ;如果秒最高位是1初始化時(shí)鐘
- LCALL IN_1302 ;時(shí)鐘芯片初始化
- STRAT: ; MOV SP,#69H ;堆棧首址
- ; MOV R0,#30H ;初使化寄存顯示單元
- ; MOV R1,#74 ;30H-單元清零
- ; MOV A,#0
- ST: ; MOV @R0,A
- ; INC R0
- ; DJNZ R1,ST
- ST1:
- LCALL Get1302 ;讀取時(shí)間
- LCALL XSSJ ;時(shí)間數(shù)據(jù)轉(zhuǎn)換
- LCALL PLAY1 ;顯示時(shí)間
- MOV A,MIAO ;如果秒=30顯示滾動(dòng)日期
- CJNE A,#30H,ST2
- LCALL GDRQ
- ST2: JNB ANZ,WD ;按下左鍵調(diào)用溫度顯示
- ; JNB ANY,YYUE ;按下右鍵調(diào)用音樂(lè)
- JNB ANX,G_DRQ ;按下下鍵調(diào)用滾動(dòng)顯示日歷
- JNB AN,TZSJ ;按下中間按鍵調(diào)用調(diào)時(shí)
- JMP ST1
- ;*****************************
- G_DRQ:LCALL GDRQ
- JMP ST1
- ;*****************************************************
- WD: LCALL AN_DEL
- JB ANZ,WD_OUT
- LCALL BEEP_BZ
- WD_1: LCALL RE_TEMP ;讀取溫度
- LCALL TURN ;轉(zhuǎn)化溫度子程序
- LCALL XSWD ;溫度數(shù)據(jù)轉(zhuǎn)換
- LCALL PLAY ;顯示
- JB ANZ,WD_1
- LCALL AN_DEL
- LCALL BEEP_BZ
- JNB ANZ,WDOUT
- WD_OUT:RET
- GDRQ: LCALL Get1302 ;讀取時(shí)間
- LCALL RQFL ;調(diào)用日期分離程序
- LCALL L30_
- RET
- WDOUT:LJMP ST1
- ;*******************************************調(diào)整時(shí)間程序*************
- TZSJ:
- LCALL AN_DEL
- JNB AN,$
- LCALL BEEP_BZ
- TZSJ_1: LCALL S_NIAN ;顯示調(diào)年
- JNB ANS, N_J1 ;年+1
- JNB ANX,N_1 ;年-1
- JNB ANY,TZ_YUE ;調(diào)月
- JNB AN,TZSJOUT;確認(rèn)
- JNB ANZ, TZ_NOUT
- JMP TZSJ_1
- TZSJOUT:;LCALL GetWeek
- LCALL Set1302
- LCALL BEEP_BZ
- TZ_NOUT: LJMP ST1
- N_J1: LCALL AN_DEL ;年+1
- LCALL BEEP_BZ
- LCALL NIAN_J1
- LJMP TZSJ_1
- N_1: LCALL AN_DEL ;年-1
- LCALL BEEP_BZ
- LCALL NIAN_1
- LJMP TZSJ_1
- ;***************************************
- Y_J1: LCALL AN_DEL;月+1
- LCALL BEEP_BZ
- LCALL YUE_J1
- LJMP TZ_YUE1
- Y_1: LCALL AN_DEL ;月-1
- LCALL BEEP_BZ
- LCALL YUE_1
- LJMP TZ_YUE1
- ;*********
- TZ_YUE: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_YUE1: LCALL S_YUE;顯示調(diào)月
- JNB ANS,Y_J1;月+1
- JNB ANX,Y_1;月-1
- JNB ANY,TZ_RIQI;調(diào)日期
- JNB AN,TZ_YUEOUT
- JNB ANZ, TZ_YOUT
- JMP TZ_YUE1
- TZ_YUEOUT:LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_YOUT:LJMP ST1
- ;***************************************
- R_J1: LCALL AN_DEL;月+1
- LCALL BEEP_BZ
- LCALL RIQI_J1
- LJMP TZ_RIQI1
- R_1: LCALL AN_DEL ;月-1
- LCALL BEEP_BZ
- LCALL RIQI_1
- LJMP TZ_RIQI1
- ;*********
- TZ_RIQI: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_RIQI1: LCALL S_RIQI;顯示調(diào)日期
- JNB ANS,R_J1;日期+1
- JNB ANX,R_1;日期-1
- JNB ANY,TZ_SHI;
- JNB AN,TZ_RIQIOUT
- JNB ANZ, TZ_ROUT
- JMP TZ_RIQI1
- TZ_RIQIOUT:;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_ROUT:LJMP ST1
- ;***************************************
- S_J1: LCALL AN_DEL;時(shí)+1
- LCALL BEEP_BZ
- LCALL SHI_J1
- LJMP TZ_SHI1
- S_1: LCALL AN_DEL ;時(shí)-1
- LCALL BEEP_BZ
- LCALL SHI_1
- LJMP TZ_SHI1
- ;*********
- TZ_SHI: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_SHI1: LCALL S_SHI;顯示調(diào)時(shí)
- JNB ANS,S_J1;時(shí)+1
- JNB ANX,S_1;時(shí)-1
- TZ_SHI4:JNB ANY,TZ_FEN
- JNB AN,TZ_SHIOUT
- JNB ANZ, TZ_SOUT
- JMP TZ_SHI1
- TZ_SHIOUT:;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_SOUT: LJMP ST1
- ;*********
- TZ_FEN: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_FEN1: LCALL S_FEN;顯示調(diào)分
- JNB ANS,F_J1;分+1
- JNB ANX,F_1;分-1
- ;TZ_RIQI4:JNB ANY,TZ_FEN;
- JNB AN,TZ_FENOUT
- JNB ANZ, TZ_FOUT
- JMP TZ_FEN1
- TZ_FENOUT:MOV MIAO,#0
- ;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_FOUT:LJMP ST1
- ;***************************************
- F_J1: LCALL AN_DEL;時(shí)+1
- LCALL BEEP_BZ
- LCALL FEN_J1
- LJMP TZ_FEN1
- F_1: LCALL AN_DEL ;時(shí)-1
- LCALL BEEP_BZ
- LCALL FEN_1
- LJMP TZ_FEN1
- ;***************************************************
- ;YYUE: LCALL START1 ;調(diào)用音樂(lè)
- ; RET
- SHIJ: LCALL IN_1302 ;調(diào)用時(shí)間初始化
- RET
- AN_DEL: MOV R6,#0
- AN_DEL1:LCALL DEL
- DJNZ R6,AN_DEL1
- RET
- ;********************調(diào)整年月日程序*********************************/=======================================================================
- S_NIAN: MOV 40H,#52 ;顯示調(diào)年
- MOV 41H,#30
- MOV A,NIAN
- ANL A,#0FH
- MOV 43H,A
- MOV A,NIAN
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_YUE: MOV 40H,#52 ;顯示調(diào)月
- MOV 41H,#31
- MOV A,YUE
- ANL A,#0FH
- MOV 43H,A
- MOV A,YUE
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_RIQI: MOV 40H,#52 ;顯示調(diào)日期
- MOV 41H,#32
- MOV A,RIQI
- ANL A,#0FH
- MOV 43H,A
- MOV A,RIQI
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_SHI: MOV 40H,#52 ;顯示調(diào)時(shí)
- MOV 41H,#53
- MOV A,SHI
- ANL A,#0FH
- MOV 43H,A
- MOV A,SHI
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_FEN: MOV 40H,#52 ;顯示調(diào)分
- MOV 41H,#54
- MOV A,FEN
- ANL A,#0FH
- MOV 43H,A
- MOV A,FEN
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- ;;;;;;;;;;;;;;;;;;;;
- FEN_J1:MOV LSTZSJ1,FEN;分+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#60,FEN_J12;小時(shí)60清0
- MOV LSTZSJ,#0
- FEN_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV FEN,LSTZSJ1
- RET
- FEN_1: MOV LSTZSJ1,FEN;分-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#0,FEN_12 ;分是0加60
- MOV LSTZSJ,#60
- FEN_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV FEN,LSTZSJ1
- RET
- ;;;;
- SHI_J1:MOV LSTZSJ1,SHI;小時(shí)+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#24,SHI_J12;小時(shí)24清0
- MOV LSTZSJ,#0
- SHI_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV SHI,LSTZSJ1
- RET
- SHI_1: MOV LSTZSJ1,SHI;小時(shí)-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#0,SHI_12 ;小時(shí)是0加24
- MOV LSTZSJ,#24
- SHI_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV SHI,LSTZSJ1
- RET
- ;;;;
- RIQI_J1:MOV LSTZSJ1,RIQI;日+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#32,RIQI_J12;日是32清0
- MOV LSTZSJ,#1
- RIQI_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV RIQI,LSTZSJ1
- RET
- RIQI_1: MOV LSTZSJ1,RIQI;日-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,RIQI_12 ;日是1加32
- MOV LSTZSJ,#32
- RIQI_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV RIQI,LSTZSJ1
- RET
- ;;;;
- YUE_J1:MOV LSTZSJ1,YUE;月+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#13,YUE_J12;月是13清0
- MOV LSTZSJ,#1
- YUE_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV YUE,LSTZSJ1
- RET
- YUE_1: MOV LSTZSJ1,YUE;月-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,YUE_12
- MOV LSTZSJ,#13
- YUE_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV YUE,LSTZSJ1
- RET
- NIAN_J1:MOV LSTZSJ1,NIAN;年+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;年+1
- MOV A,LSTZSJ
- CJNE A,#100,NIAN_J12;年是100清0
- MOV LSTZSJ,#01
- NIAN_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV NIAN,LSTZSJ1
- RET
- NIAN_1: ;CJNE A,#13H,SMAJ_QR
- MOV LSTZSJ1,NIAN;年-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,NIAN_12
- MOV LSTZSJ,#100
- NIAN_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV NIAN,LSTZSJ1
- RET
- ;;;;;;;;;;;;;
- TSSJTZ:MOV A,LSTZSJ1;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- ANL A,#0FH
- MOV LSTZSJ,A
- MOV A,LSTZSJ1
- SWAP A
- ANL A,#0FH
- MOV B,#10
- MUL AB
- ADD A,LSTZSJ
- MOV LSTZSJ,A
- RET
- TSSJTZ1:MOV A,LSTZSJ ;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV B,#10
- DIV AB
- SWAP A
- MOV LSTZSJ,A
- MOV A,B
- ORL A,LSTZSJ
- MOV LSTZSJ1,A
- RET ;*/
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE_88 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF2: LCALL LINE_11 ;掃描顯示1行子程序
- DJNZ 2BH,FF2 ;掃描下一行
- MOV 2DH,#0
- RET
- ;*********掃描顯示一行子程序********************
- LINE_11: LCALL MSTR_YD_
- MOV 30H,#0
- MOV 31H,#0
- LCALL SEND_11 ;發(fā)送串行口子程序
- LCALL XTH ;選通行子程序
- LCALL DL22US
- INC 2DH
- RET
- SEND_11: MOV R0,#30H
- MOV R1,#35H
- MOV R5,#4 ;一行有2個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_11: MOV R2,#8 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- LCALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_11 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET ;
- ;*************************************** 日期分離程序====================================
- RQFL: MOV 40H,#12
- MOV 41H,#12
- MOV 42H,#12
- MOV 43H,#12
- MOV A,YUE
- JB ACC.7,RQFL1
- MOV 44H,#2
- MOV 45H,#0
- JMP RQFL3
- RQFL1: MOV 44H,#1
- MOV 45H,#9
- RQFL3:
- MOV A,NIAN
- ANL A,#0FH
- MOV 47H,A
- MOV A,NIAN
- SWAP A
- ANL A,#0FH
- MOV 46H,A
- MOV 48H,#30 ;顯示年
- MOV A,YUE
- ANL A,#0FH
- MOV 4AH,A
- MOV A,YUE
- SWAP A
- ANL A,#03H
- JZ YUE_S_1
- YUE_S_2:MOV 49H,A
- YUE_S_3: MOV 4BH,#31 ;顯示 月
- MOV A,RIQI
- ANL A,#0FH
- MOV 4DH,A
- MOV A,RIQI
- SWAP A
- ANL A,#03H
- JZ RIQI_S_1
- RIQI_S_2:MOV 4CH,A
- RIQI_S_3:MOV 4EH,#32 ;顯示 日
- MOV 4FH,#12
- MOV 50H,#16 ;顯示星期
- MOV 51H,#17
- MOV 52H,#12
- LCALL GetWeek
- MOV A,XQI
- ANL A,#07H
- CJNE A,#0,XQ_1
- MOV 53H,#32
- JMP XQ_OUT
- RIQI_S_1:MOV 4CH,#12
- JMP RIQI_S_3
- YUE_S_1: MOV 49H,#12
- JMP YUE_S_3
- XQ_1: ADD A,#41
- MOV 53H,A
- XQ_OUT:
- MOV 54H,#12 ;空格
- LCALL RE_TEMP ;讀取溫度
- LCALL TURN ;轉(zhuǎn)化溫度子程序
- MOV 55H,#15 ;T
- MOV 56H,#14 ;:
- MOV 57H,20H ;溫度百位
- MOV 58H,21H ;溫度十位
- MOV 59H,22H ;溫度個(gè)位
- MOV 5AH,#13 ;小數(shù)點(diǎn)
- MOV 5BH,24H ;溫度小數(shù)位
- MOV 5CH,#11 ;℃符號(hào)
- MOV 5DH,#12
- MOV 5EH,#33 ;農(nóng)
- MOV 5FH,#34 ;歷
- LCALL Get1302
- LCALL CONvert ;調(diào)用公歷轉(zhuǎn)農(nóng)歷程序
- MOV A,CONvert_mONth
- JNB ACC.7,RQFL4
- MOV 60H,#51
- JMP RQFL5
- RQFL4:MOV 60H,#12
- RQFL5:LCALL NL_YUE ;調(diào)用農(nóng)歷月份
- MOV 62H,#31 ;顯示月
- LCALL NL_RIQI
- MOV 65H,#12
- MOV 66H,#12
- MOV 67H,#12
- MOV 68H,#12
- ; MOV 69H,#12
- RQFLB: RET
- ;***********************
- NL_YUE: MOV A, CONvert_mONth ;農(nóng)歷月
- ANL A,#1FH
- JNB ACC.4,NL_RIQI0
- ANL A,#0FH
- ADD A,#10
- NL_RIQI0: CJNE A,#1,NL_YUE1
- MOV 61H,#35
- JMP NL_YOUT
- NL_YUE1: CJNE A,#10,NL_YUE2
- MOV 61H,#39
- JMP NL_YOUT
- NL_YUE2: CJNE A,#11,NL_YUE3
- MOV 61H,#37
- JMP NL_YOUT
- NL_YUE3: CJNE A,#12,NL_YUE4
- MOV 61H,#38
- JMP NL_YOUT
- NL_YUE4: ADD A,#41
- MOV 61H,A
- NL_YOUT: RET
- ;***************
- NL_RIQI:MOV A, CONvert_dAte ;農(nóng)歷日
- SWAP A
- ANL A,#0FH
- CJNE A,#0,NL_RIQI1
- MOV 63H,#36 ;顯示 初
- JMP NL_ROUT
- NL_RIQI1:CJNE A,#1,NL_RIQI2
- MOV 63H,#39 ;顯示 十
- JMP NL_ROUT
- NL_RIQI2:CJNE A,#2,NL_RIQI3
- MOV 63H,#40 ;顯示 二十
- JMP NL_ROUT
- NL_RIQI3:CJNE A,#3,NL_ROUT
- MOV 63H,#41 ;顯示 三十
- JMP NL_ROUT
- NL_ROUT:MOV A, CONvert_dAte ;農(nóng)歷日
- ANL A,#0FH
- CJNE A,#0,NL_RIQI4
- MOV 64H,#39 ;顯示 十
- JMP NL_RIQI5
- NL_RIQI4:ADD A,#41
- MOV 64H,A
- NL_RIQI5: RET
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
- ;;;;;;;;;;;;;;;;;;;;;;;
- L30_: MOV 2DH,#0
- MOV QUSHU,#40H
- MOV 2FH,#37 ;共有多少個(gè)半角字符,一個(gè)漢字等于兩個(gè)字符,個(gè)數(shù)值為實(shí)際字?jǐn)?shù)*2+屏長(zhǎng)度數(shù)
- HHH_: LCALL L31_ ;. 掃描一個(gè)字節(jié)
- DJNZ 2FH,HHH_ ;字?jǐn)?shù)沒(méi)完繼續(xù)
- RET
- L31_: MOV B, #1 ;每次移入內(nèi)存單元的數(shù)據(jù)要左移次數(shù)次值 ,從第一開(kāi)始。
- II_: MOV 29H,#5 ;左移速度
- III_: LCALL L32_ ;掃描顯示1幀
- DJNZ 29H,III_ ;速度沒(méi)完繼續(xù)
- INC B ;左移次數(shù)+1
- MOV A,#9
- CJNE A,B,II_ ;如果B中的數(shù)超過(guò)8就完成1個(gè)字節(jié)的8次左移顯示,否則繼續(xù)循環(huán).
- INC QUSHU ;日期數(shù)據(jù)+1---5CH→
- RET
- L32_: MOV 2BH,#8 ;掃描的行數(shù),共8行
- JJ_: LCALL L33_ ;掃描顯示1行子程序
- INC 2DH
- DJNZ 2BH,JJ_ ;8行沒(méi)完繼續(xù)
- MOV 2DH,#0 ;8行完成后再?gòu)?行開(kāi)始掃描
- RET
- L33_: MOV 2EH,B ;顯示內(nèi)容要左移幾次數(shù)再顯示的賦值給2EH單元
- LCALL SEND_YD ;發(fā)送串行口子程序
- LCALL XT_H ;選通行子程序
- LCALL MSTR_YD_ ;將顯示內(nèi)容移入內(nèi)存單元30H→
- EE_: LCALL ZY
- DJNZ 2EH,EE_
- LCALL ZYXZ ;左移速度同步修正
- RET
- MSTR_YD_:SETB RS1 ;R0,R1-數(shù)據(jù)存放起始地址,2DH行數(shù)據(jù),R3-21H,22H臨時(shí)數(shù)據(jù),R4-每屏的字節(jié)數(shù), ,20H日期數(shù)據(jù)起始地址
- SETB RS0
- MOV R0,#30H
- MOV R1,#35H
- MOV R4,#5 ;每幕顯示的字節(jié)數(shù)加1
- BB_YD_: LCALL L_SHUJU
- MOV @R0,A
- MOV @R1,A
- INC QUSHU ;加1,移到下一個(gè)字節(jié)的對(duì)應(yīng)位置
- INC R0
- INC R1
- DJNZ R4,BB_YD_
- MOV A,QUSHU
- CLR C
- SUBB A,#5
- MOV QUSHU,A
- CLR RS1
- CLR RS0
- RET
- ;;;使用R0,R1,R6,R7,B,2DH
- L_SHUJU: MOV DPTR,#TAB10
- MOV QUSHU1,R0
- MOV QUSHU2,R1
- MOV R6,B
- MOV R0,QUSHU
- L_SHU: MOV A,@R0
- MOV B,#8
- MUL AB
- MOV R7,A
- MOV A,DPH
- ADD A,B
- MOV DPH,A
- MOV A,R7
- MOV B,2DH
- ADD A,B
- MOVC A,@A+DPTR
- MOV R0,QUSHU1
- MOV R1,QUSHU2
- MOV B,R6
- RET
- ;*****************************發(fā)送數(shù)據(jù)到串口子程序*****************************************************/
- SEND_YD: MOV R0,#30H
- MOV R5,#4 ;如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_YD: CLR C ;清C方便每個(gè)字節(jié)的移動(dòng)
- MOV R2,#8 ;每個(gè)字節(jié)有8位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入A
- CPL A ;取反
- LCALL DD1_YD ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_YD ;8個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- DD1_YD: CLR SRCLK ;清串行CP端
- RLC A ;將每個(gè)字節(jié)移位
- ; MOV SER,C ;將移入C的位移入信號(hào)端
- MOV SEG,C
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD1_YD ;每個(gè)字節(jié)位移8次夠了沒(méi)有?
- RET
- ;*******選通行子程序***2BH行數(shù)據(jù)*********************************************************************************/
- XT_H: CLR RCLK ;將輸出CP變?yōu)榈碗娖綖樯仙刈鳒?zhǔn)備
- SETB EN ;將使能端變?yōu)楦唠娖綖橄陆笛刈鳒?zhǔn)備
- MOV R5,2BH
- CJNE R5,#7,HSM_1
- MOV ABCD,#11111110B
- JMP XTH_OUT
- HSM_1: CJNE R5,#6,HSM_2
- MOV ABCD,#11111101B
- JMP XTH_OUT
- HSM_2: CJNE R5,#5,HSM_3
- MOV ABCD,#11111011B
- JMP XTH_OUT
- HSM_3: CJNE R5,#4,HSM_4
- MOV ABCD,#11110111B
- JMP XTH_OUT
- HSM_4: CJNE R5,#3,HSM_5
- MOV ABCD,#11101111B
- JMP XTH_OUT
- HSM_5: CJNE R5,#2,HSM_6
- MOV ABCD,#11011111B
- JMP XTH_OUT
- HSM_6: CJNE R5,#1,HSM_7
- MOV ABCD,#10111111B
- JMP XTH_OUT
- HSM_7: CJNE R5,#8,XTH_OUT
- MOV ABCD,#01111111B
- XTH_OUT:
- SETB RCLK ;輸出CP為上升沿,顯示一個(gè)
- CLR EN ;138可顯示
- RET
- ;**********左移一位子程序*******************************************************************************/
- ZY: ;30H后存入顯示內(nèi)容,R0為顯示未址,R2為移出高位個(gè)數(shù) 字?jǐn)?shù)*2+1
- SETB RS1
- CLR RS0
- MOV R2,#5
- MOV R0, #34H ;顯示單元未址
- CLR C
- CC: MOV A, @R0
- RLC A ;將后一字節(jié)的最高位移到C里,再移到前一字節(jié)的最低位
- MOV @R0, A
- DEC R0
- DJNZ R2, CC
- CLR C
- CLR RS1
- CLR RS0
- RET
- ;********************移動(dòng)查模式時(shí)速度同步修正子程序*****************************************************/
- ZYXZ: MOV R5,B
- MOV A,#9
- SUBB A,R5
- MOV R4,A
- AA: LCALL DL22US
- NOP
- DJNZ R4 ,AA
- RET
- ;*********************************************************************************/
- ;********************時(shí)間數(shù)據(jù)轉(zhuǎn)換*************************************=====================================================================*/
- XSSJ:
- MOV A,FEN ;分
- MOV B,#10h
- DIV AB ;把41H高低4位分開(kāi)
- MOV 43H,A ;高4位存入
- MOV A,B
- MOV 44H,A ;低4位存入
- MOV A,MIAO ;秒
- MOV B,#10h
- DIV AB ;把40H高低4位分開(kāi)
- mov 45H,A ;高4位存入
- mov a,b
- mov 46H,a ;低4位存入
- MOV A,SHI
- MOV B,#16
- DIV AB
- MOV 40H,A
- MOV A,B
- MOV 41H,A
- MOV 42H,#15
- MOV A,40H
- JNZ XSSJ_1
- MOV 40H,#12
- XSSJ_1: RET
- ;*************************時(shí)間顯示程序****************************
- PLAY1: MOV DPTR,#TABX
- MOV 2DH,#0
- MOV 2FH,#20 ;速度
- GG1: CALL LINE_8 ;掃描顯示1幀
- DJNZ 2FH,GG1
- RET
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE_8 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF1: CALL LINE_1 ;掃描顯示1行子程序
- DJNZ 2BH,FF1 ;掃描下一行
- MOV A,2DH
- SUBB A ,#8 ;掃描完8行后要重頭開(kāi)始,在MSTR子程序中,掃8行后會(huì)增加8,這里-8
- MOV 2DH,A
- RET
- ;*********掃描顯示一行子程序********************
- LINE_1: CALL MSTR_R ;將顯示內(nèi)容移入內(nèi)存單元
- CALL MSTR_G
- MOV 35H,#0
- MOV 36H,#0
- ; MOV 3BH,#0
- MOV 3AH,#0
- CALL SEND_1 ;發(fā)送串行口子程序
- CALL XTH ;選通行子程序
- CALL DL22US
- INC 2DH
- RET
- ;***發(fā)送數(shù)據(jù)到串口子程序*取紅色30H-34H,綠色35H-39H***2EH,2FH緩沖**************
- SEND_1: MOV R0,#30H
- MOV R1,#38H
- MOV R5,#2 ;一行有2個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_1: MOV R2,#5 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_1 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- CALL SEND_2
- CALL SEND_3
- RET ;
- SEND_2: MOV R0,#32H
- MOV R1,#3AH
- MOV R5,#1
- LQ_2: MOV R2,#2 ;每個(gè)字節(jié)有2位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_2 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- SEND_3: MOV R0,#33H
- MOV R1,#3BH
- MOV R5,#4
- LQ_3: MOV R2,#5 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_3 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- DD_1: CLR SRCLK ;清串行CP端
- CLR C
- MOV A,R6
- RLC A ;將每個(gè)字節(jié)移位
- MOV R6,A
- CPL C
- MOV SER,C ;紅色
- CLR C
- MOV A,R7
- RLC A
- MOV R7,A
- CPL C
- MOV SEG,C ;綠色
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD_1 ;每個(gè)字節(jié)位移5次夠了沒(méi)有?
- RET
- ;*************************溫度顯示程序****************************
- PLAY: MOV DPTR,#TABX
- MOV 2DH,#0
- MOV 2FH,#60 ;速度
- GG: CALL LINE8 ;掃描顯示1幀
- DJNZ 2FH,GG
- RET
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE8 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF: CALL LINE1 ;掃描顯示1行子程序
- DJNZ 2BH,FF ;掃描下一行
- MOV A,2DH
- SUBB A ,#8 ;掃描完8行后要重頭開(kāi)始,在MSTR子程序中,掃8行后會(huì)增加8,這里-8
- MOV 2DH,A
- RET
- ;*********掃描顯示一行子程序********************
- LINE1: CALL MSTR_R ;將顯示內(nèi)容移入內(nèi)存單元
- CALL MSTR_G
- MOV 34H,#0
- MOV 35H,#0
- MOV 3BH,#0
- CALL SEND ;發(fā)送串行口子程序
- CALL XTH ;選通行子程序
- CALL DL22US
- INC 2DH
- RET
- ;****************************************************************************
- ;**顯示內(nèi)容移入內(nèi)存單元子程序*取紅色到30H-34H,綠色35H-39H*2DH取字節(jié)數(shù)據(jù)***********************
- MSTR_R: MOV R0,#30H
- MOV R4,#7 ;每幕顯示的字?jǐn)?shù)加1;如每幕顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- MOV R1,#40H
- BB_R:
- MOV A,@R1
- MOV B,#8
- MUL AB
- ADD A,2DH
- MOVC A, @A+DPTR
- MOV @R0,A
- INC R0
- INC R1
- DJNZ R4,BB_R
- MOV R1,#40H
- RET
- MSTR_G: MOV R0,#38H
- MOV R4,#7 ;每幕顯示的字?jǐn)?shù)加1;如每幕顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- MOV R1,#40H
- BB_G:
- MOV A,@R1
- MOV B,#8
- MUL AB
- ADD A,2DH
- MOVC A, @A+DPTR
- MOV @R0,A
- INC R0
- INC R1
- DJNZ R4,BB_G
- MOV R1,#40H
- RET
- ;***發(fā)送數(shù)據(jù)到串口子程序*取紅色30H-34H,綠色35H-39H***R6,R7**************
- SEND: MOV R0,#30H
- MOV R1,#38H
- MOV R5,#6 ;一行有4個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ: MOV R2,#5 ;每個(gè)字節(jié)有8位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- LCALL DD1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ ;8個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- CLR SRCLK
- SETB C
- MOV SER,C
- MOV SEG,C
- SETB SRCLK
- RET ;
- DD1: CLR SRCLK ;清串行CP端
- CLR C
- MOV A,R6
- RLC A ;將每個(gè)字節(jié)移位
- MOV R6,A
- CPL C
- MOV SER,C ;紅色
- CLR C
- MOV A,R7
- RLC A
- MOV R7,A
- CPL C
- MOV SEG,C ;綠色
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD1 ;每個(gè)字節(jié)位移8次夠了沒(méi)有?
- RET
- ;*******選通行子程序***2BH行數(shù)據(jù)*********************************************************************************/
- XTH: CLR RCLK ;將輸出CP變?yōu)榈碗娖綖樯仙刈鳒?zhǔn)備
- SETB EN ;將使能端變?yōu)楦唠娖綖橄陆笛刈鳒?zhǔn)備
- MOV R5,2BH
- CJNE R5,#8,HSM1
- MOV ABCD,#11111110B
- JMP XTHOUT
- HSM1: CJNE R5,#7,HSM2
- MOV ABCD,#11111101B
- JMP XTHOUT
- HSM2: CJNE R5,#6,HSM3
- MOV ABCD,#11111011B
- JMP XTHOUT
- HSM3: CJNE R5,#5,HSM4
- MOV ABCD,#11110111B
- JMP XTHOUT
- HSM4: CJNE R5,#4,HSM5
- MOV ABCD,#11101111B
- JMP XTHOUT
- HSM5: CJNE R5,#3,HSM6
- MOV ABCD,#11011111B
- JMP XTHOUT
- HSM6: CJNE R5,#2,HSM7
- MOV ABCD,#10111111B
- JMP XTHOUT
- HSM7: CJNE R5,#1,XTHOUT
- MOV ABCD,#01111111B
- XTHOUT:
- SETB RCLK ;輸出CP為上升沿,顯示一個(gè)
- CLR EN ;138可顯示
- RET
- ;******22US延時(shí)子程序********
- DL22US: MOV R7,#50
- DJNZ R7,$
- RET ;
- DEL: MOV R7,#0
- DJNZ R7,$
- RET
- BEEP_BZ:; CLR BEEP ;蜂鳴器鳴響
- MOV R6,#40
- BEEP_2: CALL DEL
- CPL BEEP
- DJNZ R6, BEEP_2
- SETB BEEP ;蜂鳴器停止
- RET
- ;***********************************字碼表****************************************
- TAB10:
- DB 038H,044H,082H,082H,082H,082H,044H,038H;"0",0
- DB 010H,070H,010H,010H,010H,010H,010H,0FEH;"1",1
- DB 07CH,082H,082H,006H,00CH,070H,0FAH,09EH;"2",2
- DB 07EH,044H,00CH,038H,006H,002H,086H,07CH;"3",3
- DB 004H,00CH,01CH,034H,064H,0FEH,004H,03FH;"4",4
- DB 07EH,042H,040H,07CH,042H,002H,086H,07CH;"5",5
- DB 03CH,062H,0C0H,0FCH,082H,082H,0C2H,07CH;"6",6
- DB 0FEH,084H,088H,018H,010H,030H,020H,020H;"7",7
- DB 07CH,082H,082H,07CH,086H,082H,0C6H,07CH;"8",8
- DB 07CH,086H,082H,082H,07EH,002H,084H,078H;"9",9
- DB 000H, 000H, 000H, 000H, 0FCH, 000H, 000H, 000H ;- 10
- DB 080H, 078H, 084H, 080H, 080H, 080H, 084H, 078H ;"C",11
- DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H ;無(wú)顯示,12
- DB 000H, 000H, 000H, 000H, 030H, 030H, 000H, 000H ;點(diǎn),13
- DB 000H, 000H, 030H, 030H, 000H, 030H, 030H, 000H ;: 14
- DB 0FEH,092H,010H,010H,010H,010H,010H,038H;"T",15
- DB 7EH,42H,7EH,7EH,48H,7EH,88H,7EH ;溫 16
- DB 57H,0FDH,57H,75H,57H,0FDH,55H,8BH ;度 17
- ;DB 0D6H, 092H, 092H, 092H, 09AH, 06CH, 064H, 044H;"W",16
- ;DB 0EEH, 044H, 048H, 070H, 050H, 048H, 044H, 0EEH;"K",17
- DB 0FCH,042H,042H,07CH,040H,040H,0E0H,000H;"P",18
- DB 0CEH,084H,084H,0FCH,084H,084H,0CEH,000H;"H",19
- DB 000H,000H,078H,084H,0FCH,080H,07CH,000H;"e",20
- DB 000H,000H,0DCH,078H,030H,078H,0ECH,000H;"x",21
- DB 018H,000H,038H,008H,008H,008H,008H,0F0H;"j",22
- DB 000H,000H,0FEH,092H,092H,092H,0DAH,000H;"m",23
- DB 000H,020H,000H,060H,020H,020H,020H,0F8H;"i",24
- DB 000H,000H,000H,0D8H,066H,042H,042H,0E7H;"n",25
- DB 0E7H,042H,044H,024H,02CH,028H,018H,010H;"V",26
- DB 03CH,05AH,0AAH,0AAH,0B4H,042H,03CH,000H;"@",27
- DB 000H,000H,03CH,062H,040H,042H,03CH,000H;"c",28
- DB 000H,000H,03CH,042H,042H,042H,03CH,000H;"o",29
- DB 010H,03EH,048H,0BCH,028H,07EH,008H,008H;年,30
- DB 03CH,024H,03CH,024H,03CH,024H,044H,08CH;月,31
- DB 0FCH,084H,084H,0FCH,084H,084H,084H,0FCH;日,32
- DB 10H,0FEH,92H,20H,34H,68H,0A4H,32H;農(nóng),33
- DB 7EH,48H,7EH,4AH,4AH,4AH,4AH,96H;歷,34
- DB 000H,0FEH,010H,010H,05CH,050H,050H,0FEH;正,35
- DB 040H,0E0H,03EH,06AH,0CAH,04AH,052H,044H;初,36
- DB 010H,01EH,024H,058H,018H,024H,0DBH,018H;冬,37
- DB 000H,075H,05FH,075H,05FH,075H,057H,0B7H;臘,38
- DB 010H,010H,010H,0FEH,010H,010H,010H,010H;十,39
- DB 000H,044H,0FEH,044H,044H,044H,044H,07CH;二十,40
- DB 054H,054H,054H,0FEH,054H,054H,054H,094H;卅,41
- DB 000H,000H,000H,000H,0FEH,000H,000H,000H;一,42
- DB 000H,000H,07CH,000H,000H,0FEH,000H,000H;二,43
- DB 000H,000H,07CH,000H,038H,000H,0FEH,000H;三,44
- DB 000H,0FEH,0AAH,0AAH,0AAH,0CEH,082H,0FEH;四,45
- DB 07CH,010H,010H,07CH,014H,014H,024H,0FEH;五,46
- DB 000H,010H,000H,0FEH,000H,028H,046H,082H;六,47
- DB 000H,020H,020H,0FEH,020H,020H,022H,01CH;七,48
- DB 000H,028H,028H,028H,044H,044H,082H,000H;八,49
- DB 020H,020H,0FCH,028H,028H,028H,04AH,086H;九,50
- DB 05EH,082H,0BAH,092H,0BAH,092H,0BAH,086H;閏,51
- DB 0BEH,2AH,0FEH,6AH,0BEH,0F6H,0BEH,46H ;調(diào),52
- DB 04H,0FEH,0A4H,0B4H,0ECH,0A4H,0E4H,0CH ;時(shí) 53
- DB 28H,44H,82H,7CH,24H,24H,44H,8CH;分 54
- DB 04H,24H,6CH,0F6H,25H,72H,0A4H,28H ;秒 55
- ;********************溫度數(shù)據(jù)轉(zhuǎn)換*************************************=====================================================================*/
- XSWD: CALL RE_TEMP
- MOV XSD,#13
- MOV WDFH,#11
- MOV R0,#20H
- MOV R1,#40H
- MOV R2,#7
- XSWD2: MOV A,@R0
- MOV @R1,A
- INC R0
- INC R1
- DJNZ R2,XSWD2
- RET
- ;;;;;;;;;;;;以下是溫度程序;;;;;;;;;==
- ; 程序功能:數(shù)字溫度計(jì)(+125- -55)
- RE_TEMP: ;對(duì)DS18B20初始化及讀取
- SETB DQ
- CALL RESET_1820 ;調(diào)用復(fù)位子程序
- JB FLAG, STT ;判斷DS1820是否存在?
- RET ;*/
- STT: ; DS18B20存在
- MOV A,#0CCH ;跳過(guò)ROM匹配
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- CALL RESET_1820 ;準(zhǔn)備讀溫度前先復(fù)位
- MOV A,#0CCH ;跳過(guò)ROM匹配
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- MOV A,#0BEH ;發(fā)出讀溫度命令
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- CALL READ_1820 ;讀出溫度數(shù)據(jù)
- RET ;*/
- RESET_1820: ;復(fù)位(有具體的時(shí)序要求)
- SETB DQ
- NOP
- NOP
- CLR DQ
- ;主機(jī)發(fā)出延時(shí)521微秒的復(fù)位低脈沖
- MOV R1,#2 ; 3
- DLY: MOV R0,#107
- DJNZ R0,$
- DJNZ R1,DLY
- ;然后拉高數(shù)據(jù)線
- SETB DQ
- NOP
- NOP
- NOP
- MOV R0,#25H
- T2: JNB DQ ,T3 ;等待DS18B20回應(yīng)
- DJNZ R0, T2
- JMP T4
- T3: SETB FLAG ;置標(biāo)志位,表示DS1820存在
- JMP T5
- T4: CLR FLAG ;清標(biāo)志位,表示DS1820不存在
- JMP T7
- T5: MOV R0,#117
- T6: DJNZ R0,T6 ;時(shí)序要求延時(shí)一段時(shí)間
- T7: SETB DQ
- RET
- ;---------------------------------------------- */
- WRITE_1820: ;寫(xiě)入DS18B20(有具體的時(shí)序要求)
- MOV R2,#8 ;一共8位數(shù)據(jù)
- CLR C
- WR1: CLR DQ ;總線低位,開(kāi)始寫(xiě)入
- MOV R3,#7
- DJNZ R3,[code];***************引腳定義,根據(jù)使用不同的管腳而改動(dòng)*************
- ;農(nóng)歷,星期,1302程序由網(wǎng)上下載
- ABCD EQU P2 ;行掃描0-7
- SEG EQU P1.1 ; 紅
- SER EQU P1.0 ;內(nèi)容發(fā)送綠
- SRCLK EQU P1.2 ;串行CP端
- RCLK EQU P1.3 ;輸出CP端
- EN EQU P1.4 ;EN為138使能端.高電平關(guān)閉顯示;低電平顯示
- DQ EQU P3.6 ;溫度18b20
- BEEP EQU P3.7 ;蜂鳴器
- AN EQU P0.1 ;中間按鍵
- ANS EQU P0.0 ;上按鍵
- ANX EQU P0.4 ;下按鍵
- ANZ EQU P0.2 ;左按鍵
- ANY EQU P0.3 ;右按鍵
- T_CLK EQU P0.7 ;實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳
- T_IO EQU P0.6 ;實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳
- T_RST EQU P0.5 ;實(shí)時(shí)時(shí)鐘復(fù)位線引腳
- ;溫度存放地址
- A_BIT EQU 22H ;存放個(gè)位數(shù)變量
- B_BIT EQU 21H ;存放十位數(shù)變量
- C_BIT EQU 24H ;存放 小數(shù)變量
- D_BIT EQU 20H ;存放 百 位數(shù)變量
- FLAG EQU 26H ;DS18B20是否存在標(biāo)志
- XSD EQU 23H ;點(diǎn)
- WDFH EQU 25H ;℃
- WDGW EQU 27H ;溫度高位值
- WDDW EQU 28H ;溫度低位值
- QUSHU EQU 28H
- QUSHU1 EQU 08H
- QUSHU2 EQU 09H
- LSTZSJ1 EQU 0AH
- LSTZSJ EQU 0BH
- MIAO EQU 20H ;秒
- FEN EQU 21H ;分
- SHI EQU 22H ;時(shí)
- RIQI EQU 23H ;日
- YUE EQU 24H ;月 ACC.7=0為2000年
- XQI EQU 25H ;星期
- NIAN EQU 26H ;年
- start_year EQU 01; 定義查詢(xún)表起始年份,01--199 表示 1901-2099 年
- ;以下三單元為需轉(zhuǎn)換的公歷日期 是子程序的入口數(shù)據(jù)
- time_year EQU NIAN
- time_month EQU YUE ;BIT7 表示世紀(jì),為 1 表示 19 世紀(jì),為 0 表示 20 世紀(jì)
- time_date EQU RIQI
- ;以下三單元存轉(zhuǎn)換后農(nóng)歷日期 與入口單元重疊,如要保留入口信息,請(qǐng)重定義出口地址
- CONvert_yeAr DATA 3Fh
- CONvert_mONth DATA 3Eh ;BIT7 為 1 表示閏月
- CONvert_dAte DATA 3Dh
- temp_Byte4 DATA 3Bh
- temp_Byte5 DATA 3Ch
- temp_Byte1 EQU 20H
- temp_Byte2 EQU 21H
- temp_Byte3 EQU 22H
- ;*************************************************************
- ;*********************中斷入口程序****************************
- ORG 0000H
- LJMP MAIN
- ; ORG 0003H
- ; RETI
- ; ORG 000BH ; 定時(shí)器 T0中斷入口
- ; JMP EXT0 ; 跳至T0中斷子程序
- ; ORG 0013H
- ; RETI
- ;; ORG 001BH
- ; RETI
- ; ORG 0023H
- ; RETI
- ;***************主程序****************************************/
- MAIN: MOV SP,#69H ;堆棧首址
- LCALL BEEP_BZ
- LCALL AN_DEL
- LCALL BEEP_BZ ;開(kāi)機(jī)鳴響2聲
- LCALL RE_TEMP ;對(duì)DS18B20初始化及讀取
- LCALL GET1302 ;讀時(shí)間
- MOV A,MIAO
- JNB ACC.7,STRAT ;如果秒最高位是1初始化時(shí)鐘
- LCALL IN_1302 ;時(shí)鐘芯片初始化
- STRAT: ; MOV SP,#69H ;堆棧首址
- ; MOV R0,#30H ;初使化寄存顯示單元
- ; MOV R1,#74 ;30H-單元清零
- ; MOV A,#0
- ST: ; MOV @R0,A
- ; INC R0
- ; DJNZ R1,ST
- ST1:
- LCALL Get1302 ;讀取時(shí)間
- LCALL XSSJ ;時(shí)間數(shù)據(jù)轉(zhuǎn)換
- LCALL PLAY1 ;顯示時(shí)間
- MOV A,MIAO ;如果秒=30顯示滾動(dòng)日期
- CJNE A,#30H,ST2
- LCALL GDRQ
- ST2: JNB ANZ,WD ;按下左鍵調(diào)用溫度顯示
- ; JNB ANY,YYUE ;按下右鍵調(diào)用音樂(lè)
- JNB ANX,G_DRQ ;按下下鍵調(diào)用滾動(dòng)顯示日歷
- JNB AN,TZSJ ;按下中間按鍵調(diào)用調(diào)時(shí)
- JMP ST1
- ;*****************************
- G_DRQ:LCALL GDRQ
- JMP ST1
- ;*****************************************************
- WD: LCALL AN_DEL
- JB ANZ,WD_OUT
- LCALL BEEP_BZ
- WD_1: LCALL RE_TEMP ;讀取溫度
- LCALL TURN ;轉(zhuǎn)化溫度子程序
- LCALL XSWD ;溫度數(shù)據(jù)轉(zhuǎn)換
- LCALL PLAY ;顯示
- JB ANZ,WD_1
- LCALL AN_DEL
- LCALL BEEP_BZ
- JNB ANZ,WDOUT
- WD_OUT:RET
- GDRQ: LCALL Get1302 ;讀取時(shí)間
- LCALL RQFL ;調(diào)用日期分離程序
- LCALL L30_
- RET
- WDOUT:LJMP ST1
- ;*******************************************調(diào)整時(shí)間程序*************
- TZSJ:
- LCALL AN_DEL
- JNB AN,$
- LCALL BEEP_BZ
- TZSJ_1: LCALL S_NIAN ;顯示調(diào)年
- JNB ANS, N_J1 ;年+1
- JNB ANX,N_1 ;年-1
- JNB ANY,TZ_YUE ;調(diào)月
- JNB AN,TZSJOUT;確認(rèn)
- JNB ANZ, TZ_NOUT
- JMP TZSJ_1
- TZSJOUT:;LCALL GetWeek
- LCALL Set1302
- LCALL BEEP_BZ
- TZ_NOUT: LJMP ST1
- N_J1: LCALL AN_DEL ;年+1
- LCALL BEEP_BZ
- LCALL NIAN_J1
- LJMP TZSJ_1
- N_1: LCALL AN_DEL ;年-1
- LCALL BEEP_BZ
- LCALL NIAN_1
- LJMP TZSJ_1
- ;***************************************
- Y_J1: LCALL AN_DEL;月+1
- LCALL BEEP_BZ
- LCALL YUE_J1
- LJMP TZ_YUE1
- Y_1: LCALL AN_DEL ;月-1
- LCALL BEEP_BZ
- LCALL YUE_1
- LJMP TZ_YUE1
- ;*********
- TZ_YUE: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_YUE1: LCALL S_YUE;顯示調(diào)月
- JNB ANS,Y_J1;月+1
- JNB ANX,Y_1;月-1
- JNB ANY,TZ_RIQI;調(diào)日期
- JNB AN,TZ_YUEOUT
- JNB ANZ, TZ_YOUT
- JMP TZ_YUE1
- TZ_YUEOUT:LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_YOUT:LJMP ST1
- ;***************************************
- R_J1: LCALL AN_DEL;月+1
- LCALL BEEP_BZ
- LCALL RIQI_J1
- LJMP TZ_RIQI1
- R_1: LCALL AN_DEL ;月-1
- LCALL BEEP_BZ
- LCALL RIQI_1
- LJMP TZ_RIQI1
- ;*********
- TZ_RIQI: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_RIQI1: LCALL S_RIQI;顯示調(diào)日期
- JNB ANS,R_J1;日期+1
- JNB ANX,R_1;日期-1
- JNB ANY,TZ_SHI;
- JNB AN,TZ_RIQIOUT
- JNB ANZ, TZ_ROUT
- JMP TZ_RIQI1
- TZ_RIQIOUT:;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_ROUT:LJMP ST1
- ;***************************************
- S_J1: LCALL AN_DEL;時(shí)+1
- LCALL BEEP_BZ
- LCALL SHI_J1
- LJMP TZ_SHI1
- S_1: LCALL AN_DEL ;時(shí)-1
- LCALL BEEP_BZ
- LCALL SHI_1
- LJMP TZ_SHI1
- ;*********
- TZ_SHI: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_SHI1: LCALL S_SHI;顯示調(diào)時(shí)
- JNB ANS,S_J1;時(shí)+1
- JNB ANX,S_1;時(shí)-1
- TZ_SHI4:JNB ANY,TZ_FEN
- JNB AN,TZ_SHIOUT
- JNB ANZ, TZ_SOUT
- JMP TZ_SHI1
- TZ_SHIOUT:;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_SOUT: LJMP ST1
- ;*********
- TZ_FEN: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_FEN1: LCALL S_FEN;顯示調(diào)分
- JNB ANS,F_J1;分+1
- JNB ANX,F_1;分-1
- ;TZ_RIQI4:JNB ANY,TZ_FEN;
- JNB AN,TZ_FENOUT
- JNB ANZ, TZ_FOUT
- JMP TZ_FEN1
- TZ_FENOUT:MOV MIAO,#0
- ;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_FOUT:LJMP ST1
- ;***************************************
- F_J1: LCALL AN_DEL;時(shí)+1
- LCALL BEEP_BZ
- LCALL FEN_J1
- LJMP TZ_FEN1
- F_1: LCALL AN_DEL ;時(shí)-1
- LCALL BEEP_BZ
- LCALL FEN_1
- LJMP TZ_FEN1
- ;***************************************************
- ;YYUE: LCALL START1 ;調(diào)用音樂(lè)
- ; RET
- SHIJ: LCALL IN_1302 ;調(diào)用時(shí)間初始化
- RET
- AN_DEL: MOV R6,#0
- AN_DEL1:LCALL DEL
- DJNZ R6,AN_DEL1
- RET
- ;********************調(diào)整年月日程序*********************************/=======================================================================
- S_NIAN: MOV 40H,#52 ;顯示調(diào)年
- MOV 41H,#30
- MOV A,NIAN
- ANL A,#0FH
- MOV 43H,A
- MOV A,NIAN
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_YUE: MOV 40H,#52 ;顯示調(diào)月
- MOV 41H,#31
- MOV A,YUE
- ANL A,#0FH
- MOV 43H,A
- MOV A,YUE
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_RIQI: MOV 40H,#52 ;顯示調(diào)日期
- MOV 41H,#32
- MOV A,RIQI
- ANL A,#0FH
- MOV 43H,A
- MOV A,RIQI
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_SHI: MOV 40H,#52 ;顯示調(diào)時(shí)
- MOV 41H,#53
- MOV A,SHI
- ANL A,#0FH
- MOV 43H,A
- MOV A,SHI
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_FEN: MOV 40H,#52 ;顯示調(diào)分
- MOV 41H,#54
- MOV A,FEN
- ANL A,#0FH
- MOV 43H,A
- MOV A,FEN
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- ;;;;;;;;;;;;;;;;;;;;
- FEN_J1:MOV LSTZSJ1,FEN;分+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#60,FEN_J12;小時(shí)60清0
- MOV LSTZSJ,#0
- FEN_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV FEN,LSTZSJ1
- RET
- FEN_1: MOV LSTZSJ1,FEN;分-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#0,FEN_12 ;分是0加60
- MOV LSTZSJ,#60
- FEN_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV FEN,LSTZSJ1
- RET
- ;;;;
- SHI_J1:MOV LSTZSJ1,SHI;小時(shí)+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#24,SHI_J12;小時(shí)24清0
- MOV LSTZSJ,#0
- SHI_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV SHI,LSTZSJ1
- RET
- SHI_1: MOV LSTZSJ1,SHI;小時(shí)-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#0,SHI_12 ;小時(shí)是0加24
- MOV LSTZSJ,#24
- SHI_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV SHI,LSTZSJ1
- RET
- ;;;;
- RIQI_J1:MOV LSTZSJ1,RIQI;日+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#32,RIQI_J12;日是32清0
- MOV LSTZSJ,#1
- RIQI_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV RIQI,LSTZSJ1
- RET
- RIQI_1: MOV LSTZSJ1,RIQI;日-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,RIQI_12 ;日是1加32
- MOV LSTZSJ,#32
- RIQI_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV RIQI,LSTZSJ1
- RET
- ;;;;
- YUE_J1:MOV LSTZSJ1,YUE;月+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#13,YUE_J12;月是13清0
- MOV LSTZSJ,#1
- YUE_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV YUE,LSTZSJ1
- RET
- YUE_1: MOV LSTZSJ1,YUE;月-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,YUE_12
- MOV LSTZSJ,#13
- YUE_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV YUE,LSTZSJ1
- RET
- NIAN_J1:MOV LSTZSJ1,NIAN;年+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;年+1
- MOV A,LSTZSJ
- CJNE A,#100,NIAN_J12;年是100清0
- MOV LSTZSJ,#01
- NIAN_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV NIAN,LSTZSJ1
- RET
- NIAN_1: ;CJNE A,#13H,SMAJ_QR
- MOV LSTZSJ1,NIAN;年-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,NIAN_12
- MOV LSTZSJ,#100
- NIAN_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV NIAN,LSTZSJ1
- RET
- ;;;;;;;;;;;;;
- TSSJTZ:MOV A,LSTZSJ1;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- ANL A,#0FH
- MOV LSTZSJ,A
- MOV A,LSTZSJ1
- SWAP A
- ANL A,#0FH
- MOV B,#10
- MUL AB
- ADD A,LSTZSJ
- MOV LSTZSJ,A
- RET
- TSSJTZ1:MOV A,LSTZSJ ;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV B,#10
- DIV AB
- SWAP A
- MOV LSTZSJ,A
- MOV A,B
- ORL A,LSTZSJ
- MOV LSTZSJ1,A
- RET ;*/
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE_88 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF2: LCALL LINE_11 ;掃描顯示1行子程序
- DJNZ 2BH,FF2 ;掃描下一行
- MOV 2DH,#0
- RET
- ;*********掃描顯示一行子程序********************
- LINE_11: LCALL MSTR_YD_
- MOV 30H,#0
- MOV 31H,#0
- LCALL SEND_11 ;發(fā)送串行口子程序
- LCALL XTH ;選通行子程序
- LCALL DL22US
- INC 2DH
- RET
- SEND_11: MOV R0,#30H
- MOV R1,#35H
- MOV R5,#4 ;一行有2個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_11: MOV R2,#8 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- LCALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_11 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET ;
- ;*************************************** 日期分離程序====================================
- RQFL: MOV 40H,#12
- MOV 41H,#12
- MOV 42H,#12
- MOV 43H,#12
- MOV A,YUE
- JB ACC.7,RQFL1
- MOV 44H,#2
- MOV 45H,#0
- JMP RQFL3
- RQFL1: MOV 44H,#1
- MOV 45H,#9
- RQFL3:
- MOV A,NIAN
- ANL A,#0FH
- MOV 47H,A
- MOV A,NIAN
- SWAP A
- ANL A,#0FH
- MOV 46H,A
- MOV 48H,#30 ;顯示年
- MOV A,YUE
- ANL A,#0FH
- MOV 4AH,A
- MOV A,YUE
- SWAP A
- ANL A,#03H
- JZ YUE_S_1
- YUE_S_2:MOV 49H,A
- YUE_S_3: MOV 4BH,#31 ;顯示 月
- MOV A,RIQI
- ANL A,#0FH
- MOV 4DH,A
- MOV A,RIQI
- SWAP A
- ANL A,#03H
- JZ RIQI_S_1
- RIQI_S_2:MOV 4CH,A
- RIQI_S_3:MOV 4EH,#32 ;顯示 日
- MOV 4FH,#12
- MOV 50H,#16 ;顯示星期
- MOV 51H,#17
- MOV 52H,#12
- LCALL GetWeek
- MOV A,XQI
- ANL A,#07H
- CJNE A,#0,XQ_1
- MOV 53H,#32
- JMP XQ_OUT
- RIQI_S_1:MOV 4CH,#12
- JMP RIQI_S_3
- YUE_S_1: MOV 49H,#12
- JMP YUE_S_3
- XQ_1: ADD A,#41
- MOV 53H,A
- XQ_OUT:
- MOV 54H,#12 ;空格
- LCALL RE_TEMP ;讀取溫度
- LCALL TURN ;轉(zhuǎn)化溫度子程序
- MOV 55H,#15 ;T
- MOV 56H,#14 ;:
- MOV 57H,20H ;溫度百位
- MOV 58H,21H ;溫度十位
- MOV 59H,22H ;溫度個(gè)位
- MOV 5AH,#13 ;小數(shù)點(diǎn)
- MOV 5BH,24H ;溫度小數(shù)位
- MOV 5CH,#11 ;℃符號(hào)
- MOV 5DH,#12
- MOV 5EH,#33 ;農(nóng)
- MOV 5FH,#34 ;歷
- LCALL Get1302
- LCALL CONvert ;調(diào)用公歷轉(zhuǎn)農(nóng)歷程序
- MOV A,CONvert_mONth
- JNB ACC.7,RQFL4
- MOV 60H,#51
- JMP RQFL5
- RQFL4:MOV 60H,#12
- RQFL5:LCALL NL_YUE ;調(diào)用農(nóng)歷月份
- MOV 62H,#31 ;顯示月
- LCALL NL_RIQI
- MOV 65H,#12
- MOV 66H,#12
- MOV 67H,#12
- MOV 68H,#12
- ; MOV 69H,#12
- RQFLB: RET
- ;***********************
- NL_YUE: MOV A, CONvert_mONth ;農(nóng)歷月
- ANL A,#1FH
- JNB ACC.4,NL_RIQI0
- ANL A,#0FH
- ADD A,#10
- NL_RIQI0: CJNE A,#1,NL_YUE1
- MOV 61H,#35
- JMP NL_YOUT
- NL_YUE1: CJNE A,#10,NL_YUE2
- MOV 61H,#39
- JMP NL_YOUT
- NL_YUE2: CJNE A,#11,NL_YUE3
- MOV 61H,#37
- JMP NL_YOUT
- NL_YUE3: CJNE A,#12,NL_YUE4
- MOV 61H,#38
- JMP NL_YOUT
- NL_YUE4: ADD A,#41
- MOV 61H,A
- NL_YOUT: RET
- ;***************
- NL_RIQI:MOV A, CONvert_dAte ;農(nóng)歷日
- SWAP A
- ANL A,#0FH
- CJNE A,#0,NL_RIQI1
- MOV 63H,#36 ;顯示 初
- JMP NL_ROUT
- NL_RIQI1:CJNE A,#1,NL_RIQI2
- MOV 63H,#39 ;顯示 十
- JMP NL_ROUT
- NL_RIQI2:CJNE A,#2,NL_RIQI3
- MOV 63H,#40 ;顯示 二十
- JMP NL_ROUT
- NL_RIQI3:CJNE A,#3,NL_ROUT
- MOV 63H,#41 ;顯示 三十
- JMP NL_ROUT
- NL_ROUT:MOV A, CONvert_dAte ;農(nóng)歷日
- ANL A,#0FH
- CJNE A,#0,NL_RIQI4
- MOV 64H,#39 ;顯示 十
- JMP NL_RIQI5
- NL_RIQI4:ADD A,#41
- MOV 64H,A
- NL_RIQI5: RET
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
- ;;;;;;;;;;;;;;;;;;;;;;;
- L30_: MOV 2DH,#0
- MOV QUSHU,#40H
- MOV 2FH,#37 ;共有多少個(gè)半角字符,一個(gè)漢字等于兩個(gè)字符,個(gè)數(shù)值為實(shí)際字?jǐn)?shù)*2+屏長(zhǎng)度數(shù)
- HHH_: LCALL L31_ ;. 掃描一個(gè)字節(jié)
- DJNZ 2FH,HHH_ ;字?jǐn)?shù)沒(méi)完繼續(xù)
- RET
- L31_: MOV B, #1 ;每次移入內(nèi)存單元的數(shù)據(jù)要左移次數(shù)次值 ,從第一開(kāi)始。
- II_: MOV 29H,#5 ;左移速度
- III_: LCALL L32_ ;掃描顯示1幀
- DJNZ 29H,III_ ;速度沒(méi)完繼續(xù)
- INC B ;左移次數(shù)+1
- MOV A,#9
- CJNE A,B,II_ ;如果B中的數(shù)超過(guò)8就完成1個(gè)字節(jié)的8次左移顯示,否則繼續(xù)循環(huán).
- INC QUSHU ;日期數(shù)據(jù)+1---5CH→
- RET
- L32_: MOV 2BH,#8 ;掃描的行數(shù),共8行
- JJ_: LCALL L33_ ;掃描顯示1行子程序
- INC 2DH
- DJNZ 2BH,JJ_ ;8行沒(méi)完繼續(xù)
- MOV 2DH,#0 ;8行完成后再?gòu)?行開(kāi)始掃描
- RET
- L33_: MOV 2EH,B ;顯示內(nèi)容要左移幾次數(shù)再顯示的賦值給2EH單元
- LCALL SEND_YD ;發(fā)送串行口子程序
- LCALL XT_H ;選通行子程序
- LCALL MSTR_YD_ ;將顯示內(nèi)容移入內(nèi)存單元30H→
- EE_: LCALL ZY
- DJNZ 2EH,EE_
- LCALL ZYXZ ;左移速度同步修正
- RET
- MSTR_YD_:SETB RS1 ;R0,R1-數(shù)據(jù)存放起始地址,2DH行數(shù)據(jù),R3-21H,22H臨時(shí)數(shù)據(jù),R4-每屏的字節(jié)數(shù), ,20H日期數(shù)據(jù)起始地址
- SETB RS0
- MOV R0,#30H
- MOV R1,#35H
- MOV R4,#5 ;每幕顯示的字節(jié)數(shù)加1
- BB_YD_: LCALL L_SHUJU
- MOV @R0,A
- MOV @R1,A
- INC QUSHU ;加1,移到下一個(gè)字節(jié)的對(duì)應(yīng)位置
- INC R0
- INC R1
- DJNZ R4,BB_YD_
- MOV A,QUSHU
- CLR C
- SUBB A,#5
- MOV QUSHU,A
- CLR RS1
- CLR RS0
- RET
- ;;;使用R0,R1,R6,R7,B,2DH
- L_SHUJU: MOV DPTR,#TAB10
- MOV QUSHU1,R0
- MOV QUSHU2,R1
- MOV R6,B
- MOV R0,QUSHU
- L_SHU: MOV A,@R0
- MOV B,#8
- MUL AB
- MOV R7,A
- MOV A,DPH
- ADD A,B
- MOV DPH,A
- MOV A,R7
- MOV B,2DH
- ADD A,B
- MOVC A,@A+DPTR
- MOV R0,QUSHU1
- MOV R1,QUSHU2
- MOV B,R6
- RET
- ;*****************************發(fā)送數(shù)據(jù)到串口子程序*****************************************************/
- SEND_YD: MOV R0,#30H
- MOV R5,#4 ;如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_YD: CLR C ;清C方便每個(gè)字節(jié)的移動(dòng)
- MOV R2,#8 ;每個(gè)字節(jié)有8位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入A
- CPL A ;取反
- LCALL DD1_YD ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_YD ;8個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- DD1_YD: CLR SRCLK ;清串行CP端
- RLC A ;將每個(gè)字節(jié)移位
- ; MOV SER,C ;將移入C的位移入信號(hào)端
- MOV SEG,C
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD1_YD ;每個(gè)字節(jié)位移8次夠了沒(méi)有?
- RET
- ;*******選通行子程序***2BH行數(shù)據(jù)*********************************************************************************/
- XT_H: CLR RCLK ;將輸出CP變?yōu)榈碗娖綖樯仙刈鳒?zhǔn)備
- SETB EN ;將使能端變?yōu)楦唠娖綖橄陆笛刈鳒?zhǔn)備
- MOV R5,2BH
- CJNE R5,#7,HSM_1
- MOV ABCD,#11111110B
- JMP XTH_OUT
- HSM_1: CJNE R5,#6,HSM_2
- MOV ABCD,#11111101B
- JMP XTH_OUT
- HSM_2: CJNE R5,#5,HSM_3
- MOV ABCD,#11111011B
- JMP XTH_OUT
- HSM_3: CJNE R5,#4,HSM_4
- MOV ABCD,#11110111B
- JMP XTH_OUT
- HSM_4: CJNE R5,#3,HSM_5
- MOV ABCD,#11101111B
- JMP XTH_OUT
- HSM_5: CJNE R5,#2,HSM_6
- MOV ABCD,#11011111B
- JMP XTH_OUT
- HSM_6: CJNE R5,#1,HSM_7
- MOV ABCD,#10111111B
- JMP XTH_OUT
- HSM_7: CJNE R5,#8,XTH_OUT
- MOV ABCD,#01111111B
- XTH_OUT:
- SETB RCLK ;輸出CP為上升沿,顯示一個(gè)
- CLR EN ;138可顯示
- RET
- ;**********左移一位子程序*******************************************************************************/
- ZY: ;30H后存入顯示內(nèi)容,R0為顯示未址,R2為移出高位個(gè)數(shù) 字?jǐn)?shù)*2+1
- SETB RS1
- CLR RS0
- MOV R2,#5
- MOV R0, #34H ;顯示單元未址
- CLR C
- CC: MOV A, @R0
- RLC A ;將后一字節(jié)的最高位移到C里,再移到前一字節(jié)的最低位
- MOV @R0, A
- DEC R0
- DJNZ R2, CC
- CLR C
- CLR RS1
- CLR RS0
- RET
- ;********************移動(dòng)查模式時(shí)速度同步修正子程序*****************************************************/
- ZYXZ: MOV R5,B
- MOV A,#9
- SUBB A,R5
- MOV R4,A
- AA: LCALL DL22US
- NOP
- DJNZ R4 ,AA
- RET
- ;*********************************************************************************/
- ;********************時(shí)間數(shù)據(jù)轉(zhuǎn)換*************************************=====================================================================*/
- XSSJ:
- MOV A,FEN ;分
- MOV B,#10h
- DIV AB ;把41H高低4位分開(kāi)
- MOV 43H,A ;高4位存入
- MOV A,B
- MOV 44H,A ;低4位存入
- MOV A,MIAO ;秒
- MOV B,#10h
- DIV AB ;把40H高低4位分開(kāi)
- mov 45H,A ;高4位存入
- mov a,b
- mov 46H,a ;低4位存入
- MOV A,SHI
- MOV B,#16
- DIV AB
- MOV 40H,A
- MOV A,B
- MOV 41H,A
- MOV 42H,#15
- MOV A,40H
- JNZ XSSJ_1
- MOV 40H,#12
- XSSJ_1: RET
- ;*************************時(shí)間顯示程序****************************
- PLAY1: MOV DPTR,#TABX
- MOV 2DH,#0
- MOV 2FH,#20 ;速度
- GG1: CALL LINE_8 ;掃描顯示1幀
- DJNZ 2FH,GG1
- RET
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE_8 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF1: CALL LINE_1 ;掃描顯示1行子程序
- DJNZ 2BH,FF1 ;掃描下一行
- MOV A,2DH
- SUBB A ,#8 ;掃描完8行后要重頭開(kāi)始,在MSTR子程序中,掃8行后會(huì)增加8,這里-8
- MOV 2DH,A
- RET
- ;*********掃描顯示一行子程序********************
- LINE_1: CALL MSTR_R ;將顯示內(nèi)容移入內(nèi)存單元
- CALL MSTR_G
- MOV 35H,#0
- MOV 36H,#0
- ; MOV 3BH,#0
- MOV 3AH,#0
- CALL SEND_1 ;發(fā)送串行口子程序
- CALL XTH ;選通行子程序
- CALL DL22US
- INC 2DH
- RET
- ;***發(fā)送數(shù)據(jù)到串口子程序*取紅色30H-34H,綠色35H-39H***2EH,2FH緩沖**************
- SEND_1: MOV R0,#30H
- MOV R1,#38H
- MOV R5,#2 ;一行有2個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_1: MOV R2,#5 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_1 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- CALL SEND_2
- CALL SEND_3
- RET ;
- SEND_2: MOV R0,#32H
- MOV R1,#3AH
- MOV R5,#1
- LQ_2: MOV R2,#2 ;每個(gè)字節(jié)有2位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_2 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- SEND_3: MOV R0,#33H
- MOV R1,#3BH
- MOV R5,#4
- LQ_3: MOV R2,#5 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_3 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- DD_1: CLR SRCLK ;清串行CP端
- CLR C
- MOV A,R6
- RLC A ;將每個(gè)字節(jié)移位
- MOV R6,A
- CPL C
- MOV SER,C ;紅色
- CLR C
- MOV A,R7
- RLC A
- MOV R7,A
- CPL C
- MOV SEG,C ;綠色
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD_1 ;每個(gè)字節(jié)位移5次夠了沒(méi)有?
- RET
- ;*************************溫度顯示程序****************************
- PLAY: MOV DPTR,#TABX
- MOV 2DH,#0
- MOV 2FH,#60 ;速度
- GG: CALL LINE8 ;掃描顯示1幀
- DJNZ 2FH,GG
- RET
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE8 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF: CALL LINE1 ;掃描顯示1行子程序
- DJNZ 2BH,FF ;掃描下一行
- MOV A,2DH
- SUBB A ,#8 ;掃描完8行后要重頭開(kāi)始,在MSTR子程序中,掃8行后會(huì)增加8,這里-8
- MOV 2DH,A
- RET
- ;*********掃描顯示一行子程序********************
- LINE1: CALL MSTR_R ;將顯示內(nèi)容移入內(nèi)存單元
- CALL MSTR_G
- MOV 34H,#0
- MOV 35H,#0
- MOV 3BH,#0
- CALL SEND ;發(fā)送串行口子程序
- CALL XTH ;選通行子程序
- CALL DL22US
- INC 2DH
- RET
- ;****************************************************************************
- ;**顯示內(nèi)容移入內(nèi)存單元子程序*取紅色到30H-34H,綠色35H-39H*2DH取字節(jié)數(shù)據(jù)***********************
- MSTR_R: MOV R0,#30H
- MOV R4,#7 ;每幕顯示的字?jǐn)?shù)加1;如每幕顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- MOV R1,#40H
- BB_R:
- MOV A,@R1
- MOV B,#8
- MUL AB
- ADD A,2DH
- MOVC A, @A+DPTR
- MOV @R0,A
- INC R0
- INC R1
- DJNZ R4,BB_R
- MOV R1,#40H
- RET
- MSTR_G: MOV R0,#38H
- MOV R4,#7 ;每幕顯示的字?jǐn)?shù)加1;如每幕顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- MOV R1,#40H
- BB_G:
- MOV A,@R1
- MOV B,#8
- MUL AB
- ADD A,2DH
- MOVC A, @A+DPTR
- MOV @R0,A
- INC R0
- INC R1
- DJNZ R4,BB_G
- MOV R1,#40H
- RET
- ;***發(fā)送數(shù)據(jù)到串口子程序*取紅色30H-34H,綠色35H-39H***R6,R7**************
- SEND: MOV R0,#30H
- MOV R1,#38H
- MOV R5,#6 ;一行有4個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ: MOV R2,#5 ;每個(gè)字節(jié)有8位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- LCALL DD1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ ;8個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- CLR SRCLK
- SETB C
- MOV SER,C
- MOV SEG,C
- SETB SRCLK
- RET ;
- DD1: CLR SRCLK ;清串行CP端
- CLR C
- MOV A,R6
- RLC A ;將每個(gè)字節(jié)移位
- MOV R6,A
- CPL C
- MOV SER,C ;紅色
- CLR C
- MOV A,R7
- RLC A
- MOV R7,A
- CPL C
- MOV SEG,C ;綠色
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD1 ;每個(gè)字節(jié)位移8次夠了沒(méi)有?
- RET
- ;*******選通行子程序***2BH行數(shù)據(jù)*********************************************************************************/
- XTH: CLR RCLK ;將輸出CP變?yōu)榈碗娖綖樯仙刈鳒?zhǔn)備
- SETB EN ;將使能端變?yōu)楦唠娖綖橄陆笛刈鳒?zhǔn)備
- MOV R5,2BH
- CJNE R5,#8,HSM1
- MOV ABCD,#11111110B
- JMP XTHOUT
- HSM1: CJNE R5,#7,HSM2
- MOV ABCD,#11111101B
- JMP XTHOUT
- HSM2: CJNE R5,#6,HSM3
- MOV ABCD,#11111011B
- JMP XTHOUT
- HSM3: CJNE R5,#5,HSM4
- MOV ABCD,#11110111B
- JMP XTHOUT
- HSM4: CJNE R5,#4,HSM5
- MOV ABCD,#11101111B
- JMP XTHOUT
- HSM5: CJNE R5,#3,HSM6
- MOV ABCD,#11011111B
- JMP XTHOUT
- HSM6: CJNE R5,#2,HSM7
- MOV ABCD,#10111111B
- JMP XTHOUT
- HSM7: CJNE R5,#1,XTHOUT
- MOV ABCD,#01111111B
- XTHOUT:
- SETB RCLK ;輸出CP為上升沿,顯示一個(gè)
- CLR EN ;138可顯示
- RET
- ;******22US延時(shí)子程序********
- DL22US: MOV R7,#50
- DJNZ R7,$
- RET ;
- DEL: MOV R7,#0
- DJNZ R7,$
- RET
- BEEP_BZ:; CLR BEEP ;蜂鳴器鳴響
- MOV R6,#40
- BEEP_2: CALL DEL
- CPL BEEP
- DJNZ R6, BEEP_2
- SETB BEEP ;蜂鳴器停止
- RET
- ;***********************************字碼表****************************************
- TAB10:
- DB 038H,044H,082H,082H,082H,082H,044H,038H;"0",0
- DB 010H,070H,010H,010H,010H,010H,010H,0FEH;"1",1
- DB 07CH,082H,082H,006H,00CH,070H,0FAH,09EH;"2",2
- DB 07EH,044H,00CH,038H,006H,002H,086H,07CH;"3",3
- DB 004H,00CH,01CH,034H,064H,0FEH,004H,03FH;"4",4
- DB 07EH,042H,040H,07CH,042H,002H,086H,07CH;"5",5
- DB 03CH,062H,0C0H,0FCH,082H,082H,0C2H,07CH;"6",6
- DB 0FEH,084H,088H,018H,010H,030H,020H,020H;"7",7
- DB 07CH,082H,082H,07CH,086H,082H,0C6H,07CH;"8",8
- DB 07CH,086H,082H,082H,07EH,002H,084H,078H;"9",9
- DB 000H, 000H, 000H, 000H, 0FCH, 000H, 000H, 000H ;- 10
- DB 080H, 078H, 084H, 080H, 080H, 080H, 084H, 078H ;"C",11
- DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H ;無(wú)顯示,12
- DB 000H, 000H, 000H, 000H, 030H, 030H, 000H, 000H ;點(diǎn),13
- DB 000H, 000H, 030H, 030H, 000H, 030H, 030H, 000H ;: 14
- DB 0FEH,092H,010H,010H,010H,010H,010H,038H;"T",15
- DB 7EH,42H,7EH,7EH,48H,7EH,88H,7EH ;溫 16
- DB 57H,0FDH,57H,75H,57H,0FDH,55H,8BH ;度 17
- ;DB 0D6H, 092H, 092H, 092H, 09AH, 06CH, 064H, 044H;"W",16
- ;DB 0EEH, 044H, 048H, 070H, 050H, 048H, 044H, 0EEH;"K",17
- DB 0FCH,042H,042H,07CH,040H,040H,0E0H,000H;"P",18
- DB 0CEH,084H,084H,0FCH,084H,084H,0CEH,000H;"H",19
- DB 000H,000H,078H,084H,0FCH,080H,07CH,000H;"e",20
- DB 000H,000H,0DCH,078H,030H,078H,0ECH,000H;"x",21
- DB 018H,000H,038H,008H,008H,008H,008H,0F0H;"j",22
- DB 000H,000H,0FEH,092H,092H,092H,0DAH,000H;"m",23
- DB 000H,020H,000H,060H,020H,020H,020H,0F8H;"i",24
- DB 000H,000H,000H,0D8H,066H,042H,042H,0E7H;"n",25
- DB 0E7H,042H,044H,024H,02CH,028H,018H,010H;"V",26
- DB 03CH,05AH,0AAH,0AAH,0B4H,042H,03CH,000H;"@",27
- DB 000H,000H,03CH,062H,040H,042H,03CH,000H;"c",28
- DB 000H,000H,03CH,042H,042H,042H,03CH,000H;"o",29
- DB 010H,03EH,048H,0BCH,028H,07EH,008H,008H;年,30
- DB 03CH,024H,03CH,024H,03CH,024H,044H,08CH;月,31
- DB 0FCH,084H,084H,0FCH,084H,084H,084H,0FCH;日,32
- DB 10H,0FEH,92H,20H,34H,68H,0A4H,32H;農(nóng),33
- DB 7EH,48H,7EH,4AH,4AH,4AH,4AH,96H;歷,34
- DB 000H,0FEH,010H,010H,05CH,050H,050H,0FEH;正,35
- DB 040H,0E0H,03EH,06AH,0CAH,04AH,052H,044H;初,36
- DB 010H,01EH,024H,058H,018H,024H,0DBH,018H;冬,37
- DB 000H,075H,05FH,075H,05FH,075H,057H,0B7H;臘,38
- DB 010H,010H,010H,0FEH,010H,010H,010H,010H;十,39
- DB 000H,044H,0FEH,044H,044H,044H,044H,07CH;二十,40
- DB 054H,054H,054H,0FEH,054H,054H,054H,094H;卅,41
- DB 000H,000H,000H,000H,0FEH,000H,000H,000H;一,42
- DB 000H,000H,07CH,000H,000H,0FEH,000H,000H;二,43
- DB 000H,000H,07CH,000H,038H,000H,0FEH,000H;三,44
- DB 000H,0FEH,0AAH,0AAH,0AAH,0CEH,082H,0FEH;四,45
- DB 07CH,010H,010H,07CH,014H,014H,024H,0FEH;五,46
- DB 000H,010H,000H,0FEH,000H,028H,046H,082H;六,47
- DB 000H,020H,020H,0FEH,020H,020H,022H,01CH;七,48
- DB 000H,028H,028H,028H,044H,044H,082H,000H;八,49
- DB 020H,020H,0FCH,028H,028H,028H,04AH,086H;九,50
- DB 05EH,082H,0BAH,092H,0BAH,092H,0BAH,086H;閏,51
- DB 0BEH,2AH,0FEH,6AH,0BEH,0F6H,0BEH,46H ;調(diào),52
- DB 04H,0FEH,0A4H,0B4H,0ECH,0A4H,0E4H,0CH ;時(shí) 53
- DB 28H,44H,82H,7CH,24H,24H,44H,8CH;分 54
- DB 04H,24H,6CH,0F6H,25H,72H,0A4H,28H ;秒 55
- ;********************溫度數(shù)據(jù)轉(zhuǎn)換*************************************=====================================================================*/
- XSWD: CALL RE_TEMP
- MOV XSD,#13
- MOV WDFH,#11
- MOV R0,#20H
- MOV R1,#40H
- MOV R2,#7
- XSWD2: MOV A,@R0
- MOV @R1,A
- INC R0
- INC R1
- DJNZ R2,XSWD2
- RET
- ;;;;;;;;;;;;以下是溫度程序;;;;;;;;;==
- ; 程序功能:數(shù)字溫度計(jì)(+125- -55)
- RE_TEMP: ;對(duì)DS18B20初始化及讀取
- SETB DQ
- CALL RESET_1820 ;調(diào)用復(fù)位子程序
- JB FLAG, STT ;判斷DS1820是否存在?
- RET ;*/
- STT: ; DS18B20存在
- MOV A,#0CCH ;跳過(guò)ROM匹配
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- CALL RESET_1820 ;準(zhǔn)備讀溫度前先復(fù)位
- MOV A,#0CCH ;跳過(guò)ROM匹配
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- MOV A,#0BEH ;發(fā)出讀溫度命令
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- CALL READ_1820 ;讀出溫度數(shù)據(jù)
- RET ;*/
- RESET_1820: ;復(fù)位(有具體的時(shí)序要求)
- SETB DQ
- NOP
- NOP
- CLR DQ
- ;主機(jī)發(fā)出延時(shí)521微秒的復(fù)位低脈沖
- MOV R1,#2 ; 3
- DLY: MOV R0,#107
- DJNZ R0,$
- DJNZ R1,DLY
- ;然后拉高數(shù)據(jù)線
- SETB DQ
- NOP
- NOP
- NOP
- MOV R0,#25H
- T2: JNB DQ ,T3 ;等待DS18B20回應(yīng)
- DJNZ R0, T2
- JMP T4
- T3: SETB FLAG ;置標(biāo)志位,表示DS1820存在
- JMP T5
- T4: CLR FLAG ;清標(biāo)志位,表示DS1820不存在
- JMP T7
- T5: MOV R0,#117
- T6: DJNZ R0,T6 ;時(shí)序要求延時(shí)一段時(shí)間
- T7: SETB DQ
- RET
- ;---------------------------------------------- */
- WRITE_1820: ;寫(xiě)入DS18B20(有具體的時(shí)序要求)
- MOV R2,#8 ;一共8位數(shù)據(jù)
- CLR C
- WR1: CLR DQ ;總線低位,開(kāi)始寫(xiě)入
- MOV R3,#7
- DJNZ R3,[ DISCUZ_CODE_1 ]nbsp; ;保持16微秒以上
- RRC A ;把字節(jié)DATA分成8個(gè)BIT環(huán)移給C
- MOV DQ, C ;寫(xiě)入一個(gè)BIT
- MOV R3,#23
- DJNZ R3,[ DISCUZ_CODE_1 ]nbsp; ;等待
- SETB DQ ;重新釋放總線
- NOP
- DJNZ R2,WR1 ;寫(xiě)入下一個(gè)BIT
- SETB DQ
- RET
- READ_1820: ;將溫度高位和低位從DS18B20中讀出
- MOV R4,#2 ; 讀出兩個(gè)字節(jié)的數(shù)據(jù)
- MOV R1,#WDDW ;低位存
- RE0: MOV R2,#8 ;數(shù)據(jù)一共有8位
- RE1: CLR C
- SETB DQ
- NOP
- NOP
- NOP
- CLR DQ ;讀前總線保持為低
- NOP
- NOP
- NOP
- SETB DQ ;開(kāi)始讀總線釋放
- MOV R3,#9
- RE2: DJNZ R3,RE2 ;延時(shí)18微妙
- MOV C, DQ ; 從總線讀到一個(gè)BIT
- MOV R3,#23
- RE3: DJNZ R3,RE3 ;等待100μ秒
- RRC A ;把讀得的位值環(huán)移給A
- DJNZ R2,RE1 ;讀下一個(gè)BIT
- MOV @R1,A
- DEC R1
- DJNZ R4,RE0
- RET
- ;;;;;;;;;;;;;;;;;;;; */
- TURN: MOV A,WDGW
- JBC ACC.4,TU ;是零下跳到TU
- MOV D_BIT,#0FFH
- DIS: MOV DPTR,#TAB
- MOV A,WDDW ;低位
- ANL A,#0FH ;取小數(shù)
- MOVC A,@A+DPTR
- MOV C_BIT,A ;精確到0.1度的小數(shù)值
- MOV A,WDDW
- SWAP A ;高低位互換
- ANL A,#0FH
- MOV WDDW,A
- MOV A,WDGW
- ANL A,#0FH
- SWAP A
- ORL A,WDDW;重新組合,為不帶小數(shù)的溫度值
- MOV WDDW,A
- MOV A,D_BIT
- CJNE A,#10,TU_1;百位不是-跳轉(zhuǎn)
- MOV A,WDDW
- DIS_1:
- MOV B,#10
- DIV AB
- MOV A_BIT,B;十位值
- MOV B_BIT,A;個(gè)位值
- MOV A,D_BIT
- CJNE A,#0,TU_2;百位不是0跳轉(zhuǎn)
- MOV D_BIT,#12;是0消隱
- DIS_2:MOV A,B_BIT
- CJNE A,#0,TUR;十位不是0轉(zhuǎn)
- MOV B_BIT,#12;是0消隱
- TUR: RET
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- TU: MOV D_BIT,#10;顯示-號(hào)
- CPL A
- ANL A,#0FH
- mov WDGW,A;取反A存入高位
- MOV A,WDDW
- CPL A
- CLR C
- INC A
- MOV WDDW,A
- MOV A,WDGW
- ADDC A,#0
- MOV WDGW,A
- JMP DIS
- TU_1: MOV A,WDDW
- MOV B,#100
- DIV AB
- MOV D_BIT,A;百位值
- MOV A,B
- JMP DIS_1
- TU_2: CJNE A,#10,TUR;百位不是-跳轉(zhuǎn)
- JMP DIS_2
- TAB:DB 0, 1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
- ;;;;;;;;;;;;以上是溫度程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
- TABX:;5*7小字符 用于固定顯示時(shí)間和溫度
- DB 060H, 090H, 090H, 090H, 090H, 090H, 060H, 000H ;0
- DB 020H, 060H, 020H, 020H, 020H, 020H, 070H, 000H ;1
- DB 060H, 090H, 010H, 020H, 040H, 080H, 0F0H, 000H ;2
- DB 060H, 090H, 010H, 060H, 010H, 090H, 060H, 000H ;3
- DB 020H, 060H, 0A0H, 0A0H, 0F0H, 020H, 020H, 000H ;4
- DB 0F0H, 080H, 0E0H, 090H, 010H, 090H, 060H, 000H ;5
- DB 060H, 090H, 080H, 0E0H, 090H, 090H, 060H, 000H ;6
- DB 0F0H, 010H, 010H, 020H, 040H, 040H, 040H, 000H ;7
- DB 060H, 090H, 090H, 060H, 090H, 090H, 060H, 000H ;8
- DB 060H, 090H, 090H, 070H, 010H, 090H, 060H, 000H ;9
- DB 000H, 000H, 000H, 0F0H, 000H, 000H, 000H, 000H ;- 10
- DB 080H, 030H, 040H, 040H, 040H, 040H, 030H, 000H ;C 11
- DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H ; 空格 12
- DB 000H, 000H, 000H, 000H, 060H, 060H, 000H, 000H ;. 13
- DB 000H, 060H, 060H, 000H, 060H, 060H, 000H, 000H ;: 14
- DB 000H, 000H, 080H, 000H, 000H, 080H, 000H, 000H ;: 單冒號(hào)15
- /*;程序功能:歌曲演奏
- START1: MOV TMOD,#00000001B; 設(shè)T0方式1
- MOV IE,#10000010B;允許T0中斷
- MOV DPTR,#TABLE ; 存表首地址
- LOOP: CLR A ; 清零
- MOVC A,@A+DPTR ; 查表
- MOV R1,A ; 定時(shí)器高8位存R1
- INC DPTR ; 指針加1
- CLR A ; 清零
- MOVC A,@A+DPTR ; 查表
- MOV R0,A ; 定時(shí)器低8位存R0
- ORL A,R1 ; 進(jìn)行"或"運(yùn)算
- JZ NEXT0 ; 全0為休止符
- MOV A, R0 ;
- ANL A, R1 ; 進(jìn)行"與"運(yùn)算
- CJNE A,#0FFH,NEXT; 全1表示樂(lè)曲結(jié)束
- RET
- NEXT: MOV TH0,R1 ; 裝入高位定時(shí)值
- MOV TL0,R0 ; 裝入低位定時(shí)值
- SETB TR0 ; 啟動(dòng)定時(shí)器T0
- setb tf0 ;啟動(dòng)定時(shí)器工作
- JMP NEXT1 ; 轉(zhuǎn)移NEXT1處
- NEXT0: CLR TR0 ; 關(guān)閉定時(shí)器停止發(fā)音
- NEXT1: CLR A ; 清零
- INC DPTR ; 指針加1
- MOVC A,@A+DPTR ; 查延時(shí)常數(shù)
- MOV R2, A ; 延時(shí)常數(shù)存入R2
- LOOP1: ACALL DDELAY ; 調(diào)延時(shí)子程序
- DJNZ R2, LOOP1 ; 控制延時(shí)次數(shù)
- INC DPTR ; 指針加1
- JMP LOOP ; 轉(zhuǎn)移LOOP處
- EXT0: MOV TH0,R1 ; 重裝定時(shí)值
- MOV TL0,R0 ;
- CPL BEEP ; 反相輸出
- RETI ; 中斷返回
- DDELAY: MOV R7,#2 ; 延時(shí)187ms
- D2: MOV R6,#187 ;
- D3: MOV R5,#248 ;
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp; ;
- DJNZ R6,D3 ;
- DJNZ R7,D2 ;
- RET ;
- TABLE:
- DB 0FDH,80H,03H,0FDH,80H,01H,0FDH,0C6H,04H,0FDH,80H,04H,0FEH,2AH,04H,0FEH,02H,04H ;
- DB 00H,00H,04H,0FDH,80H,03H,0FDH,80H,01H,0FDH,0C6H,04H,0FDH,80H,04H ;
- DB 0FEH,5CH,04H, 0FEH,2AH,04H,00H,00H,04H,0FDH,80H,03H,0FDH,80H,01H ;
- DB 0FEH,0C0H,04H, 0FEH,84H,04H,0FEH,2AH,04H, 0FEH,02H,04H,0FDH,0C6H,04H ;
- DB 0FEH,98H,03H, 0FEH,98H,01H,0FEH,84H,04H, 0FEH,2AH,04H,0FEH,5CH,04H, 0FEH,2AH,04H,00H,00H,04H,0FFH,0FFH */
- ;以下為公歷轉(zhuǎn)農(nóng)歷子程序
- CONvert: MOV A,time_year ;將年月日轉(zhuǎn)化為 HEX 格式 16進(jìn)制
- MOV B,#16
- DIV AB
- MOV CONvert_yeAr,B
- MOV B,#10
- MUL AB
- ADD A,CONvert_yeAr
- MOV CONvert_yeAr,A
- MOV A,time_month
- MOV C,ACC.7
- MOV f0,C ;f0暫存世紀(jì)標(biāo)志,僅用于數(shù)據(jù)表定位
- CLR ACC.7
- JNB ACC.4,CON_02
- CLR ACC.4 ;ACC.4 為 1 表示大于 10 月
- ADD A,#10
- CON_02: MOV CONvert_mONth,A
- MOV A,time_date;
- SWAP A
- ANL A,#07H
- MOV B,#10
- MUL AB
- MOV CONVERT_DATE,A
- MOV A,TIME_DATE
- ANL A,#0FH
- ADD A,CONvert_dAte
- MOV CONvert_dAte,A
- MOV dptr,#mONth_dAtA ;以下定位本年數(shù)據(jù)在表格中的位置
- MOV A,CONvert_yeAr
- JB f0,CON_06 ;當(dāng)前為 19 世紀(jì)年跳轉(zhuǎn)
- ; ADD A,#100 ;從 19 世紀(jì)起定義表格起始年,20 世紀(jì)要加 100 年
- CON_06: CLR C
- SUBB A,#stArt_yeAr
- MOV B,#3 ;表格每年 3 字節(jié)
- MUL AB
- ADD A,dpl
- MOV dpl,A
- MOV A,B
- ADDC A,dph
- MOV dph,A
- MOV A,#2
- MOVC A,@A+dptr ;讀本年表格最后一字節(jié)(春節(jié)日期)
- CLR ACC.7 ;ACC.7 是閏年第 13 個(gè)月大小,在此不用
- MOV B,#32
- DIV AB
- MOV temp_Byte1,A ;春節(jié)月份
- MOV temp_Byte2,B ;春節(jié)日
- ;以下計(jì)算當(dāng)前日期距元旦天數(shù)
- MOV temp_Byte3,#0 ;設(shè)距元旦天數(shù)高位為 0
- MOV A,CONvert_mONth
- CJNE A,#10,CON_08
- CON_08: JC CON_09 ;9 月以前日子數(shù)小于 256 天,高字節(jié)為 0(9 月份過(guò)去的整月為 8 個(gè)月)
- MOV temp_Byte3,#1
- CON_09: MOV A,CONvert_yeAr
- ANL A,#03h ;ACC 為除 4 的余數(shù)
- JNZ CON_10 ;轉(zhuǎn)常年處理
- ;年除 4 余數(shù)為 0 是閏年
- MOV A,CONvert_mONth
- LCALL get_ruN_dAys_lOw ;取得閏年過(guò)去月的天數(shù)的低字節(jié)
- SJMP CON_12
- CON_10: MOV A,CONvert_mONth
- LCALL get_dAys_lOw ;取得常年過(guò)去月的天數(shù)的低字節(jié)
- CON_12: MOV B,CONvert_dAte
- DEC B ;因?yàn)槿掌趶?nbsp; 1 日起,而不是 0 日起
- ADD A,B ;過(guò)去的整月天數(shù)加當(dāng)月天數(shù)
- MOV temp_Byte4,A
- JNC CON_14
- INC temp_Byte3 ;temp_Byte3,temp_Byte4 分別為公歷年過(guò)去的天數(shù)的高低字節(jié)
- ;以下求春節(jié)距元旦天數(shù),因肯定小于 256 天所以只用一字節(jié)表示
- CON_14: MOV A,temp_Byte1
- LCALL get_dAys_lOw ;春節(jié)不會(huì)在 3 月份,不用考慮閏年
- DEC A ;因?yàn)槿掌趶?nbsp; 1 日起
- ADD A,temp_Byte2
- MOV temp_Byte5,A ;temp_Byte5,為春節(jié)距元旦天數(shù)
- MOV A,CONvert_mONth
- CJNE A,temp_Byte1,CON_20 ;轉(zhuǎn)換月與春節(jié)月比較
- MOV A,CONvert_dAte
- CJNE A,temp_Byte2,CON_20 ;轉(zhuǎn)換日與春節(jié)日比較
- CON_20: JC CON_22
- LJMP CON_60 ;當(dāng)前日大于等于春節(jié)日期,公歷年與農(nóng)歷年同年份
- CON_22: MOV A,CONvert_yeAr ;不到春節(jié),農(nóng)歷年比公歷年低一年
- JNZ CON_24
- MOV A,#100 ;年有效數(shù) 0-99
- CON_24: DEC A
- MOV CONvert_yeAr,A
- MOV A,dpl
- CLR C
- SUBB A,#3
- MOV dpl,A
- JNC CON_26
- DEC dph ;表格指針指向上一年
- CON_26: MOV A,temp_Byte5
- CLR C
- SUBB A,temp_Byte4
- MOV temp_Byte3,A ;temp_Byte3 中為當(dāng)前日離春節(jié)的天數(shù)
- MOV CONvert_mONth,#12 ;農(nóng)歷月為 12 月
- CLR f0 ;1901-2099 年沒(méi)有閏 12 月,清閏月標(biāo)志
- CLR A
- MOVC A,@A+dptr
- ANL A,#0f0h
- SWAP A;
- MOV temp_Byte4,A ;temp_Byte4 中為閏月
- JZ CON_30 ;沒(méi)有閏月轉(zhuǎn)移
- MOV A,#2 ;有閏月,取第 13 個(gè)月天數(shù)
- MOVC A,@A+dptr
- MOV C,ACC.7
- MOV A,#1
- MOVC A,@A+dptr
- RLC A ;ACC 中為最后 6 個(gè)月的大小值
- SJMP CON_34
- CON_30: MOV A,#1
- MOVC A,@A+dptr ;ACC 中為最后 6 個(gè)月的大小值
- CON_34: MOV temp_Byte5,A
- CON_40: MOV A,temp_Byte5
- RRC A
- MOV temp_Byte5,A
- JC CON_42
- MOV B,#29 ;小月 29 天
- SJMP CON_44
- CON_42: MOV B,#30 ;大月 30 天
- CON_44: MOV A,temp_Byte3
- CLR C
- SUBB A,B
- JZ CON_46 ;正好夠減,就是農(nóng)歷日 1 日
- JNC CON_50 ;不夠減一月天數(shù),結(jié)束農(nóng)歷月調(diào)整
- CPL A ;求補(bǔ)取絕對(duì)值
- INC A
- CON_46: INC A ;加 1 即為農(nóng)歷日
- MOV B,#10 ;轉(zhuǎn)換并保存農(nóng)歷日,月,年
- DIV AB
- SWAP A
- ORL A,B
- MOV CONvert_dAte,A
- MOV A,CONvert_mONth
- MOV B,#10
- DIV AB
- SWAP A
- ORL A,B
- MOV C,f0
- MOV ACC.7,C
- MOV CONvert_mONth,A
- MOV A,CONvert_yeAr
- MOV B,#10
- DIV AB
- SWAP A
- ORL A,B
- MOV CONvert_yeAr,A
- RET ;結(jié)束轉(zhuǎn)換 ==========================
- CON_50: MOV temp_Byte3,A ;temp_Byte3 存減去一月后的天數(shù)
- JB f0,CON_52 ;是閏月,前推一月,月份不減
- DEC CONvert_mONth;
- CON_52: MOV A,CONvert_mONth
- CJNE A,temp_Byte4,CON_54
- CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
- CON_54: SJMP CON_40
- CON_60: MOV A,temp_Byte4 ;春節(jié)日小于當(dāng)前日,農(nóng)歷年同公歷年
- CLR C
- SUBB A,temp_Byte5
- MOV temp_Byte4,A
- JNC CON_62
- DEC temp_Byte3 ;temp_Byte3 temp_Byte4 中為公歷日離春節(jié)的天數(shù)
- CON_62: MOV CONvert_mONth,#1 ;農(nóng)歷月為 1 月
- CLR A
- MOVC A,@A+dptr
- MOV temp_Byte5,A
- ANL A,#0f0h
- SWAP A;
- XCH A,temp_Byte5 ;temp_Byte5 中為閏月,ACC 為當(dāng)年農(nóng)歷表第一字節(jié)
- CLR f0 ;第一個(gè)月肯定不是閏月
- ANL A,#0fh
- MOV temp_Byte1,A
- MOV A,#1
- MOVC A,@A+dptr
- MOV temp_Byte2,A
- ANL A,#0f0h
- ORL A,temp_Byte1
- SWAP A
- MOV temp_Byte1,A
- MOV A,#2
- MOVC A,@A+dptr
- MOV C,ACC.7
- MOV A,temp_Byte2
- ANL A,#0fh
- SWAP A
- MOV ACC.3,C;
- MOV temp_Byte2,A ;以上 temp_Byte1,temp_Byte2 各 BIT 存農(nóng)歷年大小
- CON_70: MOV A,temp_Byte2
- RLC A
- MOV temp_Byte2,A
- MOV A,temp_Byte1
- RLC A
- MOV temp_Byte1,A
- JC CON_72
- MOV B,#29 ;小月 29 天處理
- SJMP CON_74
- CON_72: MOV B,#30 ;大月 30 天
- CON_74: MOV A,temp_Byte4
- CLR C
- SUBB A,B
- JNC CON_78 ;低字節(jié)夠減跳轉(zhuǎn)
- MOV B,A ;低字節(jié)不夠減, B 暫存減后結(jié)果,
- MOV A,temp_Byte3
- JZ CON_76 ;高字節(jié)為 0,不夠減
- DEC temp_Byte3
- MOV temp_Byte4,B
- SJMP CON_80
- CON_76: MOV A,temp_Byte4 ;不夠減結(jié)束月調(diào)整
- LJMP CON_46 ;轉(zhuǎn)日期加 1 后,處理并保存轉(zhuǎn)換后農(nóng)歷年月日
- CON_78: MOV temp_Byte4,A ;temp_Byte3 temp_Byte4 天數(shù)為減去一月后天數(shù)
- CON_80: MOV A,CONvert_mONth
- CJNE A,temp_Byte5,CON_82
- CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
- JNB f0,CON_82 ;更改標(biāo)志后是非閏月,月份加 1
- SJMP CON_70
- CON_82: INC CONvert_mONth;
- SJMP CON_70
- get_dAys_lOw:
- MOVC A,@A+PC ;取得常年過(guò)去月的天數(shù)的低字節(jié)
- RET
- DB 0,31,59,90,120,151,181,212,243,17,48,78
- get_ruN_dAys_lOw:
- MOVC A,@A+PC ;取得閏年過(guò)去月的天數(shù)的低字節(jié)
- RET
- DB 0,31,60,91,121,152,182,213,244,18,49,79
- mONth_dAtA:
- ;公歷年對(duì)應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié),
- ;格式第一字節(jié) BIT7-4 位表示閏月月份,值為 0 為無(wú)閏月,BIT3-0 對(duì)應(yīng)農(nóng)歷第 1-4 月的大小
- ;第二字節(jié) BIT7-0 對(duì)應(yīng)農(nóng)歷第 5-12 月大小,第三字節(jié) BIT7 表示農(nóng)歷第 13 個(gè)月大小
- ;月份對(duì)應(yīng)的位為 1 表示本農(nóng)歷月大(30 天),為 0 表示小(29 天).
- ;第三字節(jié) BIT6-5 表示春節(jié)的公歷月份,BIT4-0 表示春節(jié)的公歷日期
- /*DB 004h,0Aeh,053h,00Ah,057h,048h,055h,026h,0Bdh,00dh,026h,050h,00dh,095h,044h; 1905
- DB 046h,0AAh,0B9h,005h,06Ah,04dh,009h,0Adh,042h,024h,0Aeh,0B6h,004h,0Aeh,04Ah; 1910
- DB 06Ah,04dh,0Beh,00Ah,04dh,052h,00dh,025h,046h,05dh,052h,0BAh,00Bh,054h,04eh; 1915
- DB 00dh,06Ah,043h,029h,06dh,037h,009h,05Bh,04Bh,074h,09Bh,0C1h,004h,097h,054h; 1920
- DB 00Ah,04Bh,048h,05Bh,025h,0BCh,006h,0A5h,050h,006h,0d4h,045h,04Ah,0dAh,0B8h; 1925
- DB 002h,0B6h,04dh,009h,057h,042h,024h,097h,0B7h,004h,097h,04Ah,066h,04Bh,03eh; 1930
- DB 00dh,04Ah,051h,00eh,0A5h,046h,056h,0d4h,0BAh,005h,0Adh,04eh,002h,0B6h,044h; 1935
- DB 039h,037h,038h,009h,02eh,04Bh,07Ch,096h,0Bfh,00Ch,095h,053h,00dh,04Ah,048h; 1940
- DB 06dh,0A5h,03Bh,00Bh,055h,04fh,005h,06Ah,045h,04Ah,0Adh,0B9h,002h,05dh,04dh; 1945
- DB 009h,02dh,042h,02Ch,095h,0B6h,00Ah,095h,04Ah,07Bh,04Ah,0Bdh,006h,0CAh,051h; 1950
- DB 00Bh,055h,046h,055h,05Ah,0BBh,004h,0dAh,04eh,00Ah,05Bh,043h,035h,02Bh,0B8h; 1955
- DB 005h,02Bh,04Ch,08Ah,095h,03fh,00eh,095h,052h,006h,0AAh,048h,07Ah,0d5h,03Ch; 1960
- DB 00Ah,0B5h,04fh,004h,0B6h,045h,04Ah,057h,039h,00Ah,057h,04dh,005h,026h,042h; 1965
- DB 03eh,093h,035h,00dh,095h,049h,075h,0AAh,0Beh,005h,06Ah,051h,009h,06dh,046h; 1970
- DB 054h,0Aeh,0BBh,004h,0Adh,04fh,00Ah,04dh,043h,04dh,026h,0B7h,00dh,025h,04Bh; 1975
- DB 08dh,052h,0Bfh,00Bh,054h,052h,00Bh,06Ah,047h,069h,06dh,03Ch,009h,05Bh,050h; 1980
- DB 004h,09Bh,045h,04Ah,04Bh,0B9h,00Ah,04Bh,04dh,0ABh,025h,0C2h,006h,0A5h,054h; 1985
- DB 006h,0d4h,049h,06Ah,0dAh,03dh,00Ah,0B6h,051h,009h,037h,046h,054h,097h,0BBh; 1990
- DB 004h,097h,04fh,006h,04Bh,044h,036h,0A5h,037h,00eh,0A5h,04Ah,086h,0B2h,0Bfh; 1995
- DB 005h,0ACh,053h,00Ah,0B6h,047h,059h,036h,0BCh,009h,02eh,050h,00Ch,096h,045h; 2000 */
- DB 04dh,04Ah,0B8h,00dh,04Ah,04Ch,00dh,0A5h,041h,025h,0AAh,0B6h,005h,06Ah,049h; 2005
- DB 07Ah,0Adh,0Bdh,002h,05dh,052h,009h,02dh,047h,05Ch,095h,0BAh,00Ah,095h,04eh; 2010
- DB 00Bh,04Ah,043h,04Bh,055h,037h,00Ah,0d5h,04Ah,095h,05Ah,0Bfh,004h,0BAh,053h; 2015
- DB 00Ah,05Bh,048h,065h,02Bh,0BCh,005h,02Bh,050h,00Ah,093h,045h,047h,04Ah,0B9h; 2020
- DB 006h,0AAh,04Ch,00Ah,0d5h,041h,024h,0dAh,0B6h,004h,0B6h,04Ah,069h,057h,03dh; 2025
- DB 00Ah,04eh,051h,00dh,026h,046h,05eh,093h,03Ah,00dh,053h,04dh,005h,0AAh,043h; 2030
- DB 036h,0B5h,037h,009h,06dh,04Bh,0B4h,0Aeh,0Bfh,004h,0Adh,053h,00Ah,04dh,048h; 2035
- DB 06dh,025h,0BCh,00dh,025h,04fh,00dh,052h,044h,05dh,0AAh,038h,00Bh,05Ah,04Ch; 2040
- DB 005h,06dh,041h,024h,0Adh,0B6h,004h,09Bh,04Ah,07Ah,04Bh,0Beh,00Ah,04Bh,051h; 2045
- DB 00Ah,0A5h,046h,05Bh,052h,0BAh,006h,0d2h,04eh,00Ah,0dAh,042h,035h,05Bh,037h; 2050
- DB 009h,037h,04Bh,084h,097h,0C1h,004h,097h,053h,006h,04Bh,048h,066h,0A5h,03Ch; 2055
- DB 00eh,0A5h,04fh,006h,0B2h,044h,04Ah,0B6h,038h,00Ah,0Aeh,04Ch,009h,02eh,042h; 2060
- DB 03Ch,097h,035h,00Ch,096h,049h,07dh,04Ah,0Bdh,00dh,04Ah,051h,00dh,0A5h,045h; 2065
- DB 055h,0AAh,0BAh,005h,06Ah,04eh,00Ah,06dh,043h,045h,02eh,0B7h,005h,02dh,04Bh; 2070
- DB 08Ah,095h,0Bfh,00Ah,095h,053h,00Bh,04Ah,047h,06Bh,055h,03Bh,00Ah,0d5h,04fh; 2075
- DB 005h,05Ah,045h,04Ah,05dh,038h,00Ah,05Bh,04Ch,005h,02Bh,042h,03Ah,093h,0B6h; 2080
- DB 006h,093h,049h,077h,029h,0Bdh,006h,0AAh,051h,00Ah,0d5h,046h,054h,0dAh,0BAh; 2085
- DB 004h,0B6h,04eh,00Ah,057h,043h,045h,027h,038h,00dh,026h,04Ah,08eh,093h,03eh; 2090
- DB 00dh,052h,052h,00dh,0AAh,047h,066h,0B5h,03Bh,005h,06dh,04fh,004h,0Aeh,045h; 2095
- DB 04Ah,04eh,0B9h,00Ah,04dh,04Ch,00dh,015h,041h,02dh,092h,0B5h,00dh,053h,049h; 2100
- ;ds1302時(shí)鐘上升沿輸入命令或數(shù)據(jù),下降沿輸出數(shù)據(jù).===========================================================================
- IN_1302:mov MIAO,#00H ;秒賦初值 出廠日期:2010.6.25.12:00:00
- mov FEN,#00H ;分賦初值
- mov SHI,#12H ;時(shí)賦初值
- mov RIQI,#025H ;日賦初值h
- mov YUE,#06H ;月賦初值
- mov XQI,#05H ;星期賦初值
- mov NIAN,#10H ;年賦初值
- lcall set1302 ;調(diào)用初值設(shè)定子程序
- RET
- ;入口參數(shù):初始時(shí)間:Second,Minute,Hour,Day,Month,Week.YearL(地址連續(xù))*/
- Set1302:
- CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, #8EH ;控制寄存器 10001110b
- LCALL RTInputByte
- MOV B, #00H ;寫(xiě)操作前WP=0
- LCALL RTInputByte
- MOV B, #90H ;控制寄存器 10010000b
- LCALL RTInputByte
- MOV B, #10101001b ;充電
- LCALL RTInputByte
- SETB T_CLK
- CLR T_RST
- MOV R0, #MIAO;
- MOV R7, #7 ;秒 分 時(shí) 日 月 星期 年 共7個(gè)字節(jié)
- MOV R1, #80H ;秒寫(xiě)地址 10000000b
- S13021: CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, R1 ;寫(xiě)秒 分 時(shí) 日 月 星期 年 地址
- LCALL RTInputByte
- MOV A, @R0 ;寫(xiě)秒數(shù)據(jù)
- MOV B, A
- LCALL RTInputByte
- INC R0
- INC R1
- INC R1
- SETB T_CLK
- CLR T_RST
- DJNZ R7, S13021
- CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, #8EH ;控制寄存器
- LCALL RTInputByte
- MOV B, #80H ;控制,WP=1,寫(xiě)保護(hù)
- LCALL RTInputByte
- SETB T_CLK
- CLR T_RST
- RET
- ;功 能:從DS1302 讀時(shí)間
- Get1302:
- MOV R0, #MIAO;
- MOV R7, #7
- MOV R1, #81H ;秒地址
- G13021: CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, R1 ;秒 分 時(shí) 日 月 星期 年 地址
- LCALL RTInputByte
- LCALL RTOutputByte
- MOV @R0, A ;秒
- INC R0
- INC R1
- INC R1
- SETB T_CLK
- CLR T_RST
- DJNZ R7, G13021
- RET
- ;功 能:寫(xiě)1302一字節(jié) (內(nèi)部子程序)
- RTInputByte:
- MOV R3, #8 ;一個(gè)字節(jié)有八個(gè)位,移八次.
- Inbit1: MOV A, B
- RRC A ;通過(guò)A移入CY.
- MOV B, A
- MOV T_IO, C ;移入芯片內(nèi).
- SETB T_CLK
- CLR T_CLK
- DJNZ R3, Inbit1
- RET
- ;功 能:讀1302一字節(jié)
- RTOutputByte:
- MOV R3, #8 ;一個(gè)字節(jié)有八個(gè)位,移八次.
- Out_1: MOV C, T_IO ;從芯片內(nèi)移到CY
- RRC A ;通過(guò)CY移入A.
- SETB T_CLK
- CLR T_CLK
- DJNZ R3,Out_1
- RET
- ;=================================================
- ;以下子程序用于從當(dāng)前公歷日期,推算星期,
- ;入口:time_yeAr,time_month ,time_date ,定義公歷年 月 日,BCD 碼,其中月的
- ;BIT7 表示世紀(jì),0表示20 世紀(jì),1表示 19 世紀(jì),出口 time_week, 0-6 表示星期日-星期六,程序不改變?nèi)肟跀?shù)據(jù)
- ;使用資源:ACC,B,psw,temp_Byte1,temp_Byte2,temp_Byte3
- GetWeek: MOV A,NIAN
- MOV B,#16
- DIV AB
- MOV temp_Byte1,B
- MOV B,#10
- MUL AB
- ADD A,temp_Byte1
- MOV temp_Byte1,A ;temp_Byte1=年
- MOV A,YUE
- JB ACC.7,getw02
- MOV A,#100
- ADD A,temp_Byte1
- MOV temp_Byte1,A ;20世紀(jì)年+100
- MOV A,YUE
- CLR ACC.7
- getw02: JNB ACC.4,getw04
- ADD A,#10
- CLR ACC.4
- getw04: MOV temp_Byte2,A ;temp_Byte2=月
- MOV A,RIQI
- MOV B,#16
- DIV AB
- MOV temp_Byte3,B
- MOV B,#10
- MUL AB
- ADD A,temp_Byte3
- MOV temp_Byte3,A ;temp_Byte3=日
- MOV A,temp_Byte1;
- ANL A,#03h
- JNZ getw10 ;非閏年轉(zhuǎn)移
- MOV A,temp_Byte2
- CJNE A,#3,getw06
- getw06: JNC getw10 ;月大于 2 轉(zhuǎn)移
- DEC temp_Byte3 ;份小于等于 2,又是閏年,日減 1
- getw10: MOV A,temp_Byte2;
- LCALL get_CorreCt ;取月校正表數(shù)據(jù)
- ADD A,temp_Byte1
- MOV B,#7
- DIV AB ;B放年加校正日數(shù)之和后除7 的余數(shù) 不先做這一步;有可能數(shù)據(jù)溢出
- MOV A,temp_Byte1
- ANL A,#0fCh
- RR A
- RR A ;以上年除 4 即閏年數(shù)
- ADD A,B
- ADD A,temp_Byte3
- MOV B,#7
- DIV AB
- MOV XQI,B ; time_week,B
- RET
- get_COrreCt:
- MOVC A,@A+PC
- RET
- DB 0,3,3,6,1,4,6,2,5,0,3,5
- END
-
復(fù)制代碼 nbsp; ;保持16微秒以上
RRC A ;把字節(jié)DATA分成8個(gè)BIT環(huán)移給C
MOV DQ, C ;寫(xiě)入一個(gè)BIT
MOV R3,#23
DJNZ R3,- ;***************引腳定義,根據(jù)使用不同的管腳而改動(dòng)*************
- ;農(nóng)歷,星期,1302程序由網(wǎng)上下載
- ABCD EQU P2 ;行掃描0-7
- SEG EQU P1.1 ; 紅
- SER EQU P1.0 ;內(nèi)容發(fā)送綠
- SRCLK EQU P1.2 ;串行CP端
- RCLK EQU P1.3 ;輸出CP端
- EN EQU P1.4 ;EN為138使能端.高電平關(guān)閉顯示;低電平顯示
- DQ EQU P3.6 ;溫度18b20
- BEEP EQU P3.7 ;蜂鳴器
- AN EQU P0.1 ;中間按鍵
- ANS EQU P0.0 ;上按鍵
- ANX EQU P0.4 ;下按鍵
- ANZ EQU P0.2 ;左按鍵
- ANY EQU P0.3 ;右按鍵
- T_CLK EQU P0.7 ;實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳
- T_IO EQU P0.6 ;實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳
- T_RST EQU P0.5 ;實(shí)時(shí)時(shí)鐘復(fù)位線引腳
- ;溫度存放地址
- A_BIT EQU 22H ;存放個(gè)位數(shù)變量
- B_BIT EQU 21H ;存放十位數(shù)變量
- C_BIT EQU 24H ;存放 小數(shù)變量
- D_BIT EQU 20H ;存放 百 位數(shù)變量
- FLAG EQU 26H ;DS18B20是否存在標(biāo)志
- XSD EQU 23H ;點(diǎn)
- WDFH EQU 25H ;℃
- WDGW EQU 27H ;溫度高位值
- WDDW EQU 28H ;溫度低位值
- QUSHU EQU 28H
- QUSHU1 EQU 08H
- QUSHU2 EQU 09H
- LSTZSJ1 EQU 0AH
- LSTZSJ EQU 0BH
- MIAO EQU 20H ;秒
- FEN EQU 21H ;分
- SHI EQU 22H ;時(shí)
- RIQI EQU 23H ;日
- YUE EQU 24H ;月 ACC.7=0為2000年
- XQI EQU 25H ;星期
- NIAN EQU 26H ;年
- start_year EQU 01; 定義查詢(xún)表起始年份,01--199 表示 1901-2099 年
- ;以下三單元為需轉(zhuǎn)換的公歷日期 是子程序的入口數(shù)據(jù)
- time_year EQU NIAN
- time_month EQU YUE ;BIT7 表示世紀(jì),為 1 表示 19 世紀(jì),為 0 表示 20 世紀(jì)
- time_date EQU RIQI
- ;以下三單元存轉(zhuǎn)換后農(nóng)歷日期 與入口單元重疊,如要保留入口信息,請(qǐng)重定義出口地址
- CONvert_yeAr DATA 3Fh
- CONvert_mONth DATA 3Eh ;BIT7 為 1 表示閏月
- CONvert_dAte DATA 3Dh
- temp_Byte4 DATA 3Bh
- temp_Byte5 DATA 3Ch
- temp_Byte1 EQU 20H
- temp_Byte2 EQU 21H
- temp_Byte3 EQU 22H
- ;*************************************************************
- ;*********************中斷入口程序****************************
- ORG 0000H
- LJMP MAIN
- ; ORG 0003H
- ; RETI
- ; ORG 000BH ; 定時(shí)器 T0中斷入口
- ; JMP EXT0 ; 跳至T0中斷子程序
- ; ORG 0013H
- ; RETI
- ;; ORG 001BH
- ; RETI
- ; ORG 0023H
- ; RETI
- ;***************主程序****************************************/
- MAIN: MOV SP,#69H ;堆棧首址
- LCALL BEEP_BZ
- LCALL AN_DEL
- LCALL BEEP_BZ ;開(kāi)機(jī)鳴響2聲
- LCALL RE_TEMP ;對(duì)DS18B20初始化及讀取
- LCALL GET1302 ;讀時(shí)間
- MOV A,MIAO
- JNB ACC.7,STRAT ;如果秒最高位是1初始化時(shí)鐘
- LCALL IN_1302 ;時(shí)鐘芯片初始化
- STRAT: ; MOV SP,#69H ;堆棧首址
- ; MOV R0,#30H ;初使化寄存顯示單元
- ; MOV R1,#74 ;30H-單元清零
- ; MOV A,#0
- ST: ; MOV @R0,A
- ; INC R0
- ; DJNZ R1,ST
- ST1:
- LCALL Get1302 ;讀取時(shí)間
- LCALL XSSJ ;時(shí)間數(shù)據(jù)轉(zhuǎn)換
- LCALL PLAY1 ;顯示時(shí)間
- MOV A,MIAO ;如果秒=30顯示滾動(dòng)日期
- CJNE A,#30H,ST2
- LCALL GDRQ
- ST2: JNB ANZ,WD ;按下左鍵調(diào)用溫度顯示
- ; JNB ANY,YYUE ;按下右鍵調(diào)用音樂(lè)
- JNB ANX,G_DRQ ;按下下鍵調(diào)用滾動(dòng)顯示日歷
- JNB AN,TZSJ ;按下中間按鍵調(diào)用調(diào)時(shí)
- JMP ST1
- ;*****************************
- G_DRQ:LCALL GDRQ
- JMP ST1
- ;*****************************************************
- WD: LCALL AN_DEL
- JB ANZ,WD_OUT
- LCALL BEEP_BZ
- WD_1: LCALL RE_TEMP ;讀取溫度
- LCALL TURN ;轉(zhuǎn)化溫度子程序
- LCALL XSWD ;溫度數(shù)據(jù)轉(zhuǎn)換
- LCALL PLAY ;顯示
- JB ANZ,WD_1
- LCALL AN_DEL
- LCALL BEEP_BZ
- JNB ANZ,WDOUT
- WD_OUT:RET
- GDRQ: LCALL Get1302 ;讀取時(shí)間
- LCALL RQFL ;調(diào)用日期分離程序
- LCALL L30_
- RET
- WDOUT:LJMP ST1
- ;*******************************************調(diào)整時(shí)間程序*************
- TZSJ:
- LCALL AN_DEL
- JNB AN,$
- LCALL BEEP_BZ
- TZSJ_1: LCALL S_NIAN ;顯示調(diào)年
- JNB ANS, N_J1 ;年+1
- JNB ANX,N_1 ;年-1
- JNB ANY,TZ_YUE ;調(diào)月
- JNB AN,TZSJOUT;確認(rèn)
- JNB ANZ, TZ_NOUT
- JMP TZSJ_1
- TZSJOUT:;LCALL GetWeek
- LCALL Set1302
- LCALL BEEP_BZ
- TZ_NOUT: LJMP ST1
- N_J1: LCALL AN_DEL ;年+1
- LCALL BEEP_BZ
- LCALL NIAN_J1
- LJMP TZSJ_1
- N_1: LCALL AN_DEL ;年-1
- LCALL BEEP_BZ
- LCALL NIAN_1
- LJMP TZSJ_1
- ;***************************************
- Y_J1: LCALL AN_DEL;月+1
- LCALL BEEP_BZ
- LCALL YUE_J1
- LJMP TZ_YUE1
- Y_1: LCALL AN_DEL ;月-1
- LCALL BEEP_BZ
- LCALL YUE_1
- LJMP TZ_YUE1
- ;*********
- TZ_YUE: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_YUE1: LCALL S_YUE;顯示調(diào)月
- JNB ANS,Y_J1;月+1
- JNB ANX,Y_1;月-1
- JNB ANY,TZ_RIQI;調(diào)日期
- JNB AN,TZ_YUEOUT
- JNB ANZ, TZ_YOUT
- JMP TZ_YUE1
- TZ_YUEOUT:LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_YOUT:LJMP ST1
- ;***************************************
- R_J1: LCALL AN_DEL;月+1
- LCALL BEEP_BZ
- LCALL RIQI_J1
- LJMP TZ_RIQI1
- R_1: LCALL AN_DEL ;月-1
- LCALL BEEP_BZ
- LCALL RIQI_1
- LJMP TZ_RIQI1
- ;*********
- TZ_RIQI: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_RIQI1: LCALL S_RIQI;顯示調(diào)日期
- JNB ANS,R_J1;日期+1
- JNB ANX,R_1;日期-1
- JNB ANY,TZ_SHI;
- JNB AN,TZ_RIQIOUT
- JNB ANZ, TZ_ROUT
- JMP TZ_RIQI1
- TZ_RIQIOUT:;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_ROUT:LJMP ST1
- ;***************************************
- S_J1: LCALL AN_DEL;時(shí)+1
- LCALL BEEP_BZ
- LCALL SHI_J1
- LJMP TZ_SHI1
- S_1: LCALL AN_DEL ;時(shí)-1
- LCALL BEEP_BZ
- LCALL SHI_1
- LJMP TZ_SHI1
- ;*********
- TZ_SHI: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_SHI1: LCALL S_SHI;顯示調(diào)時(shí)
- JNB ANS,S_J1;時(shí)+1
- JNB ANX,S_1;時(shí)-1
- TZ_SHI4:JNB ANY,TZ_FEN
- JNB AN,TZ_SHIOUT
- JNB ANZ, TZ_SOUT
- JMP TZ_SHI1
- TZ_SHIOUT:;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_SOUT: LJMP ST1
- ;*********
- TZ_FEN: LCALL AN_DEL
- JNB ANY,$
- LCALL BEEP_BZ
- TZ_FEN1: LCALL S_FEN;顯示調(diào)分
- JNB ANS,F_J1;分+1
- JNB ANX,F_1;分-1
- ;TZ_RIQI4:JNB ANY,TZ_FEN;
- JNB AN,TZ_FENOUT
- JNB ANZ, TZ_FOUT
- JMP TZ_FEN1
- TZ_FENOUT:MOV MIAO,#0
- ;LCALL GetWeek
- LCALL SET1302
- LCALL BEEP_BZ
- TZ_FOUT:LJMP ST1
- ;***************************************
- F_J1: LCALL AN_DEL;時(shí)+1
- LCALL BEEP_BZ
- LCALL FEN_J1
- LJMP TZ_FEN1
- F_1: LCALL AN_DEL ;時(shí)-1
- LCALL BEEP_BZ
- LCALL FEN_1
- LJMP TZ_FEN1
- ;***************************************************
- ;YYUE: LCALL START1 ;調(diào)用音樂(lè)
- ; RET
- SHIJ: LCALL IN_1302 ;調(diào)用時(shí)間初始化
- RET
- AN_DEL: MOV R6,#0
- AN_DEL1:LCALL DEL
- DJNZ R6,AN_DEL1
- RET
- ;********************調(diào)整年月日程序*********************************/=======================================================================
- S_NIAN: MOV 40H,#52 ;顯示調(diào)年
- MOV 41H,#30
- MOV A,NIAN
- ANL A,#0FH
- MOV 43H,A
- MOV A,NIAN
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_YUE: MOV 40H,#52 ;顯示調(diào)月
- MOV 41H,#31
- MOV A,YUE
- ANL A,#0FH
- MOV 43H,A
- MOV A,YUE
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_RIQI: MOV 40H,#52 ;顯示調(diào)日期
- MOV 41H,#32
- MOV A,RIQI
- ANL A,#0FH
- MOV 43H,A
- MOV A,RIQI
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_SHI: MOV 40H,#52 ;顯示調(diào)時(shí)
- MOV 41H,#53
- MOV A,SHI
- ANL A,#0FH
- MOV 43H,A
- MOV A,SHI
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- S_FEN: MOV 40H,#52 ;顯示調(diào)分
- MOV 41H,#54
- MOV A,FEN
- ANL A,#0FH
- MOV 43H,A
- MOV A,FEN
- SWAP A
- ANL A,#0FH
- MOV 42H,A
- MOV 2DH,#0
- MOV QUSHU,#40H
- LCALL LINE_88
- RET
- ;;;;;;;;;;;;;;;;;;;;
- FEN_J1:MOV LSTZSJ1,FEN;分+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#60,FEN_J12;小時(shí)60清0
- MOV LSTZSJ,#0
- FEN_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV FEN,LSTZSJ1
- RET
- FEN_1: MOV LSTZSJ1,FEN;分-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#0,FEN_12 ;分是0加60
- MOV LSTZSJ,#60
- FEN_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV FEN,LSTZSJ1
- RET
- ;;;;
- SHI_J1:MOV LSTZSJ1,SHI;小時(shí)+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#24,SHI_J12;小時(shí)24清0
- MOV LSTZSJ,#0
- SHI_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV SHI,LSTZSJ1
- RET
- SHI_1: MOV LSTZSJ1,SHI;小時(shí)-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#0,SHI_12 ;小時(shí)是0加24
- MOV LSTZSJ,#24
- SHI_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV SHI,LSTZSJ1
- RET
- ;;;;
- RIQI_J1:MOV LSTZSJ1,RIQI;日+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#32,RIQI_J12;日是32清0
- MOV LSTZSJ,#1
- RIQI_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV RIQI,LSTZSJ1
- RET
- RIQI_1: MOV LSTZSJ1,RIQI;日-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,RIQI_12 ;日是1加32
- MOV LSTZSJ,#32
- RIQI_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV RIQI,LSTZSJ1
- RET
- ;;;;
- YUE_J1:MOV LSTZSJ1,YUE;月+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;月+1
- MOV A,LSTZSJ
- CJNE A,#13,YUE_J12;月是13清0
- MOV LSTZSJ,#1
- YUE_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV YUE,LSTZSJ1
- RET
- YUE_1: MOV LSTZSJ1,YUE;月-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,YUE_12
- MOV LSTZSJ,#13
- YUE_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV YUE,LSTZSJ1
- RET
- NIAN_J1:MOV LSTZSJ1,NIAN;年+1程序
- LCALL TSSJTZ ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- INC LSTZSJ;年+1
- MOV A,LSTZSJ
- CJNE A,#100,NIAN_J12;年是100清0
- MOV LSTZSJ,#01
- NIAN_J12:
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV NIAN,LSTZSJ1
- RET
- NIAN_1: ;CJNE A,#13H,SMAJ_QR
- MOV LSTZSJ1,NIAN;年-1程序
- LCALL TSSJTZ;;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- MOV A,LSTZSJ
- CJNE A,#1,NIAN_12
- MOV LSTZSJ,#100
- NIAN_12:DEC LSTZSJ
- LCALL TSSJTZ1;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV NIAN,LSTZSJ1
- RET
- ;;;;;;;;;;;;;
- TSSJTZ:MOV A,LSTZSJ1;數(shù)據(jù)調(diào)整,10到16進(jìn)制如21:00100001轉(zhuǎn)為 21:00010101
- ANL A,#0FH
- MOV LSTZSJ,A
- MOV A,LSTZSJ1
- SWAP A
- ANL A,#0FH
- MOV B,#10
- MUL AB
- ADD A,LSTZSJ
- MOV LSTZSJ,A
- RET
- TSSJTZ1:MOV A,LSTZSJ ;數(shù)據(jù)調(diào)整,16到10進(jìn)制
- MOV B,#10
- DIV AB
- SWAP A
- MOV LSTZSJ,A
- MOV A,B
- ORL A,LSTZSJ
- MOV LSTZSJ1,A
- RET ;*/
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE_88 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF2: LCALL LINE_11 ;掃描顯示1行子程序
- DJNZ 2BH,FF2 ;掃描下一行
- MOV 2DH,#0
- RET
- ;*********掃描顯示一行子程序********************
- LINE_11: LCALL MSTR_YD_
- MOV 30H,#0
- MOV 31H,#0
- LCALL SEND_11 ;發(fā)送串行口子程序
- LCALL XTH ;選通行子程序
- LCALL DL22US
- INC 2DH
- RET
- SEND_11: MOV R0,#30H
- MOV R1,#35H
- MOV R5,#4 ;一行有2個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_11: MOV R2,#8 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- LCALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_11 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET ;
- ;*************************************** 日期分離程序====================================
- RQFL: MOV 40H,#12
- MOV 41H,#12
- MOV 42H,#12
- MOV 43H,#12
- MOV A,YUE
- JB ACC.7,RQFL1
- MOV 44H,#2
- MOV 45H,#0
- JMP RQFL3
- RQFL1: MOV 44H,#1
- MOV 45H,#9
- RQFL3:
- MOV A,NIAN
- ANL A,#0FH
- MOV 47H,A
- MOV A,NIAN
- SWAP A
- ANL A,#0FH
- MOV 46H,A
- MOV 48H,#30 ;顯示年
- MOV A,YUE
- ANL A,#0FH
- MOV 4AH,A
- MOV A,YUE
- SWAP A
- ANL A,#03H
- JZ YUE_S_1
- YUE_S_2:MOV 49H,A
- YUE_S_3: MOV 4BH,#31 ;顯示 月
- MOV A,RIQI
- ANL A,#0FH
- MOV 4DH,A
- MOV A,RIQI
- SWAP A
- ANL A,#03H
- JZ RIQI_S_1
- RIQI_S_2:MOV 4CH,A
- RIQI_S_3:MOV 4EH,#32 ;顯示 日
- MOV 4FH,#12
- MOV 50H,#16 ;顯示星期
- MOV 51H,#17
- MOV 52H,#12
- LCALL GetWeek
- MOV A,XQI
- ANL A,#07H
- CJNE A,#0,XQ_1
- MOV 53H,#32
- JMP XQ_OUT
- RIQI_S_1:MOV 4CH,#12
- JMP RIQI_S_3
- YUE_S_1: MOV 49H,#12
- JMP YUE_S_3
- XQ_1: ADD A,#41
- MOV 53H,A
- XQ_OUT:
- MOV 54H,#12 ;空格
- LCALL RE_TEMP ;讀取溫度
- LCALL TURN ;轉(zhuǎn)化溫度子程序
- MOV 55H,#15 ;T
- MOV 56H,#14 ;:
- MOV 57H,20H ;溫度百位
- MOV 58H,21H ;溫度十位
- MOV 59H,22H ;溫度個(gè)位
- MOV 5AH,#13 ;小數(shù)點(diǎn)
- MOV 5BH,24H ;溫度小數(shù)位
- MOV 5CH,#11 ;℃符號(hào)
- MOV 5DH,#12
- MOV 5EH,#33 ;農(nóng)
- MOV 5FH,#34 ;歷
- LCALL Get1302
- LCALL CONvert ;調(diào)用公歷轉(zhuǎn)農(nóng)歷程序
- MOV A,CONvert_mONth
- JNB ACC.7,RQFL4
- MOV 60H,#51
- JMP RQFL5
- RQFL4:MOV 60H,#12
- RQFL5:LCALL NL_YUE ;調(diào)用農(nóng)歷月份
- MOV 62H,#31 ;顯示月
- LCALL NL_RIQI
- MOV 65H,#12
- MOV 66H,#12
- MOV 67H,#12
- MOV 68H,#12
- ; MOV 69H,#12
- RQFLB: RET
- ;***********************
- NL_YUE: MOV A, CONvert_mONth ;農(nóng)歷月
- ANL A,#1FH
- JNB ACC.4,NL_RIQI0
- ANL A,#0FH
- ADD A,#10
- NL_RIQI0: CJNE A,#1,NL_YUE1
- MOV 61H,#35
- JMP NL_YOUT
- NL_YUE1: CJNE A,#10,NL_YUE2
- MOV 61H,#39
- JMP NL_YOUT
- NL_YUE2: CJNE A,#11,NL_YUE3
- MOV 61H,#37
- JMP NL_YOUT
- NL_YUE3: CJNE A,#12,NL_YUE4
- MOV 61H,#38
- JMP NL_YOUT
- NL_YUE4: ADD A,#41
- MOV 61H,A
- NL_YOUT: RET
- ;***************
- NL_RIQI:MOV A, CONvert_dAte ;農(nóng)歷日
- SWAP A
- ANL A,#0FH
- CJNE A,#0,NL_RIQI1
- MOV 63H,#36 ;顯示 初
- JMP NL_ROUT
- NL_RIQI1:CJNE A,#1,NL_RIQI2
- MOV 63H,#39 ;顯示 十
- JMP NL_ROUT
- NL_RIQI2:CJNE A,#2,NL_RIQI3
- MOV 63H,#40 ;顯示 二十
- JMP NL_ROUT
- NL_RIQI3:CJNE A,#3,NL_ROUT
- MOV 63H,#41 ;顯示 三十
- JMP NL_ROUT
- NL_ROUT:MOV A, CONvert_dAte ;農(nóng)歷日
- ANL A,#0FH
- CJNE A,#0,NL_RIQI4
- MOV 64H,#39 ;顯示 十
- JMP NL_RIQI5
- NL_RIQI4:ADD A,#41
- MOV 64H,A
- NL_RIQI5: RET
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
- ;;;;;;;;;;;;;;;;;;;;;;;
- L30_: MOV 2DH,#0
- MOV QUSHU,#40H
- MOV 2FH,#37 ;共有多少個(gè)半角字符,一個(gè)漢字等于兩個(gè)字符,個(gè)數(shù)值為實(shí)際字?jǐn)?shù)*2+屏長(zhǎng)度數(shù)
- HHH_: LCALL L31_ ;. 掃描一個(gè)字節(jié)
- DJNZ 2FH,HHH_ ;字?jǐn)?shù)沒(méi)完繼續(xù)
- RET
- L31_: MOV B, #1 ;每次移入內(nèi)存單元的數(shù)據(jù)要左移次數(shù)次值 ,從第一開(kāi)始。
- II_: MOV 29H,#5 ;左移速度
- III_: LCALL L32_ ;掃描顯示1幀
- DJNZ 29H,III_ ;速度沒(méi)完繼續(xù)
- INC B ;左移次數(shù)+1
- MOV A,#9
- CJNE A,B,II_ ;如果B中的數(shù)超過(guò)8就完成1個(gè)字節(jié)的8次左移顯示,否則繼續(xù)循環(huán).
- INC QUSHU ;日期數(shù)據(jù)+1---5CH→
- RET
- L32_: MOV 2BH,#8 ;掃描的行數(shù),共8行
- JJ_: LCALL L33_ ;掃描顯示1行子程序
- INC 2DH
- DJNZ 2BH,JJ_ ;8行沒(méi)完繼續(xù)
- MOV 2DH,#0 ;8行完成后再?gòu)?行開(kāi)始掃描
- RET
- L33_: MOV 2EH,B ;顯示內(nèi)容要左移幾次數(shù)再顯示的賦值給2EH單元
- LCALL SEND_YD ;發(fā)送串行口子程序
- LCALL XT_H ;選通行子程序
- LCALL MSTR_YD_ ;將顯示內(nèi)容移入內(nèi)存單元30H→
- EE_: LCALL ZY
- DJNZ 2EH,EE_
- LCALL ZYXZ ;左移速度同步修正
- RET
- MSTR_YD_:SETB RS1 ;R0,R1-數(shù)據(jù)存放起始地址,2DH行數(shù)據(jù),R3-21H,22H臨時(shí)數(shù)據(jù),R4-每屏的字節(jié)數(shù), ,20H日期數(shù)據(jù)起始地址
- SETB RS0
- MOV R0,#30H
- MOV R1,#35H
- MOV R4,#5 ;每幕顯示的字節(jié)數(shù)加1
- BB_YD_: LCALL L_SHUJU
- MOV @R0,A
- MOV @R1,A
- INC QUSHU ;加1,移到下一個(gè)字節(jié)的對(duì)應(yīng)位置
- INC R0
- INC R1
- DJNZ R4,BB_YD_
- MOV A,QUSHU
- CLR C
- SUBB A,#5
- MOV QUSHU,A
- CLR RS1
- CLR RS0
- RET
- ;;;使用R0,R1,R6,R7,B,2DH
- L_SHUJU: MOV DPTR,#TAB10
- MOV QUSHU1,R0
- MOV QUSHU2,R1
- MOV R6,B
- MOV R0,QUSHU
- L_SHU: MOV A,@R0
- MOV B,#8
- MUL AB
- MOV R7,A
- MOV A,DPH
- ADD A,B
- MOV DPH,A
- MOV A,R7
- MOV B,2DH
- ADD A,B
- MOVC A,@A+DPTR
- MOV R0,QUSHU1
- MOV R1,QUSHU2
- MOV B,R6
- RET
- ;*****************************發(fā)送數(shù)據(jù)到串口子程序*****************************************************/
- SEND_YD: MOV R0,#30H
- MOV R5,#4 ;如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_YD: CLR C ;清C方便每個(gè)字節(jié)的移動(dòng)
- MOV R2,#8 ;每個(gè)字節(jié)有8位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入A
- CPL A ;取反
- LCALL DD1_YD ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_YD ;8個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- DD1_YD: CLR SRCLK ;清串行CP端
- RLC A ;將每個(gè)字節(jié)移位
- ; MOV SER,C ;將移入C的位移入信號(hào)端
- MOV SEG,C
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD1_YD ;每個(gè)字節(jié)位移8次夠了沒(méi)有?
- RET
- ;*******選通行子程序***2BH行數(shù)據(jù)*********************************************************************************/
- XT_H: CLR RCLK ;將輸出CP變?yōu)榈碗娖綖樯仙刈鳒?zhǔn)備
- SETB EN ;將使能端變?yōu)楦唠娖綖橄陆笛刈鳒?zhǔn)備
- MOV R5,2BH
- CJNE R5,#7,HSM_1
- MOV ABCD,#11111110B
- JMP XTH_OUT
- HSM_1: CJNE R5,#6,HSM_2
- MOV ABCD,#11111101B
- JMP XTH_OUT
- HSM_2: CJNE R5,#5,HSM_3
- MOV ABCD,#11111011B
- JMP XTH_OUT
- HSM_3: CJNE R5,#4,HSM_4
- MOV ABCD,#11110111B
- JMP XTH_OUT
- HSM_4: CJNE R5,#3,HSM_5
- MOV ABCD,#11101111B
- JMP XTH_OUT
- HSM_5: CJNE R5,#2,HSM_6
- MOV ABCD,#11011111B
- JMP XTH_OUT
- HSM_6: CJNE R5,#1,HSM_7
- MOV ABCD,#10111111B
- JMP XTH_OUT
- HSM_7: CJNE R5,#8,XTH_OUT
- MOV ABCD,#01111111B
- XTH_OUT:
- SETB RCLK ;輸出CP為上升沿,顯示一個(gè)
- CLR EN ;138可顯示
- RET
- ;**********左移一位子程序*******************************************************************************/
- ZY: ;30H后存入顯示內(nèi)容,R0為顯示未址,R2為移出高位個(gè)數(shù) 字?jǐn)?shù)*2+1
- SETB RS1
- CLR RS0
- MOV R2,#5
- MOV R0, #34H ;顯示單元未址
- CLR C
- CC: MOV A, @R0
- RLC A ;將后一字節(jié)的最高位移到C里,再移到前一字節(jié)的最低位
- MOV @R0, A
- DEC R0
- DJNZ R2, CC
- CLR C
- CLR RS1
- CLR RS0
- RET
- ;********************移動(dòng)查模式時(shí)速度同步修正子程序*****************************************************/
- ZYXZ: MOV R5,B
- MOV A,#9
- SUBB A,R5
- MOV R4,A
- AA: LCALL DL22US
- NOP
- DJNZ R4 ,AA
- RET
- ;*********************************************************************************/
- ;********************時(shí)間數(shù)據(jù)轉(zhuǎn)換*************************************=====================================================================*/
- XSSJ:
- MOV A,FEN ;分
- MOV B,#10h
- DIV AB ;把41H高低4位分開(kāi)
- MOV 43H,A ;高4位存入
- MOV A,B
- MOV 44H,A ;低4位存入
- MOV A,MIAO ;秒
- MOV B,#10h
- DIV AB ;把40H高低4位分開(kāi)
- mov 45H,A ;高4位存入
- mov a,b
- mov 46H,a ;低4位存入
- MOV A,SHI
- MOV B,#16
- DIV AB
- MOV 40H,A
- MOV A,B
- MOV 41H,A
- MOV 42H,#15
- MOV A,40H
- JNZ XSSJ_1
- MOV 40H,#12
- XSSJ_1: RET
- ;*************************時(shí)間顯示程序****************************
- PLAY1: MOV DPTR,#TABX
- MOV 2DH,#0
- MOV 2FH,#20 ;速度
- GG1: CALL LINE_8 ;掃描顯示1幀
- DJNZ 2FH,GG1
- RET
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE_8 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF1: CALL LINE_1 ;掃描顯示1行子程序
- DJNZ 2BH,FF1 ;掃描下一行
- MOV A,2DH
- SUBB A ,#8 ;掃描完8行后要重頭開(kāi)始,在MSTR子程序中,掃8行后會(huì)增加8,這里-8
- MOV 2DH,A
- RET
- ;*********掃描顯示一行子程序********************
- LINE_1: CALL MSTR_R ;將顯示內(nèi)容移入內(nèi)存單元
- CALL MSTR_G
- MOV 35H,#0
- MOV 36H,#0
- ; MOV 3BH,#0
- MOV 3AH,#0
- CALL SEND_1 ;發(fā)送串行口子程序
- CALL XTH ;選通行子程序
- CALL DL22US
- INC 2DH
- RET
- ;***發(fā)送數(shù)據(jù)到串口子程序*取紅色30H-34H,綠色35H-39H***2EH,2FH緩沖**************
- SEND_1: MOV R0,#30H
- MOV R1,#38H
- MOV R5,#2 ;一行有2個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ_1: MOV R2,#5 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_1 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- CALL SEND_2
- CALL SEND_3
- RET ;
- SEND_2: MOV R0,#32H
- MOV R1,#3AH
- MOV R5,#1
- LQ_2: MOV R2,#2 ;每個(gè)字節(jié)有2位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_2 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- SEND_3: MOV R0,#33H
- MOV R1,#3BH
- MOV R5,#4
- LQ_3: MOV R2,#5 ;每個(gè)字節(jié)有5位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- CALL DD_1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ_3 ;2個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- RET
- DD_1: CLR SRCLK ;清串行CP端
- CLR C
- MOV A,R6
- RLC A ;將每個(gè)字節(jié)移位
- MOV R6,A
- CPL C
- MOV SER,C ;紅色
- CLR C
- MOV A,R7
- RLC A
- MOV R7,A
- CPL C
- MOV SEG,C ;綠色
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD_1 ;每個(gè)字節(jié)位移5次夠了沒(méi)有?
- RET
- ;*************************溫度顯示程序****************************
- PLAY: MOV DPTR,#TABX
- MOV 2DH,#0
- MOV 2FH,#60 ;速度
- GG: CALL LINE8 ;掃描顯示1幀
- DJNZ 2FH,GG
- RET
- ;*********掃描顯示1幀行子程序*2BH存行數(shù)據(jù),2DH存字節(jié)數(shù)據(jù) ******************
- LINE8 : MOV 2BH,#8 ;掃描的行數(shù),共8行
- FF: CALL LINE1 ;掃描顯示1行子程序
- DJNZ 2BH,FF ;掃描下一行
- MOV A,2DH
- SUBB A ,#8 ;掃描完8行后要重頭開(kāi)始,在MSTR子程序中,掃8行后會(huì)增加8,這里-8
- MOV 2DH,A
- RET
- ;*********掃描顯示一行子程序********************
- LINE1: CALL MSTR_R ;將顯示內(nèi)容移入內(nèi)存單元
- CALL MSTR_G
- MOV 34H,#0
- MOV 35H,#0
- MOV 3BH,#0
- CALL SEND ;發(fā)送串行口子程序
- CALL XTH ;選通行子程序
- CALL DL22US
- INC 2DH
- RET
- ;****************************************************************************
- ;**顯示內(nèi)容移入內(nèi)存單元子程序*取紅色到30H-34H,綠色35H-39H*2DH取字節(jié)數(shù)據(jù)***********************
- MSTR_R: MOV R0,#30H
- MOV R4,#7 ;每幕顯示的字?jǐn)?shù)加1;如每幕顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- MOV R1,#40H
- BB_R:
- MOV A,@R1
- MOV B,#8
- MUL AB
- ADD A,2DH
- MOVC A, @A+DPTR
- MOV @R0,A
- INC R0
- INC R1
- DJNZ R4,BB_R
- MOV R1,#40H
- RET
- MSTR_G: MOV R0,#38H
- MOV R4,#7 ;每幕顯示的字?jǐn)?shù)加1;如每幕顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- MOV R1,#40H
- BB_G:
- MOV A,@R1
- MOV B,#8
- MUL AB
- ADD A,2DH
- MOVC A, @A+DPTR
- MOV @R0,A
- INC R0
- INC R1
- DJNZ R4,BB_G
- MOV R1,#40H
- RET
- ;***發(fā)送數(shù)據(jù)到串口子程序*取紅色30H-34H,綠色35H-39H***R6,R7**************
- SEND: MOV R0,#30H
- MOV R1,#38H
- MOV R5,#6 ;一行有4個(gè)字節(jié);如每次顯示字?jǐn)?shù)不同要作相應(yīng)改動(dòng)
- LQ: MOV R2,#5 ;每個(gè)字節(jié)有8位
- MOV A,@R0 ;將顯存的字節(jié)的單元移入
- MOV R6,A
- MOV A,@R1 ;將顯存的字節(jié)的單元移入
- MOV R7,A
- LCALL DD1 ;調(diào)用顯示一個(gè)字節(jié)的子程序
- INC R0 ;指向下一個(gè)顯存的單元
- INC R1 ;指向下一個(gè)顯存的單元
- DJNZ R5,LQ ;8個(gè)字節(jié)全部移入了沒(méi)有,未繼續(xù)
- CLR SRCLK
- SETB C
- MOV SER,C
- MOV SEG,C
- SETB SRCLK
- RET ;
- DD1: CLR SRCLK ;清串行CP端
- CLR C
- MOV A,R6
- RLC A ;將每個(gè)字節(jié)移位
- MOV R6,A
- CPL C
- MOV SER,C ;紅色
- CLR C
- MOV A,R7
- RLC A
- MOV R7,A
- CPL C
- MOV SEG,C ;綠色
- SETB SRCLK ;觸發(fā)串行CP端
- DJNZ R2,DD1 ;每個(gè)字節(jié)位移8次夠了沒(méi)有?
- RET
- ;*******選通行子程序***2BH行數(shù)據(jù)*********************************************************************************/
- XTH: CLR RCLK ;將輸出CP變?yōu)榈碗娖綖樯仙刈鳒?zhǔn)備
- SETB EN ;將使能端變?yōu)楦唠娖綖橄陆笛刈鳒?zhǔn)備
- MOV R5,2BH
- CJNE R5,#8,HSM1
- MOV ABCD,#11111110B
- JMP XTHOUT
- HSM1: CJNE R5,#7,HSM2
- MOV ABCD,#11111101B
- JMP XTHOUT
- HSM2: CJNE R5,#6,HSM3
- MOV ABCD,#11111011B
- JMP XTHOUT
- HSM3: CJNE R5,#5,HSM4
- MOV ABCD,#11110111B
- JMP XTHOUT
- HSM4: CJNE R5,#4,HSM5
- MOV ABCD,#11101111B
- JMP XTHOUT
- HSM5: CJNE R5,#3,HSM6
- MOV ABCD,#11011111B
- JMP XTHOUT
- HSM6: CJNE R5,#2,HSM7
- MOV ABCD,#10111111B
- JMP XTHOUT
- HSM7: CJNE R5,#1,XTHOUT
- MOV ABCD,#01111111B
- XTHOUT:
- SETB RCLK ;輸出CP為上升沿,顯示一個(gè)
- CLR EN ;138可顯示
- RET
- ;******22US延時(shí)子程序********
- DL22US: MOV R7,#50
- DJNZ R7,$
- RET ;
- DEL: MOV R7,#0
- DJNZ R7,$
- RET
- BEEP_BZ:; CLR BEEP ;蜂鳴器鳴響
- MOV R6,#40
- BEEP_2: CALL DEL
- CPL BEEP
- DJNZ R6, BEEP_2
- SETB BEEP ;蜂鳴器停止
- RET
- ;***********************************字碼表****************************************
- TAB10:
- DB 038H,044H,082H,082H,082H,082H,044H,038H;"0",0
- DB 010H,070H,010H,010H,010H,010H,010H,0FEH;"1",1
- DB 07CH,082H,082H,006H,00CH,070H,0FAH,09EH;"2",2
- DB 07EH,044H,00CH,038H,006H,002H,086H,07CH;"3",3
- DB 004H,00CH,01CH,034H,064H,0FEH,004H,03FH;"4",4
- DB 07EH,042H,040H,07CH,042H,002H,086H,07CH;"5",5
- DB 03CH,062H,0C0H,0FCH,082H,082H,0C2H,07CH;"6",6
- DB 0FEH,084H,088H,018H,010H,030H,020H,020H;"7",7
- DB 07CH,082H,082H,07CH,086H,082H,0C6H,07CH;"8",8
- DB 07CH,086H,082H,082H,07EH,002H,084H,078H;"9",9
- DB 000H, 000H, 000H, 000H, 0FCH, 000H, 000H, 000H ;- 10
- DB 080H, 078H, 084H, 080H, 080H, 080H, 084H, 078H ;"C",11
- DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H ;無(wú)顯示,12
- DB 000H, 000H, 000H, 000H, 030H, 030H, 000H, 000H ;點(diǎn),13
- DB 000H, 000H, 030H, 030H, 000H, 030H, 030H, 000H ;: 14
- DB 0FEH,092H,010H,010H,010H,010H,010H,038H;"T",15
- DB 7EH,42H,7EH,7EH,48H,7EH,88H,7EH ;溫 16
- DB 57H,0FDH,57H,75H,57H,0FDH,55H,8BH ;度 17
- ;DB 0D6H, 092H, 092H, 092H, 09AH, 06CH, 064H, 044H;"W",16
- ;DB 0EEH, 044H, 048H, 070H, 050H, 048H, 044H, 0EEH;"K",17
- DB 0FCH,042H,042H,07CH,040H,040H,0E0H,000H;"P",18
- DB 0CEH,084H,084H,0FCH,084H,084H,0CEH,000H;"H",19
- DB 000H,000H,078H,084H,0FCH,080H,07CH,000H;"e",20
- DB 000H,000H,0DCH,078H,030H,078H,0ECH,000H;"x",21
- DB 018H,000H,038H,008H,008H,008H,008H,0F0H;"j",22
- DB 000H,000H,0FEH,092H,092H,092H,0DAH,000H;"m",23
- DB 000H,020H,000H,060H,020H,020H,020H,0F8H;"i",24
- DB 000H,000H,000H,0D8H,066H,042H,042H,0E7H;"n",25
- DB 0E7H,042H,044H,024H,02CH,028H,018H,010H;"V",26
- DB 03CH,05AH,0AAH,0AAH,0B4H,042H,03CH,000H;"@",27
- DB 000H,000H,03CH,062H,040H,042H,03CH,000H;"c",28
- DB 000H,000H,03CH,042H,042H,042H,03CH,000H;"o",29
- DB 010H,03EH,048H,0BCH,028H,07EH,008H,008H;年,30
- DB 03CH,024H,03CH,024H,03CH,024H,044H,08CH;月,31
- DB 0FCH,084H,084H,0FCH,084H,084H,084H,0FCH;日,32
- DB 10H,0FEH,92H,20H,34H,68H,0A4H,32H;農(nóng),33
- DB 7EH,48H,7EH,4AH,4AH,4AH,4AH,96H;歷,34
- DB 000H,0FEH,010H,010H,05CH,050H,050H,0FEH;正,35
- DB 040H,0E0H,03EH,06AH,0CAH,04AH,052H,044H;初,36
- DB 010H,01EH,024H,058H,018H,024H,0DBH,018H;冬,37
- DB 000H,075H,05FH,075H,05FH,075H,057H,0B7H;臘,38
- DB 010H,010H,010H,0FEH,010H,010H,010H,010H;十,39
- DB 000H,044H,0FEH,044H,044H,044H,044H,07CH;二十,40
- DB 054H,054H,054H,0FEH,054H,054H,054H,094H;卅,41
- DB 000H,000H,000H,000H,0FEH,000H,000H,000H;一,42
- DB 000H,000H,07CH,000H,000H,0FEH,000H,000H;二,43
- DB 000H,000H,07CH,000H,038H,000H,0FEH,000H;三,44
- DB 000H,0FEH,0AAH,0AAH,0AAH,0CEH,082H,0FEH;四,45
- DB 07CH,010H,010H,07CH,014H,014H,024H,0FEH;五,46
- DB 000H,010H,000H,0FEH,000H,028H,046H,082H;六,47
- DB 000H,020H,020H,0FEH,020H,020H,022H,01CH;七,48
- DB 000H,028H,028H,028H,044H,044H,082H,000H;八,49
- DB 020H,020H,0FCH,028H,028H,028H,04AH,086H;九,50
- DB 05EH,082H,0BAH,092H,0BAH,092H,0BAH,086H;閏,51
- DB 0BEH,2AH,0FEH,6AH,0BEH,0F6H,0BEH,46H ;調(diào),52
- DB 04H,0FEH,0A4H,0B4H,0ECH,0A4H,0E4H,0CH ;時(shí) 53
- DB 28H,44H,82H,7CH,24H,24H,44H,8CH;分 54
- DB 04H,24H,6CH,0F6H,25H,72H,0A4H,28H ;秒 55
- ;********************溫度數(shù)據(jù)轉(zhuǎn)換*************************************=====================================================================*/
- XSWD: CALL RE_TEMP
- MOV XSD,#13
- MOV WDFH,#11
- MOV R0,#20H
- MOV R1,#40H
- MOV R2,#7
- XSWD2: MOV A,@R0
- MOV @R1,A
- INC R0
- INC R1
- DJNZ R2,XSWD2
- RET
- ;;;;;;;;;;;;以下是溫度程序;;;;;;;;;==
- ; 程序功能:數(shù)字溫度計(jì)(+125- -55)
- RE_TEMP: ;對(duì)DS18B20初始化及讀取
- SETB DQ
- CALL RESET_1820 ;調(diào)用復(fù)位子程序
- JB FLAG, STT ;判斷DS1820是否存在?
- RET ;*/
- STT: ; DS18B20存在
- MOV A,#0CCH ;跳過(guò)ROM匹配
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- CALL RESET_1820 ;準(zhǔn)備讀溫度前先復(fù)位
- MOV A,#0CCH ;跳過(guò)ROM匹配
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- MOV A,#0BEH ;發(fā)出讀溫度命令
- CALL WRITE_1820 ;寫(xiě)入數(shù)據(jù)
- CALL READ_1820 ;讀出溫度數(shù)據(jù)
- RET ;*/
- RESET_1820: ;復(fù)位(有具體的時(shí)序要求)
- SETB DQ
- NOP
- NOP
- CLR DQ
- ;主機(jī)發(fā)出延時(shí)521微秒的復(fù)位低脈沖
- MOV R1,#2 ; 3
- DLY: MOV R0,#107
- DJNZ R0,$
- DJNZ R1,DLY
- ;然后拉高數(shù)據(jù)線
- SETB DQ
- NOP
- NOP
- NOP
- MOV R0,#25H
- T2: JNB DQ ,T3 ;等待DS18B20回應(yīng)
- DJNZ R0, T2
- JMP T4
- T3: SETB FLAG ;置標(biāo)志位,表示DS1820存在
- JMP T5
- T4: CLR FLAG ;清標(biāo)志位,表示DS1820不存在
- JMP T7
- T5: MOV R0,#117
- T6: DJNZ R0,T6 ;時(shí)序要求延時(shí)一段時(shí)間
- T7: SETB DQ
- RET
- ;---------------------------------------------- */
- WRITE_1820: ;寫(xiě)入DS18B20(有具體的時(shí)序要求)
- MOV R2,#8 ;一共8位數(shù)據(jù)
- CLR C
- WR1: CLR DQ ;總線低位,開(kāi)始寫(xiě)入
- MOV R3,#7
- DJNZ R3,[ DISCUZ_CODE_1 ]nbsp; ;保持16微秒以上
- RRC A ;把字節(jié)DATA分成8個(gè)BIT環(huán)移給C
- MOV DQ, C ;寫(xiě)入一個(gè)BIT
- MOV R3,#23
- DJNZ R3,[ DISCUZ_CODE_1 ]nbsp; ;等待
- SETB DQ ;重新釋放總線
- NOP
- DJNZ R2,WR1 ;寫(xiě)入下一個(gè)BIT
- SETB DQ
- RET
- READ_1820: ;將溫度高位和低位從DS18B20中讀出
- MOV R4,#2 ; 讀出兩個(gè)字節(jié)的數(shù)據(jù)
- MOV R1,#WDDW ;低位存
- RE0: MOV R2,#8 ;數(shù)據(jù)一共有8位
- RE1: CLR C
- SETB DQ
- NOP
- NOP
- NOP
- CLR DQ ;讀前總線保持為低
- NOP
- NOP
- NOP
- SETB DQ ;開(kāi)始讀總線釋放
- MOV R3,#9
- RE2: DJNZ R3,RE2 ;延時(shí)18微妙
- MOV C, DQ ; 從總線讀到一個(gè)BIT
- MOV R3,#23
- RE3: DJNZ R3,RE3 ;等待100μ秒
- RRC A ;把讀得的位值環(huán)移給A
- DJNZ R2,RE1 ;讀下一個(gè)BIT
- MOV @R1,A
- DEC R1
- DJNZ R4,RE0
- RET
- ;;;;;;;;;;;;;;;;;;;; */
- TURN: MOV A,WDGW
- JBC ACC.4,TU ;是零下跳到TU
- MOV D_BIT,#0FFH
- DIS: MOV DPTR,#TAB
- MOV A,WDDW ;低位
- ANL A,#0FH ;取小數(shù)
- MOVC A,@A+DPTR
- MOV C_BIT,A ;精確到0.1度的小數(shù)值
- MOV A,WDDW
- SWAP A ;高低位互換
- ANL A,#0FH
- MOV WDDW,A
- MOV A,WDGW
- ANL A,#0FH
- SWAP A
- ORL A,WDDW;重新組合,為不帶小數(shù)的溫度值
- MOV WDDW,A
- MOV A,D_BIT
- CJNE A,#10,TU_1;百位不是-跳轉(zhuǎn)
- MOV A,WDDW
- DIS_1:
- MOV B,#10
- DIV AB
- MOV A_BIT,B;十位值
- MOV B_BIT,A;個(gè)位值
- MOV A,D_BIT
- CJNE A,#0,TU_2;百位不是0跳轉(zhuǎn)
- MOV D_BIT,#12;是0消隱
- DIS_2:MOV A,B_BIT
- CJNE A,#0,TUR;十位不是0轉(zhuǎn)
- MOV B_BIT,#12;是0消隱
- TUR: RET
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- TU: MOV D_BIT,#10;顯示-號(hào)
- CPL A
- ANL A,#0FH
- mov WDGW,A;取反A存入高位
- MOV A,WDDW
- CPL A
- CLR C
- INC A
- MOV WDDW,A
- MOV A,WDGW
- ADDC A,#0
- MOV WDGW,A
- JMP DIS
- TU_1: MOV A,WDDW
- MOV B,#100
- DIV AB
- MOV D_BIT,A;百位值
- MOV A,B
- JMP DIS_1
- TU_2: CJNE A,#10,TUR;百位不是-跳轉(zhuǎn)
- JMP DIS_2
- TAB:DB 0, 1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
- ;;;;;;;;;;;;以上是溫度程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
- TABX:;5*7小字符 用于固定顯示時(shí)間和溫度
- DB 060H, 090H, 090H, 090H, 090H, 090H, 060H, 000H ;0
- DB 020H, 060H, 020H, 020H, 020H, 020H, 070H, 000H ;1
- DB 060H, 090H, 010H, 020H, 040H, 080H, 0F0H, 000H ;2
- DB 060H, 090H, 010H, 060H, 010H, 090H, 060H, 000H ;3
- DB 020H, 060H, 0A0H, 0A0H, 0F0H, 020H, 020H, 000H ;4
- DB 0F0H, 080H, 0E0H, 090H, 010H, 090H, 060H, 000H ;5
- DB 060H, 090H, 080H, 0E0H, 090H, 090H, 060H, 000H ;6
- DB 0F0H, 010H, 010H, 020H, 040H, 040H, 040H, 000H ;7
- DB 060H, 090H, 090H, 060H, 090H, 090H, 060H, 000H ;8
- DB 060H, 090H, 090H, 070H, 010H, 090H, 060H, 000H ;9
- DB 000H, 000H, 000H, 0F0H, 000H, 000H, 000H, 000H ;- 10
- DB 080H, 030H, 040H, 040H, 040H, 040H, 030H, 000H ;C 11
- DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H ; 空格 12
- DB 000H, 000H, 000H, 000H, 060H, 060H, 000H, 000H ;. 13
- DB 000H, 060H, 060H, 000H, 060H, 060H, 000H, 000H ;: 14
- DB 000H, 000H, 080H, 000H, 000H, 080H, 000H, 000H ;: 單冒號(hào)15
- /*;程序功能:歌曲演奏
- START1: MOV TMOD,#00000001B; 設(shè)T0方式1
- MOV IE,#10000010B;允許T0中斷
- MOV DPTR,#TABLE ; 存表首地址
- LOOP: CLR A ; 清零
- MOVC A,@A+DPTR ; 查表
- MOV R1,A ; 定時(shí)器高8位存R1
- INC DPTR ; 指針加1
- CLR A ; 清零
- MOVC A,@A+DPTR ; 查表
- MOV R0,A ; 定時(shí)器低8位存R0
- ORL A,R1 ; 進(jìn)行"或"運(yùn)算
- JZ NEXT0 ; 全0為休止符
- MOV A, R0 ;
- ANL A, R1 ; 進(jìn)行"與"運(yùn)算
- CJNE A,#0FFH,NEXT; 全1表示樂(lè)曲結(jié)束
- RET
- NEXT: MOV TH0,R1 ; 裝入高位定時(shí)值
- MOV TL0,R0 ; 裝入低位定時(shí)值
- SETB TR0 ; 啟動(dòng)定時(shí)器T0
- setb tf0 ;啟動(dòng)定時(shí)器工作
- JMP NEXT1 ; 轉(zhuǎn)移NEXT1處
- NEXT0: CLR TR0 ; 關(guān)閉定時(shí)器停止發(fā)音
- NEXT1: CLR A ; 清零
- INC DPTR ; 指針加1
- MOVC A,@A+DPTR ; 查延時(shí)常數(shù)
- MOV R2, A ; 延時(shí)常數(shù)存入R2
- LOOP1: ACALL DDELAY ; 調(diào)延時(shí)子程序
- DJNZ R2, LOOP1 ; 控制延時(shí)次數(shù)
- INC DPTR ; 指針加1
- JMP LOOP ; 轉(zhuǎn)移LOOP處
- EXT0: MOV TH0,R1 ; 重裝定時(shí)值
- MOV TL0,R0 ;
- CPL BEEP ; 反相輸出
- RETI ; 中斷返回
- DDELAY: MOV R7,#2 ; 延時(shí)187ms
- D2: MOV R6,#187 ;
- D3: MOV R5,#248 ;
- DJNZ R5,[ DISCUZ_CODE_1 ]nbsp; ;
- DJNZ R6,D3 ;
- DJNZ R7,D2 ;
- RET ;
- TABLE:
- DB 0FDH,80H,03H,0FDH,80H,01H,0FDH,0C6H,04H,0FDH,80H,04H,0FEH,2AH,04H,0FEH,02H,04H ;
- DB 00H,00H,04H,0FDH,80H,03H,0FDH,80H,01H,0FDH,0C6H,04H,0FDH,80H,04H ;
- DB 0FEH,5CH,04H, 0FEH,2AH,04H,00H,00H,04H,0FDH,80H,03H,0FDH,80H,01H ;
- DB 0FEH,0C0H,04H, 0FEH,84H,04H,0FEH,2AH,04H, 0FEH,02H,04H,0FDH,0C6H,04H ;
- DB 0FEH,98H,03H, 0FEH,98H,01H,0FEH,84H,04H, 0FEH,2AH,04H,0FEH,5CH,04H, 0FEH,2AH,04H,00H,00H,04H,0FFH,0FFH */
- ;以下為公歷轉(zhuǎn)農(nóng)歷子程序
- CONvert: MOV A,time_year ;將年月日轉(zhuǎn)化為 HEX 格式 16進(jìn)制
- MOV B,#16
- DIV AB
- MOV CONvert_yeAr,B
- MOV B,#10
- MUL AB
- ADD A,CONvert_yeAr
- MOV CONvert_yeAr,A
- MOV A,time_month
- MOV C,ACC.7
- MOV f0,C ;f0暫存世紀(jì)標(biāo)志,僅用于數(shù)據(jù)表定位
- CLR ACC.7
- JNB ACC.4,CON_02
- CLR ACC.4 ;ACC.4 為 1 表示大于 10 月
- ADD A,#10
- CON_02: MOV CONvert_mONth,A
- MOV A,time_date;
- SWAP A
- ANL A,#07H
- MOV B,#10
- MUL AB
- MOV CONVERT_DATE,A
- MOV A,TIME_DATE
- ANL A,#0FH
- ADD A,CONvert_dAte
- MOV CONvert_dAte,A
- MOV dptr,#mONth_dAtA ;以下定位本年數(shù)據(jù)在表格中的位置
- MOV A,CONvert_yeAr
- JB f0,CON_06 ;當(dāng)前為 19 世紀(jì)年跳轉(zhuǎn)
- ; ADD A,#100 ;從 19 世紀(jì)起定義表格起始年,20 世紀(jì)要加 100 年
- CON_06: CLR C
- SUBB A,#stArt_yeAr
- MOV B,#3 ;表格每年 3 字節(jié)
- MUL AB
- ADD A,dpl
- MOV dpl,A
- MOV A,B
- ADDC A,dph
- MOV dph,A
- MOV A,#2
- MOVC A,@A+dptr ;讀本年表格最后一字節(jié)(春節(jié)日期)
- CLR ACC.7 ;ACC.7 是閏年第 13 個(gè)月大小,在此不用
- MOV B,#32
- DIV AB
- MOV temp_Byte1,A ;春節(jié)月份
- MOV temp_Byte2,B ;春節(jié)日
- ;以下計(jì)算當(dāng)前日期距元旦天數(shù)
- MOV temp_Byte3,#0 ;設(shè)距元旦天數(shù)高位為 0
- MOV A,CONvert_mONth
- CJNE A,#10,CON_08
- CON_08: JC CON_09 ;9 月以前日子數(shù)小于 256 天,高字節(jié)為 0(9 月份過(guò)去的整月為 8 個(gè)月)
- MOV temp_Byte3,#1
- CON_09: MOV A,CONvert_yeAr
- ANL A,#03h ;ACC 為除 4 的余數(shù)
- JNZ CON_10 ;轉(zhuǎn)常年處理
- ;年除 4 余數(shù)為 0 是閏年
- MOV A,CONvert_mONth
- LCALL get_ruN_dAys_lOw ;取得閏年過(guò)去月的天數(shù)的低字節(jié)
- SJMP CON_12
- CON_10: MOV A,CONvert_mONth
- LCALL get_dAys_lOw ;取得常年過(guò)去月的天數(shù)的低字節(jié)
- CON_12: MOV B,CONvert_dAte
- DEC B ;因?yàn)槿掌趶?nbsp; 1 日起,而不是 0 日起
- ADD A,B ;過(guò)去的整月天數(shù)加當(dāng)月天數(shù)
- MOV temp_Byte4,A
- JNC CON_14
- INC temp_Byte3 ;temp_Byte3,temp_Byte4 分別為公歷年過(guò)去的天數(shù)的高低字節(jié)
- ;以下求春節(jié)距元旦天數(shù),因肯定小于 256 天所以只用一字節(jié)表示
- CON_14: MOV A,temp_Byte1
- LCALL get_dAys_lOw ;春節(jié)不會(huì)在 3 月份,不用考慮閏年
- DEC A ;因?yàn)槿掌趶?nbsp; 1 日起
- ADD A,temp_Byte2
- MOV temp_Byte5,A ;temp_Byte5,為春節(jié)距元旦天數(shù)
- MOV A,CONvert_mONth
- CJNE A,temp_Byte1,CON_20 ;轉(zhuǎn)換月與春節(jié)月比較
- MOV A,CONvert_dAte
- CJNE A,temp_Byte2,CON_20 ;轉(zhuǎn)換日與春節(jié)日比較
- CON_20: JC CON_22
- LJMP CON_60 ;當(dāng)前日大于等于春節(jié)日期,公歷年與農(nóng)歷年同年份
- CON_22: MOV A,CONvert_yeAr ;不到春節(jié),農(nóng)歷年比公歷年低一年
- JNZ CON_24
- MOV A,#100 ;年有效數(shù) 0-99
- CON_24: DEC A
- MOV CONvert_yeAr,A
- MOV A,dpl
- CLR C
- SUBB A,#3
- MOV dpl,A
- JNC CON_26
- DEC dph ;表格指針指向上一年
- CON_26: MOV A,temp_Byte5
- CLR C
- SUBB A,temp_Byte4
- MOV temp_Byte3,A ;temp_Byte3 中為當(dāng)前日離春節(jié)的天數(shù)
- MOV CONvert_mONth,#12 ;農(nóng)歷月為 12 月
- CLR f0 ;1901-2099 年沒(méi)有閏 12 月,清閏月標(biāo)志
- CLR A
- MOVC A,@A+dptr
- ANL A,#0f0h
- SWAP A;
- MOV temp_Byte4,A ;temp_Byte4 中為閏月
- JZ CON_30 ;沒(méi)有閏月轉(zhuǎn)移
- MOV A,#2 ;有閏月,取第 13 個(gè)月天數(shù)
- MOVC A,@A+dptr
- MOV C,ACC.7
- MOV A,#1
- MOVC A,@A+dptr
- RLC A ;ACC 中為最后 6 個(gè)月的大小值
- SJMP CON_34
- CON_30: MOV A,#1
- MOVC A,@A+dptr ;ACC 中為最后 6 個(gè)月的大小值
- CON_34: MOV temp_Byte5,A
- CON_40: MOV A,temp_Byte5
- RRC A
- MOV temp_Byte5,A
- JC CON_42
- MOV B,#29 ;小月 29 天
- SJMP CON_44
- CON_42: MOV B,#30 ;大月 30 天
- CON_44: MOV A,temp_Byte3
- CLR C
- SUBB A,B
- JZ CON_46 ;正好夠減,就是農(nóng)歷日 1 日
- JNC CON_50 ;不夠減一月天數(shù),結(jié)束農(nóng)歷月調(diào)整
- CPL A ;求補(bǔ)取絕對(duì)值
- INC A
- CON_46: INC A ;加 1 即為農(nóng)歷日
- MOV B,#10 ;轉(zhuǎn)換并保存農(nóng)歷日,月,年
- DIV AB
- SWAP A
- ORL A,B
- MOV CONvert_dAte,A
- MOV A,CONvert_mONth
- MOV B,#10
- DIV AB
- SWAP A
- ORL A,B
- MOV C,f0
- MOV ACC.7,C
- MOV CONvert_mONth,A
- MOV A,CONvert_yeAr
- MOV B,#10
- DIV AB
- SWAP A
- ORL A,B
- MOV CONvert_yeAr,A
- RET ;結(jié)束轉(zhuǎn)換 ==========================
- CON_50: MOV temp_Byte3,A ;temp_Byte3 存減去一月后的天數(shù)
- JB f0,CON_52 ;是閏月,前推一月,月份不減
- DEC CONvert_mONth;
- CON_52: MOV A,CONvert_mONth
- CJNE A,temp_Byte4,CON_54
- CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
- CON_54: SJMP CON_40
- CON_60: MOV A,temp_Byte4 ;春節(jié)日小于當(dāng)前日,農(nóng)歷年同公歷年
- CLR C
- SUBB A,temp_Byte5
- MOV temp_Byte4,A
- JNC CON_62
- DEC temp_Byte3 ;temp_Byte3 temp_Byte4 中為公歷日離春節(jié)的天數(shù)
- CON_62: MOV CONvert_mONth,#1 ;農(nóng)歷月為 1 月
- CLR A
- MOVC A,@A+dptr
- MOV temp_Byte5,A
- ANL A,#0f0h
- SWAP A;
- XCH A,temp_Byte5 ;temp_Byte5 中為閏月,ACC 為當(dāng)年農(nóng)歷表第一字節(jié)
- CLR f0 ;第一個(gè)月肯定不是閏月
- ANL A,#0fh
- MOV temp_Byte1,A
- MOV A,#1
- MOVC A,@A+dptr
- MOV temp_Byte2,A
- ANL A,#0f0h
- ORL A,temp_Byte1
- SWAP A
- MOV temp_Byte1,A
- MOV A,#2
- MOVC A,@A+dptr
- MOV C,ACC.7
- MOV A,temp_Byte2
- ANL A,#0fh
- SWAP A
- MOV ACC.3,C;
- MOV temp_Byte2,A ;以上 temp_Byte1,temp_Byte2 各 BIT 存農(nóng)歷年大小
- CON_70: MOV A,temp_Byte2
- RLC A
- MOV temp_Byte2,A
- MOV A,temp_Byte1
- RLC A
- MOV temp_Byte1,A
- JC CON_72
- MOV B,#29 ;小月 29 天處理
- SJMP CON_74
- CON_72: MOV B,#30 ;大月 30 天
- CON_74: MOV A,temp_Byte4
- CLR C
- SUBB A,B
- JNC CON_78 ;低字節(jié)夠減跳轉(zhuǎn)
- MOV B,A ;低字節(jié)不夠減, B 暫存減后結(jié)果,
- MOV A,temp_Byte3
- JZ CON_76 ;高字節(jié)為 0,不夠減
- DEC temp_Byte3
- MOV temp_Byte4,B
- SJMP CON_80
- CON_76: MOV A,temp_Byte4 ;不夠減結(jié)束月調(diào)整
- LJMP CON_46 ;轉(zhuǎn)日期加 1 后,處理并保存轉(zhuǎn)換后農(nóng)歷年月日
- CON_78: MOV temp_Byte4,A ;temp_Byte3 temp_Byte4 天數(shù)為減去一月后天數(shù)
- CON_80: MOV A,CONvert_mONth
- CJNE A,temp_Byte5,CON_82
- CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
- JNB f0,CON_82 ;更改標(biāo)志后是非閏月,月份加 1
- SJMP CON_70
- CON_82: INC CONvert_mONth;
- SJMP CON_70
- get_dAys_lOw:
- MOVC A,@A+PC ;取得常年過(guò)去月的天數(shù)的低字節(jié)
- RET
- DB 0,31,59,90,120,151,181,212,243,17,48,78
- get_ruN_dAys_lOw:
- MOVC A,@A+PC ;取得閏年過(guò)去月的天數(shù)的低字節(jié)
- RET
- DB 0,31,60,91,121,152,182,213,244,18,49,79
- mONth_dAtA:
- ;公歷年對(duì)應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié),
- ;格式第一字節(jié) BIT7-4 位表示閏月月份,值為 0 為無(wú)閏月,BIT3-0 對(duì)應(yīng)農(nóng)歷第 1-4 月的大小
- ;第二字節(jié) BIT7-0 對(duì)應(yīng)農(nóng)歷第 5-12 月大小,第三字節(jié) BIT7 表示農(nóng)歷第 13 個(gè)月大小
- ;月份對(duì)應(yīng)的位為 1 表示本農(nóng)歷月大(30 天),為 0 表示小(29 天).
- ;第三字節(jié) BIT6-5 表示春節(jié)的公歷月份,BIT4-0 表示春節(jié)的公歷日期
- /*DB 004h,0Aeh,053h,00Ah,057h,048h,055h,026h,0Bdh,00dh,026h,050h,00dh,095h,044h; 1905
- DB 046h,0AAh,0B9h,005h,06Ah,04dh,009h,0Adh,042h,024h,0Aeh,0B6h,004h,0Aeh,04Ah; 1910
- DB 06Ah,04dh,0Beh,00Ah,04dh,052h,00dh,025h,046h,05dh,052h,0BAh,00Bh,054h,04eh; 1915
- DB 00dh,06Ah,043h,029h,06dh,037h,009h,05Bh,04Bh,074h,09Bh,0C1h,004h,097h,054h; 1920
- DB 00Ah,04Bh,048h,05Bh,025h,0BCh,006h,0A5h,050h,006h,0d4h,045h,04Ah,0dAh,0B8h; 1925
- DB 002h,0B6h,04dh,009h,057h,042h,024h,097h,0B7h,004h,097h,04Ah,066h,04Bh,03eh; 1930
- DB 00dh,04Ah,051h,00eh,0A5h,046h,056h,0d4h,0BAh,005h,0Adh,04eh,002h,0B6h,044h; 1935
- DB 039h,037h,038h,009h,02eh,04Bh,07Ch,096h,0Bfh,00Ch,095h,053h,00dh,04Ah,048h; 1940
- DB 06dh,0A5h,03Bh,00Bh,055h,04fh,005h,06Ah,045h,04Ah,0Adh,0B9h,002h,05dh,04dh; 1945
- DB 009h,02dh,042h,02Ch,095h,0B6h,00Ah,095h,04Ah,07Bh,04Ah,0Bdh,006h,0CAh,051h; 1950
- DB 00Bh,055h,046h,055h,05Ah,0BBh,004h,0dAh,04eh,00Ah,05Bh,043h,035h,02Bh,0B8h; 1955
- DB 005h,02Bh,04Ch,08Ah,095h,03fh,00eh,095h,052h,006h,0AAh,048h,07Ah,0d5h,03Ch; 1960
- DB 00Ah,0B5h,04fh,004h,0B6h,045h,04Ah,057h,039h,00Ah,057h,04dh,005h,026h,042h; 1965
- DB 03eh,093h,035h,00dh,095h,049h,075h,0AAh,0Beh,005h,06Ah,051h,009h,06dh,046h; 1970
- DB 054h,0Aeh,0BBh,004h,0Adh,04fh,00Ah,04dh,043h,04dh,026h,0B7h,00dh,025h,04Bh; 1975
- DB 08dh,052h,0Bfh,00Bh,054h,052h,00Bh,06Ah,047h,069h,06dh,03Ch,009h,05Bh,050h; 1980
- DB 004h,09Bh,045h,04Ah,04Bh,0B9h,00Ah,04Bh,04dh,0ABh,025h,0C2h,006h,0A5h,054h; 1985
- DB 006h,0d4h,049h,06Ah,0dAh,03dh,00Ah,0B6h,051h,009h,037h,046h,054h,097h,0BBh; 1990
- DB 004h,097h,04fh,006h,04Bh,044h,036h,0A5h,037h,00eh,0A5h,04Ah,086h,0B2h,0Bfh; 1995
- DB 005h,0ACh,053h,00Ah,0B6h,047h,059h,036h,0BCh,009h,02eh,050h,00Ch,096h,045h; 2000 */
- DB 04dh,04Ah,0B8h,00dh,04Ah,04Ch,00dh,0A5h,041h,025h,0AAh,0B6h,005h,06Ah,049h; 2005
- DB 07Ah,0Adh,0Bdh,002h,05dh,052h,009h,02dh,047h,05Ch,095h,0BAh,00Ah,095h,04eh; 2010
- DB 00Bh,04Ah,043h,04Bh,055h,037h,00Ah,0d5h,04Ah,095h,05Ah,0Bfh,004h,0BAh,053h; 2015
- DB 00Ah,05Bh,048h,065h,02Bh,0BCh,005h,02Bh,050h,00Ah,093h,045h,047h,04Ah,0B9h; 2020
- DB 006h,0AAh,04Ch,00Ah,0d5h,041h,024h,0dAh,0B6h,004h,0B6h,04Ah,069h,057h,03dh; 2025
- DB 00Ah,04eh,051h,00dh,026h,046h,05eh,093h,03Ah,00dh,053h,04dh,005h,0AAh,043h; 2030
- DB 036h,0B5h,037h,009h,06dh,04Bh,0B4h,0Aeh,0Bfh,004h,0Adh,053h,00Ah,04dh,048h; 2035
- DB 06dh,025h,0BCh,00dh,025h,04fh,00dh,052h,044h,05dh,0AAh,038h,00Bh,05Ah,04Ch; 2040
- DB 005h,06dh,041h,024h,0Adh,0B6h,004h,09Bh,04Ah,07Ah,04Bh,0Beh,00Ah,04Bh,051h; 2045
- DB 00Ah,0A5h,046h,05Bh,052h,0BAh,006h,0d2h,04eh,00Ah,0dAh,042h,035h,05Bh,037h; 2050
- DB 009h,037h,04Bh,084h,097h,0C1h,004h,097h,053h,006h,04Bh,048h,066h,0A5h,03Ch; 2055
- DB 00eh,0A5h,04fh,006h,0B2h,044h,04Ah,0B6h,038h,00Ah,0Aeh,04Ch,009h,02eh,042h; 2060
- DB 03Ch,097h,035h,00Ch,096h,049h,07dh,04Ah,0Bdh,00dh,04Ah,051h,00dh,0A5h,045h; 2065
- DB 055h,0AAh,0BAh,005h,06Ah,04eh,00Ah,06dh,043h,045h,02eh,0B7h,005h,02dh,04Bh; 2070
- DB 08Ah,095h,0Bfh,00Ah,095h,053h,00Bh,04Ah,047h,06Bh,055h,03Bh,00Ah,0d5h,04fh; 2075
- DB 005h,05Ah,045h,04Ah,05dh,038h,00Ah,05Bh,04Ch,005h,02Bh,042h,03Ah,093h,0B6h; 2080
- DB 006h,093h,049h,077h,029h,0Bdh,006h,0AAh,051h,00Ah,0d5h,046h,054h,0dAh,0BAh; 2085
- DB 004h,0B6h,04eh,00Ah,057h,043h,045h,027h,038h,00dh,026h,04Ah,08eh,093h,03eh; 2090
- DB 00dh,052h,052h,00dh,0AAh,047h,066h,0B5h,03Bh,005h,06dh,04fh,004h,0Aeh,045h; 2095
- DB 04Ah,04eh,0B9h,00Ah,04dh,04Ch,00dh,015h,041h,02dh,092h,0B5h,00dh,053h,049h; 2100
- ;ds1302時(shí)鐘上升沿輸入命令或數(shù)據(jù),下降沿輸出數(shù)據(jù).===========================================================================
- IN_1302:mov MIAO,#00H ;秒賦初值 出廠日期:2010.6.25.12:00:00
- mov FEN,#00H ;分賦初值
- mov SHI,#12H ;時(shí)賦初值
- mov RIQI,#025H ;日賦初值h
- mov YUE,#06H ;月賦初值
- mov XQI,#05H ;星期賦初值
- mov NIAN,#10H ;年賦初值
- lcall set1302 ;調(diào)用初值設(shè)定子程序
- RET
- ;入口參數(shù):初始時(shí)間:Second,Minute,Hour,Day,Month,Week.YearL(地址連續(xù))*/
- Set1302:
- CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, #8EH ;控制寄存器 10001110b
- LCALL RTInputByte
- MOV B, #00H ;寫(xiě)操作前WP=0
- LCALL RTInputByte
- MOV B, #90H ;控制寄存器 10010000b
- LCALL RTInputByte
- MOV B, #10101001b ;充電
- LCALL RTInputByte
- SETB T_CLK
- CLR T_RST
- MOV R0, #MIAO;
- MOV R7, #7 ;秒 分 時(shí) 日 月 星期 年 共7個(gè)字節(jié)
- MOV R1, #80H ;秒寫(xiě)地址 10000000b
- S13021: CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, R1 ;寫(xiě)秒 分 時(shí) 日 月 星期 年 地址
- LCALL RTInputByte
- MOV A, @R0 ;寫(xiě)秒數(shù)據(jù)
- MOV B, A
- LCALL RTInputByte
- INC R0
- INC R1
- INC R1
- SETB T_CLK
- CLR T_RST
- DJNZ R7, S13021
- CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, #8EH ;控制寄存器
- LCALL RTInputByte
- MOV B, #80H ;控制,WP=1,寫(xiě)保護(hù)
- LCALL RTInputByte
- SETB T_CLK
- CLR T_RST
- RET
- ;功 能:從DS1302 讀時(shí)間
- Get1302:
- MOV R0, #MIAO;
- MOV R7, #7
- MOV R1, #81H ;秒地址
- G13021: CLR T_RST
- CLR T_CLK
- SETB T_RST
- MOV B, R1 ;秒 分 時(shí) 日 月 星期 年 地址
- LCALL RTInputByte
- LCALL RTOutputByte
- MOV @R0, A ;秒
- INC R0
- INC R1
- INC R1
- SETB T_CLK
- CLR T_RST
- DJNZ R7, G13021
- RET
- ;功 能:寫(xiě)1302一字節(jié) (內(nèi)部子程序)
- RTInputByte:
- MOV R3, #8 ;一個(gè)字節(jié)有八個(gè)位,移八次.
- Inbit1: MOV A, B
- RRC A ;通過(guò)A移入CY.
- MOV B, A
- MOV T_IO, C ;移入芯片內(nèi).
- SETB T_CLK
- CLR T_CLK
- DJNZ R3, Inbit1
- RET
- ;功 能:讀1302一字節(jié)
- RTOutputByte:
- MOV R3, #8 ;一個(gè)字節(jié)有八個(gè)位,移八次.
- Out_1: MOV C, T_IO ;從芯片內(nèi)移到CY
- RRC A ;通過(guò)CY移入A.
- SETB T_CLK
- CLR T_CLK
- DJNZ R3,Out_1
- RET
- ;=================================================
- ;以下子程序用于從當(dāng)前公歷日期,推算星期,
- ;入口:time_yeAr,time_month ,time_date ,定義公歷年 月 日,BCD 碼,其中月的
- ;BIT7 表示世紀(jì),0表示20 世紀(jì),1表示 19 世紀(jì),出口 time_week, 0-6 表示星期日-星期六,程序不改變?nèi)肟跀?shù)據(jù)
- ;使用資源:ACC,B,psw,temp_Byte1,temp_Byte2,temp_Byte3
- GetWeek: MOV A,NIAN
- MOV B,#16
- DIV AB
- MOV temp_Byte1,B
- MOV B,#10
- MUL AB
- ADD A,temp_Byte1
- MOV temp_Byte1,A ;temp_Byte1=年
- MOV A,YUE
- JB ACC.7,getw02
- MOV A,#100
- ADD A,temp_Byte1
- MOV temp_Byte1,A ;20世紀(jì)年+100
- MOV A,YUE
- CLR ACC.7
- getw02: JNB ACC.4,getw04
- ADD A,#10
- CLR ACC.4
- getw04: MOV temp_Byte2,A ;temp_Byte2=月
- MOV A,RIQI
- MOV B,#16
- DIV AB
- MOV temp_Byte3,B
- MOV B,#10
- MUL AB
- ADD A,temp_Byte3
- MOV temp_Byte3,A ;temp_Byte3=日
- MOV A,temp_Byte1;
- ANL A,#03h
- JNZ getw10 ;非閏年轉(zhuǎn)移
- MOV A,temp_Byte2
- CJNE A,#3,getw06
- getw06: JNC getw10 ;月大于 2 轉(zhuǎn)移
- DEC temp_Byte3 ;份小于等于 2,又是閏年,日減 1
- getw10: MOV A,temp_Byte2;
- LCALL get_CorreCt ;取月校正表數(shù)據(jù)
- ADD A,temp_Byte1
- MOV B,#7
- DIV AB ;B放年加校正日數(shù)之和后除7 的余數(shù) 不先做這一步;有可能數(shù)據(jù)溢出
- MOV A,temp_Byte1
- ANL A,#0fCh
- RR A
- RR A ;以上年除 4 即閏年數(shù)
- ADD A,B
- ADD A,temp_Byte3
- MOV B,#7
- DIV AB
- MOV XQI,B ; time_week,B
- RET
- get_COrreCt:
- MOVC A,@A+PC
- RET
- DB 0,3,3,6,1,4,6,2,5,0,3,5
- END
-
復(fù)制代碼 nbsp; ;等待
SETB DQ ;重新釋放總線
NOP
DJNZ R2,WR1 ;寫(xiě)入下一個(gè)BIT
SETB DQ
RET
READ_1820: ;將溫度高位和低位從DS18B20中讀出
MOV R4,#2 ; 讀出兩個(gè)字節(jié)的數(shù)據(jù)
MOV R1,#WDDW ;低位存
RE0: MOV R2,#8 ;數(shù)據(jù)一共有8位
RE1: CLR C
SETB DQ
NOP
NOP
NOP
CLR DQ ;讀前總線保持為低
NOP
NOP
NOP
SETB DQ ;開(kāi)始讀總線釋放
MOV R3,#9
RE2: DJNZ R3,RE2 ;延時(shí)18微妙
MOV C, DQ ; 從總線讀到一個(gè)BIT
MOV R3,#23
RE3: DJNZ R3,RE3 ;等待100μ秒
RRC A ;把讀得的位值環(huán)移給A
DJNZ R2,RE1 ;讀下一個(gè)BIT
MOV @R1,A
DEC R1
DJNZ R4,RE0
RET
;;;;;;;;;;;;;;;;;;;; */
TURN: MOV A,WDGW
JBC ACC.4,TU ;是零下跳到TU
MOV D_BIT,#0FFH
DIS: MOV DPTR,#TAB
MOV A,WDDW ;低位
ANL A,#0FH ;取小數(shù)
MOVC A,@A+DPTR
MOV C_BIT,A ;精確到0.1度的小數(shù)值
MOV A,WDDW
SWAP A ;高低位互換
ANL A,#0FH
MOV WDDW,A
MOV A,WDGW
ANL A,#0FH
SWAP A
ORL A,WDDW;重新組合,為不帶小數(shù)的溫度值
MOV WDDW,A
MOV A,D_BIT
CJNE A,#10,TU_1;百位不是-跳轉(zhuǎn)
MOV A,WDDW
DIS_1:
MOV B,#10
DIV AB
MOV A_BIT,B;十位值
MOV B_BIT,A;個(gè)位值
MOV A,D_BIT
CJNE A,#0,TU_2;百位不是0跳轉(zhuǎn)
MOV D_BIT,#12;是0消隱
DIS_2:MOV A,B_BIT
CJNE A,#0,TUR;十位不是0轉(zhuǎn)
MOV B_BIT,#12;是0消隱
TUR: RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TU: MOV D_BIT,#10;顯示-號(hào)
CPL A
ANL A,#0FH
mov WDGW,A;取反A存入高位
MOV A,WDDW
CPL A
CLR C
INC A
MOV WDDW,A
MOV A,WDGW
ADDC A,#0
MOV WDGW,A
JMP DIS
TU_1: MOV A,WDDW
MOV B,#100
DIV AB
MOV D_BIT,A;百位值
MOV A,B
JMP DIS_1
TU_2: CJNE A,#10,TUR;百位不是-跳轉(zhuǎn)
JMP DIS_2
TAB:DB 0, 1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
;;;;;;;;;;;;以上是溫度程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; */
TABX:;5*7小字符 用于固定顯示時(shí)間和溫度
DB 060H, 090H, 090H, 090H, 090H, 090H, 060H, 000H ;0
DB 020H, 060H, 020H, 020H, 020H, 020H, 070H, 000H ;1
DB 060H, 090H, 010H, 020H, 040H, 080H, 0F0H, 000H ;2
DB 060H, 090H, 010H, 060H, 010H, 090H, 060H, 000H ;3
DB 020H, 060H, 0A0H, 0A0H, 0F0H, 020H, 020H, 000H ;4
DB 0F0H, 080H, 0E0H, 090H, 010H, 090H, 060H, 000H ;5
DB 060H, 090H, 080H, 0E0H, 090H, 090H, 060H, 000H ;6
DB 0F0H, 010H, 010H, 020H, 040H, 040H, 040H, 000H ;7
DB 060H, 090H, 090H, 060H, 090H, 090H, 060H, 000H ;8
DB 060H, 090H, 090H, 070H, 010H, 090H, 060H, 000H ;9
DB 000H, 000H, 000H, 0F0H, 000H, 000H, 000H, 000H ;- 10
DB 080H, 030H, 040H, 040H, 040H, 040H, 030H, 000H ;C 11
DB 000H, 000H, 000H, 000H, 000H, 000H, 000H, 000H ; 空格 12
DB 000H, 000H, 000H, 000H, 060H, 060H, 000H, 000H ;. 13
DB 000H, 060H, 060H, 000H, 060H, 060H, 000H, 000H ;: 14
DB 000H, 000H, 080H, 000H, 000H, 080H, 000H, 000H ;: 單冒號(hào)15
/*;程序功能:歌曲演奏
START1: MOV TMOD,#00000001B; 設(shè)T0方式1
MOV IE,#10000010B;允許T0中斷
MOV DPTR,#TABLE ; 存表首地址
LOOP: CLR A ; 清零
MOVC A,@A+DPTR ; 查表
MOV R1,A ; 定時(shí)器高8位存R1
INC DPTR ; 指針加1
CLR A ; 清零
MOVC A,@A+DPTR ; 查表
MOV R0,A ; 定時(shí)器低8位存R0
ORL A,R1 ; 進(jìn)行"或"運(yùn)算
JZ NEXT0 ; 全0為休止符
MOV A, R0 ;
ANL A, R1 ; 進(jìn)行"與"運(yùn)算
CJNE A,#0FFH,NEXT; 全1表示樂(lè)曲結(jié)束
RET
NEXT: MOV TH0,R1 ; 裝入高位定時(shí)值
MOV TL0,R0 ; 裝入低位定時(shí)值
SETB TR0 ; 啟動(dòng)定時(shí)器T0
setb tf0 ;啟動(dòng)定時(shí)器工作
JMP NEXT1 ; 轉(zhuǎn)移NEXT1處
NEXT0: CLR TR0 ; 關(guān)閉定時(shí)器停止發(fā)音
NEXT1: CLR A ; 清零
INC DPTR ; 指針加1
MOVC A,@A+DPTR ; 查延時(shí)常數(shù)
MOV R2, A ; 延時(shí)常數(shù)存入R2
LOOP1: ACALL DDELAY ; 調(diào)延時(shí)子程序
DJNZ R2, LOOP1 ; 控制延時(shí)次數(shù)
INC DPTR ; 指針加1
JMP LOOP ; 轉(zhuǎn)移LOOP處
EXT0: MOV TH0,R1 ; 重裝定時(shí)值
MOV TL0,R0 ;
CPL BEEP ; 反相輸出
RETI ; 中斷返回
DDELAY: MOV R7,#2 ; 延時(shí)187ms
D2: MOV R6,#187 ;
D3: MOV R5,#248 ;
DJNZ R5,[ DISCUZ_CODE_1 ]nbsp; ;
DJNZ R6,D3 ;
DJNZ R7,D2 ;
RET ;
TABLE:
DB 0FDH,80H,03H,0FDH,80H,01H,0FDH,0C6H,04H,0FDH,80H,04H,0FEH,2AH,04H,0FEH,02H,04H ;
DB 00H,00H,04H,0FDH,80H,03H,0FDH,80H,01H,0FDH,0C6H,04H,0FDH,80H,04H ;
DB 0FEH,5CH,04H, 0FEH,2AH,04H,00H,00H,04H,0FDH,80H,03H,0FDH,80H,01H ;
DB 0FEH,0C0H,04H, 0FEH,84H,04H,0FEH,2AH,04H, 0FEH,02H,04H,0FDH,0C6H,04H ;
DB 0FEH,98H,03H, 0FEH,98H,01H,0FEH,84H,04H, 0FEH,2AH,04H,0FEH,5CH,04H, 0FEH,2AH,04H,00H,00H,04H,0FFH,0FFH */
;以下為公歷轉(zhuǎn)農(nóng)歷子程序
CONvert: MOV A,time_year ;將年月日轉(zhuǎn)化為 HEX 格式 16進(jìn)制
MOV B,#16
DIV AB
MOV CONvert_yeAr,B
MOV B,#10
MUL AB
ADD A,CONvert_yeAr
MOV CONvert_yeAr,A
MOV A,time_month
MOV C,ACC.7
MOV f0,C ;f0暫存世紀(jì)標(biāo)志,僅用于數(shù)據(jù)表定位
CLR ACC.7
JNB ACC.4,CON_02
CLR ACC.4 ;ACC.4 為 1 表示大于 10 月
ADD A,#10
CON_02: MOV CONvert_mONth,A
MOV A,time_date;
SWAP A
ANL A,#07H
MOV B,#10
MUL AB
MOV CONVERT_DATE,A
MOV A,TIME_DATE
ANL A,#0FH
ADD A,CONvert_dAte
MOV CONvert_dAte,A
MOV dptr,#mONth_dAtA ;以下定位本年數(shù)據(jù)在表格中的位置
MOV A,CONvert_yeAr
JB f0,CON_06 ;當(dāng)前為 19 世紀(jì)年跳轉(zhuǎn)
; ADD A,#100 ;從 19 世紀(jì)起定義表格起始年,20 世紀(jì)要加 100 年
CON_06: CLR C
SUBB A,#stArt_yeAr
MOV B,#3 ;表格每年 3 字節(jié)
MUL AB
ADD A,dpl
MOV dpl,A
MOV A,B
ADDC A,dph
MOV dph,A
MOV A,#2
MOVC A,@A+dptr ;讀本年表格最后一字節(jié)(春節(jié)日期)
CLR ACC.7 ;ACC.7 是閏年第 13 個(gè)月大小,在此不用
MOV B,#32
DIV AB
MOV temp_Byte1,A ;春節(jié)月份
MOV temp_Byte2,B ;春節(jié)日
;以下計(jì)算當(dāng)前日期距元旦天數(shù)
MOV temp_Byte3,#0 ;設(shè)距元旦天數(shù)高位為 0
MOV A,CONvert_mONth
CJNE A,#10,CON_08
CON_08: JC CON_09 ;9 月以前日子數(shù)小于 256 天,高字節(jié)為 0(9 月份過(guò)去的整月為 8 個(gè)月)
MOV temp_Byte3,#1
CON_09: MOV A,CONvert_yeAr
ANL A,#03h ;ACC 為除 4 的余數(shù)
JNZ CON_10 ;轉(zhuǎn)常年處理
;年除 4 余數(shù)為 0 是閏年
MOV A,CONvert_mONth
LCALL get_ruN_dAys_lOw ;取得閏年過(guò)去月的天數(shù)的低字節(jié)
SJMP CON_12
CON_10: MOV A,CONvert_mONth
LCALL get_dAys_lOw ;取得常年過(guò)去月的天數(shù)的低字節(jié)
CON_12: MOV B,CONvert_dAte
DEC B ;因?yàn)槿掌趶?nbsp; 1 日起,而不是 0 日起
ADD A,B ;過(guò)去的整月天數(shù)加當(dāng)月天數(shù)
MOV temp_Byte4,A
JNC CON_14
INC temp_Byte3 ;temp_Byte3,temp_Byte4 分別為公歷年過(guò)去的天數(shù)的高低字節(jié)
;以下求春節(jié)距元旦天數(shù),因肯定小于 256 天所以只用一字節(jié)表示
CON_14: MOV A,temp_Byte1
LCALL get_dAys_lOw ;春節(jié)不會(huì)在 3 月份,不用考慮閏年
DEC A ;因?yàn)槿掌趶?nbsp; 1 日起
ADD A,temp_Byte2
MOV temp_Byte5,A ;temp_Byte5,為春節(jié)距元旦天數(shù)
MOV A,CONvert_mONth
CJNE A,temp_Byte1,CON_20 ;轉(zhuǎn)換月與春節(jié)月比較
MOV A,CONvert_dAte
CJNE A,temp_Byte2,CON_20 ;轉(zhuǎn)換日與春節(jié)日比較
CON_20: JC CON_22
LJMP CON_60 ;當(dāng)前日大于等于春節(jié)日期,公歷年與農(nóng)歷年同年份
CON_22: MOV A,CONvert_yeAr ;不到春節(jié),農(nóng)歷年比公歷年低一年
JNZ CON_24
MOV A,#100 ;年有效數(shù) 0-99
CON_24: DEC A
MOV CONvert_yeAr,A
MOV A,dpl
CLR C
SUBB A,#3
MOV dpl,A
JNC CON_26
DEC dph ;表格指針指向上一年
CON_26: MOV A,temp_Byte5
CLR C
SUBB A,temp_Byte4
MOV temp_Byte3,A ;temp_Byte3 中為當(dāng)前日離春節(jié)的天數(shù)
MOV CONvert_mONth,#12 ;農(nóng)歷月為 12 月
CLR f0 ;1901-2099 年沒(méi)有閏 12 月,清閏月標(biāo)志
CLR A
MOVC A,@A+dptr
ANL A,#0f0h
SWAP A;
MOV temp_Byte4,A ;temp_Byte4 中為閏月
JZ CON_30 ;沒(méi)有閏月轉(zhuǎn)移
MOV A,#2 ;有閏月,取第 13 個(gè)月天數(shù)
MOVC A,@A+dptr
MOV C,ACC.7
MOV A,#1
MOVC A,@A+dptr
RLC A ;ACC 中為最后 6 個(gè)月的大小值
SJMP CON_34
CON_30: MOV A,#1
MOVC A,@A+dptr ;ACC 中為最后 6 個(gè)月的大小值
CON_34: MOV temp_Byte5,A
CON_40: MOV A,temp_Byte5
RRC A
MOV temp_Byte5,A
JC CON_42
MOV B,#29 ;小月 29 天
SJMP CON_44
CON_42: MOV B,#30 ;大月 30 天
CON_44: MOV A,temp_Byte3
CLR C
SUBB A,B
JZ CON_46 ;正好夠減,就是農(nóng)歷日 1 日
JNC CON_50 ;不夠減一月天數(shù),結(jié)束農(nóng)歷月調(diào)整
CPL A ;求補(bǔ)取絕對(duì)值
INC A
CON_46: INC A ;加 1 即為農(nóng)歷日
MOV B,#10 ;轉(zhuǎn)換并保存農(nóng)歷日,月,年
DIV AB
SWAP A
ORL A,B
MOV CONvert_dAte,A
MOV A,CONvert_mONth
MOV B,#10
DIV AB
SWAP A
ORL A,B
MOV C,f0
MOV ACC.7,C
MOV CONvert_mONth,A
MOV A,CONvert_yeAr
MOV B,#10
DIV AB
SWAP A
ORL A,B
MOV CONvert_yeAr,A
RET ;結(jié)束轉(zhuǎn)換 ==========================
CON_50: MOV temp_Byte3,A ;temp_Byte3 存減去一月后的天數(shù)
JB f0,CON_52 ;是閏月,前推一月,月份不減
DEC CONvert_mONth;
CON_52: MOV A,CONvert_mONth
CJNE A,temp_Byte4,CON_54
CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
CON_54: SJMP CON_40
CON_60: MOV A,temp_Byte4 ;春節(jié)日小于當(dāng)前日,農(nóng)歷年同公歷年
CLR C
SUBB A,temp_Byte5
MOV temp_Byte4,A
JNC CON_62
DEC temp_Byte3 ;temp_Byte3 temp_Byte4 中為公歷日離春節(jié)的天數(shù)
CON_62: MOV CONvert_mONth,#1 ;農(nóng)歷月為 1 月
CLR A
MOVC A,@A+dptr
MOV temp_Byte5,A
ANL A,#0f0h
SWAP A;
XCH A,temp_Byte5 ;temp_Byte5 中為閏月,ACC 為當(dāng)年農(nóng)歷表第一字節(jié)
CLR f0 ;第一個(gè)月肯定不是閏月
ANL A,#0fh
MOV temp_Byte1,A
MOV A,#1
MOVC A,@A+dptr
MOV temp_Byte2,A
ANL A,#0f0h
ORL A,temp_Byte1
SWAP A
MOV temp_Byte1,A
MOV A,#2
MOVC A,@A+dptr
MOV C,ACC.7
MOV A,temp_Byte2
ANL A,#0fh
SWAP A
MOV ACC.3,C;
MOV temp_Byte2,A ;以上 temp_Byte1,temp_Byte2 各 BIT 存農(nóng)歷年大小
CON_70: MOV A,temp_Byte2
RLC A
MOV temp_Byte2,A
MOV A,temp_Byte1
RLC A
MOV temp_Byte1,A
JC CON_72
MOV B,#29 ;小月 29 天處理
SJMP CON_74
CON_72: MOV B,#30 ;大月 30 天
CON_74: MOV A,temp_Byte4
CLR C
SUBB A,B
JNC CON_78 ;低字節(jié)夠減跳轉(zhuǎn)
MOV B,A ;低字節(jié)不夠減, B 暫存減后結(jié)果,
MOV A,temp_Byte3
JZ CON_76 ;高字節(jié)為 0,不夠減
DEC temp_Byte3
MOV temp_Byte4,B
SJMP CON_80
CON_76: MOV A,temp_Byte4 ;不夠減結(jié)束月調(diào)整
LJMP CON_46 ;轉(zhuǎn)日期加 1 后,處理并保存轉(zhuǎn)換后農(nóng)歷年月日
CON_78: MOV temp_Byte4,A ;temp_Byte3 temp_Byte4 天數(shù)為減去一月后天數(shù)
CON_80: MOV A,CONvert_mONth
CJNE A,temp_Byte5,CON_82
CPL f0 ;當(dāng)前月與閏月相同,更改閏月標(biāo)志
JNB f0,CON_82 ;更改標(biāo)志后是非閏月,月份加 1
SJMP CON_70
CON_82: INC CONvert_mONth;
SJMP CON_70
get_dAys_lOw:
MOVC A,@A+PC ;取得常年過(guò)去月的天數(shù)的低字節(jié)
RET
DB 0,31,59,90,120,151,181,212,243,17,48,78
get_ruN_dAys_lOw:
MOVC A,@A+PC ;取得閏年過(guò)去月的天數(shù)的低字節(jié)
RET
DB 0,31,60,91,121,152,182,213,244,18,49,79
mONth_dAtA:
;公歷年對(duì)應(yīng)的農(nóng)歷數(shù)據(jù),每年三字節(jié),
;格式第一字節(jié) BIT7-4 位表示閏月月份,值為 0 為無(wú)閏月,BIT3-0 對(duì)應(yīng)農(nóng)歷第 1-4 月的大小
;第二字節(jié) BIT7-0 對(duì)應(yīng)農(nóng)歷第 5-12 月大小,第三字節(jié) BIT7 表示農(nóng)歷第 13 個(gè)月大小
;月份對(duì)應(yīng)的位為 1 表示本農(nóng)歷月大(30 天),為 0 表示小(29 天).
;第三字節(jié) BIT6-5 表示春節(jié)的公歷月份,BIT4-0 表示春節(jié)的公歷日期
/*DB 004h,0Aeh,053h,00Ah,057h,048h,055h,026h,0Bdh,00dh,026h,050h,00dh,095h,044h; 1905
DB 046h,0AAh,0B9h,005h,06Ah,04dh,009h,0Adh,042h,024h,0Aeh,0B6h,004h,0Aeh,04Ah; 1910
DB 06Ah,04dh,0Beh,00Ah,04dh,052h,00dh,025h,046h,05dh,052h,0BAh,00Bh,054h,04eh; 1915
DB 00dh,06Ah,043h,029h,06dh,037h,009h,05Bh,04Bh,074h,09Bh,0C1h,004h,097h,054h; 1920
DB 00Ah,04Bh,048h,05Bh,025h,0BCh,006h,0A5h,050h,006h,0d4h,045h,04Ah,0dAh,0B8h; 1925
DB 002h,0B6h,04dh,009h,057h,042h,024h,097h,0B7h,004h,097h,04Ah,066h,04Bh,03eh; 1930
DB 00dh,04Ah,051h,00eh,0A5h,046h,056h,0d4h,0BAh,005h,0Adh,04eh,002h,0B6h,044h; 1935
DB 039h,037h,038h,009h,02eh,04Bh,07Ch,096h,0Bfh,00Ch,095h,053h,00dh,04Ah,048h; 1940
DB 06dh,0A5h,03Bh,00Bh,055h,04fh,005h,06Ah,045h,04Ah,0Adh,0B9h,002h,05dh,04dh; 1945
DB 009h,02dh,042h,02Ch,095h,0B6h,00Ah,095h,04Ah,07Bh,04Ah,0Bdh,006h,0CAh,051h; 1950
DB 00Bh,055h,046h,055h,05Ah,0BBh,004h,0dAh,04eh,00Ah,05Bh,043h,035h,02Bh,0B8h; 1955
DB 005h,02Bh,04Ch,08Ah,095h,03fh,00eh,095h,052h,006h,0AAh,048h,07Ah,0d5h,03Ch; 1960
DB 00Ah,0B5h,04fh,004h,0B6h,045h,04Ah,057h,039h,00Ah,057h,04dh,005h,026h,042h; 1965
DB 03eh,093h,035h,00dh,095h,049h,075h,0AAh,0Beh,005h,06Ah,051h,009h,06dh,046h; 1970
DB 054h,0Aeh,0BBh,004h,0Adh,04fh,00Ah,04dh,043h,04dh,026h,0B7h,00dh,025h,04Bh; 1975
DB 08dh,052h,0Bfh,00Bh,054h,052h,00Bh,06Ah,047h,069h,06dh,03Ch,009h,05Bh,050h; 1980
DB 004h,09Bh,045h,04Ah,04Bh,0B9h,00Ah,04Bh,04dh,0ABh,025h,0C2h,006h,0A5h,054h; 1985
DB 006h,0d4h,049h,06Ah,0dAh,03dh,00Ah,0B6h,051h,009h,037h,046h,054h,097h,0BBh; 1990
DB 004h,097h,04fh,006h,04Bh,044h,036h,0A5h,037h,00eh,0A5h,04Ah,086h,0B2h,0Bfh; 1995
DB 005h,0ACh,053h,00Ah,0B6h,047h,059h,036h,0BCh,009h,02eh,050h,00Ch,096h,045h; 2000 */
DB 04dh,04Ah,0B8h,00dh,04Ah,04Ch,00dh,0A5h,041h,025h,0AAh,0B6h,005h,06Ah,049h; 2005
DB 07Ah,0Adh,0Bdh,002h,05dh,052h,009h,02dh,047h,05Ch,095h,0BAh,00Ah,095h,04eh; 2010
DB 00Bh,04Ah,043h,04Bh,055h,037h,00Ah,0d5h,04Ah,095h,05Ah,0Bfh,004h,0BAh,053h; 2015
DB 00Ah,05Bh,048h,065h,02Bh,0BCh,005h,02Bh,050h,00Ah,093h,045h,047h,04Ah,0B9h; 2020
DB 006h,0AAh,04Ch,00Ah,0d5h,041h,024h,0dAh,0B6h,004h,0B6h,04Ah,069h,057h,03dh; 2025
DB 00Ah,04eh,051h,00dh,026h,046h,05eh,093h,03Ah,00dh,053h,04dh,005h,0AAh,043h; 2030
DB 036h,0B5h,037h,009h,06dh,04Bh,0B4h,0Aeh,0Bfh,004h,0Adh,053h,00Ah,04dh,048h; 2035
DB 06dh,025h,0BCh,00dh,025h,04fh,00dh,052h,044h,05dh,0AAh,038h,00Bh,05Ah,04Ch; 2040
DB 005h,06dh,041h,024h,0Adh,0B6h,004h,09Bh,04Ah,07Ah,04Bh,0Beh,00Ah,04Bh,051h; 2045
DB 00Ah,0A5h,046h,05Bh,052h,0BAh,006h,0d2h,04eh,00Ah,0dAh,042h,035h,05Bh,037h; 2050
DB 009h,037h,04Bh,084h,097h,0C1h,004h,097h,053h,006h,04Bh,048h,066h,0A5h,03Ch; 2055
DB 00eh,0A5h,04fh,006h,0B2h,044h,04Ah,0B6h,038h,00Ah,0Aeh,04Ch,009h,02eh,042h; 2060
DB 03Ch,097h,035h,00Ch,096h,049h,07dh,04Ah,0Bdh,00dh,04Ah,051h,00dh,0A5h,045h; 2065
DB 055h,0AAh,0BAh,005h,06Ah,04eh,00Ah,06dh,043h,045h,02eh,0B7h,005h,02dh,04Bh; 2070
DB 08Ah,095h,0Bfh,00Ah,095h,053h,00Bh,04Ah,047h,06Bh,055h,03Bh,00Ah,0d5h,04fh; 2075
DB 005h,05Ah,045h,04Ah,05dh,038h,00Ah,05Bh,04Ch,005h,02Bh,042h,03Ah,093h,0B6h; 2080
DB 006h,093h,049h,077h,029h,0Bdh,006h,0AAh,051h,00Ah,0d5h,046h,054h,0dAh,0BAh; 2085
DB 004h,0B6h,04eh,00Ah,057h,043h,045h,027h,038h,00dh,026h,04Ah,08eh,093h,03eh; 2090
DB 00dh,052h,052h,00dh,0AAh,047h,066h,0B5h,03Bh,005h,06dh,04fh,004h,0Aeh,045h; 2095
DB 04Ah,04eh,0B9h,00Ah,04dh,04Ch,00dh,015h,041h,02dh,092h,0B5h,00dh,053h,049h; 2100
;ds1302時(shí)鐘上升沿輸入命令或數(shù)據(jù),下降沿輸出數(shù)據(jù).===========================================================================
IN_1302:mov MIAO,#00H ;秒賦初值 出廠日期:2010.6.25.12:00:00
mov FEN,#00H ;分賦初值
mov SHI,#12H ;時(shí)賦初值
mov RIQI,#025H ;日賦初值h
mov YUE,#06H ;月賦初值
mov XQI,#05H ;星期賦初值
mov NIAN,#10H ;年賦初值
lcall set1302 ;調(diào)用初值設(shè)定子程序
RET
;入口參數(shù):初始時(shí)間:Second,Minute,Hour,Day,Month,Week.YearL(地址連續(xù))*/
Set1302:
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, #8EH ;控制寄存器 10001110b
LCALL RTInputByte
MOV B, #00H ;寫(xiě)操作前WP=0
LCALL RTInputByte
MOV B, #90H ;控制寄存器 10010000b
LCALL RTInputByte
MOV B, #10101001b ;充電
LCALL RTInputByte
SETB T_CLK
CLR T_RST
MOV R0, #MIAO;
MOV R7, #7 ;秒 分 時(shí) 日 月 星期 年 共7個(gè)字節(jié)
MOV R1, #80H ;秒寫(xiě)地址 10000000b
S13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, R1 ;寫(xiě)秒 分 時(shí) 日 月 星期 年 地址
LCALL RTInputByte
MOV A, @R0 ;寫(xiě)秒數(shù)據(jù)
MOV B, A
LCALL RTInputByte
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7, S13021
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #80H ;控制,WP=1,寫(xiě)保護(hù)
LCALL RTInputByte
SETB T_CLK
CLR T_RST
RET
;功 能:從DS1302 讀時(shí)間
Get1302:
MOV R0, #MIAO;
MOV R7, #7
MOV R1, #81H ;秒地址
G13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, R1 ;秒 分 時(shí) 日 月 星期 年 地址
LCALL RTInputByte
LCALL RTOutputByte
MOV @R0, A ;秒
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7, G13021
RET
;功 能:寫(xiě)1302一字節(jié) (內(nèi)部子程序)
RTInputByte:
MOV R3, #8 ;一個(gè)字節(jié)有八個(gè)位,移八次.
Inbit1: MOV A, B
RRC A ;通過(guò)A移入CY.
MOV B, A
MOV T_IO, C ;移入芯片內(nèi).
SETB T_CLK
CLR T_CLK
DJNZ R3, Inbit1
RET
;功 能:讀1302一字節(jié)
RTOutputByte:
MOV R3, #8 ;一個(gè)字節(jié)有八個(gè)位,移八次.
Out_1: MOV C, T_IO ;從芯片內(nèi)移到CY
RRC A ;通過(guò)CY移入A.
SETB T_CLK
CLR T_CLK
DJNZ R3,Out_1
RET
;=================================================
;以下子程序用于從當(dāng)前公歷日期,推算星期,
;入口:time_yeAr,time_month ,time_date ,定義公歷年 月 日,BCD 碼,其中月的
;BIT7 表示世紀(jì),0表示20 世紀(jì),1表示 19 世紀(jì),出口 time_week, 0-6 表示星期日-星期六,程序不改變?nèi)肟跀?shù)據(jù)
;使用資源:ACC,B,psw,temp_Byte1,temp_Byte2,temp_Byte3
GetWeek: MOV A,NIAN
MOV B,#16
DIV AB
MOV temp_Byte1,B
MOV B,#10
MUL AB
ADD A,temp_Byte1
MOV temp_Byte1,A ;temp_Byte1=年
MOV A,YUE
JB ACC.7,getw02
MOV A,#100
ADD A,temp_Byte1
MOV temp_Byte1,A ;20世紀(jì)年+100
MOV A,YUE
CLR ACC.7
getw02: JNB ACC.4,getw04
ADD A,#10
CLR ACC.4
getw04: MOV temp_Byte2,A ;temp_Byte2=月
MOV A,RIQI
MOV B,#16
DIV AB
MOV temp_Byte3,B
MOV B,#10
MUL AB
ADD A,temp_Byte3
MOV temp_Byte3,A ;temp_Byte3=日
MOV A,temp_Byte1;
ANL A,#03h
JNZ getw10 ;非閏年轉(zhuǎn)移
MOV A,temp_Byte2
CJNE A,#3,getw06
getw06: JNC getw10 ;月大于 2 轉(zhuǎn)移
DEC temp_Byte3 ;份小于等于 2,又是閏年,日減 1
getw10: MOV A,temp_Byte2;
LCALL get_CorreCt ;取月校正表數(shù)據(jù)
ADD A,temp_Byte1
MOV B,#7
DIV AB ;B放年加校正日數(shù)之和后除7 的余數(shù) 不先做這一步;有可能數(shù)據(jù)溢出
MOV A,temp_Byte1
ANL A,#0fCh
RR A
RR A ;以上年除 4 即閏年數(shù)
ADD A,B
ADD A,temp_Byte3
MOV B,#7
DIV AB
MOV XQI,B ; time_week,B
RET
get_COrreCt:
MOVC A,@A+PC
RET
DB 0,3,3,6,1,4,6,2,5,0,3,5
END
[/code]
|
-
-
X3208.rar
2015-7-18 19:01 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
13.95 KB, 下載次數(shù): 42, 下載積分: 黑幣 -5
|