




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、SPK EQU P3.5溫度值存放單兀TEMP_ZHEQU24H;實時溫度值存放單兀TEMPLEQU25H;低溫度值存放單兀TEMPHEQU26H;向溫度值存放單兀TEMP_THEQU27H;向溫報耆值存放單兀TEMP_TLEQU28H;低溫報警值存放單兀TEMPHCEQU29H;存十位數BCD碼TEMPLCEQU2AH;存個位數BCD碼5;=按鍵輸入弓I腳定義 =K1EQUP3.2K2EQUP3.3K3EQUP3.6K4EQUP3.7LC01 uwr FEA rE皇LIIJulJliJIJIELIIJulJliJIJIE nlRnlRFIlFIlm mFlir 2piJHSJi Pi 3mm
2、 P!M Pi3 Pi pi.rE 中二FSjir-cmartraaSFra.nsn B fiE BFLAG EQU 20H.0RELAY EQU 2FHDS1302通信引腳定義=RSTBITp1.6SCLKBITp1.4IO BIT p1.5=定義數據存儲地址=DS1302_ADDRDATA30H;地址寄存器DS1302_DATADATA31H;數據寄存器TIME_YEARDATA32H;年寄存器TIME_MONTDATA33H;月寄存器TIME_DAYDATA34H;天寄存器WEEK_DATADATA35H;星期寄存器HOURDATA36H;小時寄存器MINTUEDATA37H;分鐘寄存器
3、SECONDDATA38H;秒鐘寄存器=顯示數據緩沖地址=YEAR_HBUF DATA 40HYEAR_LBUFDATA41HMONT_HBUFDATA42HMONT_LBUFDATA43HDAY_HBUFDATA44HDAY_LBUFDATA45HWEEK_HBUFDATA46HWEEK_LBUFDATA47HHOUR_HBUFDATA48HHOUR_LBUFDATA49HMINTUE_HBUF DATA4AHMINTUE_LBUFDA TA4BHSECOND_HBUF DATA4CHSECOND_LBUF DATA4DHX=EQU 2FH;LCD地址變量J;LCD控制引腳RSEQUP2.4
4、RWEQUP2.5EEQUP2.6JKEY_UD EQU 20H.1DQ EQU p2.7= 主程序=;LCD初始化設置子程序;1302初始化;調用18B20復位子程序;顯示溫度標記C;調用顯示OK信息子程序TOOP2:處理溫度BCD碼子程序MAIN:ACALLACALLTOOP: ACALLACALLACALLSET_LCDSET_1302RESET_1820TEMP_BJMEU_OKACALL RE_TEMPACALLSET_DA TAACALL TEMP_BJLCALL RD_DS1302LCALL DATA_BUF LCALLDISPLAYSJMP TOOP2;-RE_TEMP:ACA
5、LL;調用讀取溫度數據子程序;調用處理顯示溫度數據子程序;顯示溫度標記子程序;循環讀取溫度數據子程序RESET_1820;18B20復位子程序MOVA,#0CCHACALL WRITE_1820MOVA,#44HACALL WRITE_1820ACALL RESET_1820MOV A,#0CCHACALL WRITE_1820MOV A,#0BEHACALL WRITE_1820ACALL READ_1820;跳過ROM匹配;寫入子程序;發出溫度轉換命令;調寫入子程序;調復位子程序;跳過ROM匹配;寫入子程序;發出讀溫度命令;寫入子程序;調用讀取子程序RET溫度數據處理顯示子程序SET_DA
6、TA:ACALL CONV_TEMPACALL DISP_BCDACALL CONV RET;處理溫度BCD碼子程序;顯示區BCD碼溫度值刷新子程序;LCD顯示子程序CONVTEMP:MOV A,TEMPH;判溫度是否零下ANL A,#80HJZ TC1;溫度零轉TC1處CLR C;C=0MOV A,TEMPL;一進制數求補(雙字節)CPL A;取反加1ADD A,#01HMOV TEMPL,AMOV A,TEMPH CPL A ADDCA,#00H MOV TEMPH,AJMP TC2;TC1: MOV TEMPHC,#0AHTC2: MOV A,TEMPHCSWAP A;高、低位交換MOV
7、 TEMPHC,AMOV A,TEMPLANL A,#0FH;乘0.0625MOV DPTR,#DOTTABMOVC A,A+DPTRMOV TEMPLC,A;TEMPLC LOW=小數部分BCDMOV A,TEMPL;整數部分ANL A,#0F0H;取出局四位SWAP A;高、低位交換MOV TEMPL,AMOV A,TEMPHANL A,#0FH;取出低四位SWAP A;高、低位交換ORL A,TEMPL;重新組合MOV TEMP_ZH,ALCALL HEX2BCD1MOV TEMPL,AANL A,#0F0H;取出局四位SWAP A;高、低位交換ORL A,TEMPHC;TEMPHC L
8、OW =十位數BCDMOV TEMPHC,AMOV A,TEMPLANL A,#0FH;取出低四位SWAP A;高、低位交換ORL A,TEMPLC;TEMPLC HI =個位數BCDMOV TEMPLC,AJ;小數部分碼表DOTTAB:DB 00H,00H,01H,01H,02H,03H,03H,04HDB 05H,05H,06H,06H,07H,08H,08H,09H- 顯示區BCD碼溫度值刷新子程序DISP_BCD:;個位數BCD碼送入A;取低位碼;小數位;高、低位交換;取結果數的高位;個位;取低位碼;十位;高、低位交換;取結果數的高位;百位;取低位碼MOV A,R4JZ TC3ANL
9、A,#0FHSWAP AMOV R4,AMOV A,TEMPHCANL A,#0FHORL A,R4MOV TEMPHC,ATC3:RET;-HEX2BCD1:MOV B,#064HDIV ABMOV R4,AMOV A,#0AHXCH A,BDIV ABSWAP AORL A,BRET;取出低四位;高、低位交換;TEMPHC HI =百位數BCD;取出低四位;十六進制- BCD;B= A % 100;R4 =百位數;B = A % B;高、低位交換MOV A,TEMPLCANL A,#0FHMOV 70H,AMOV A,TEMPLCSWAP AANL A,#0FHMOV 71H,AMOV A
10、,TEMPHCANL A,#0FHMOV 72H,AMOV A,TEMPHCSWAP AANL A,#0FHMOV 73H,AMOV A,TEMPHCCJNE A,#010H,DI0JMP DI2DI0:MOVA,TEMPHCANLA,#0FH;取低位碼JNZ DI2;十位數是0MOVA,TEMPHCSWAPA;高、低位交換ANLA,#0FH;取結果數的高位MOV73H,#0AH;符號位不顯示MOV72H,A;十位數顯示符號DI2:RETJ;=讀1302子程序=RD_DS1302:MOV DS1302_ADDR,#8DH;讀DS1302中的年LCALL READ;調用讀DS1302子程序MOV
11、 TIME_YEAR, DS1302_DA TA ;把讀出的年數據存入年寄存器中MOV DS1302_ADDR,#8BH;讀DS1302中的星期LCALL READMOV WEEK_DA TA, DS1302_DA TAMOVDS1302_ADDR,#89HLCALLREADMOV TIME_MONT, DS1302_DATAMOVDS1302_ADDR,#87HLCALLREADMOV TIME_DAY , DS1302_DATAMOV DS1302_ADDR,#85HLCALL READMOV HOUR, DS1302_DATAMOV DS1302_ADDR,#83HLCALL READM
12、OV MINTUE, DS1302_DATAMOV DS1302_ADDR,#81HLCALL READMOV SECOND, DS1302_DATA RET=按鍵子程序=;讀DS1302中的月;把讀出的月數據存入月寄存器中;讀DS1302中的天;把讀出的夭數據存入天寄存器中;讀DS1302中的小時;把讀出的夭數據存入小時寄存器中;讀DS1302中的分鐘;把讀出的夭數據存入分鐘寄存器中;讀DS1302中的秒鐘;把讀出的夭數據存入秒鐘寄存器中;=數據分離后送顯示緩存 =DATA_BUF:MOV R0,TIME_YEAR;年數據分離,送顯示緩存LCALL DIVIDE;調用數據分離子程序MOV Y
13、EAR_HBUF,R1MOV YEAR_LBUF,R2MOV R0,TIME_MONT LCALLDIVIDEMOV MONT_HBUF,R1MOV MONT_LBUF,R2MOV R0,TIME_DAY LCALLDIVIDEMOV DAY_HBUF,R1MOV DAY_LBUF,R2MOV R0,WEEK_DATA LCALLDIVIDEMOV WEEK_HBUF,R1MOV WEEK_LBUF,R2MOV R0,HOUR LCALLDIVIDEMOV HOUR_HBUF,R1MOV HOUR_LBUF,R2MOV R0,MINTUE LCALLDIVIDEMOV MINTUE_HBUF,
14、R1MOV MINTUE_LBUF,R2MOV R0,SECOND LCALLDIVIDEMOV SECOND_HBUF,R1 MOVSECOND_LBUF,R2 RET;月數據分離,送顯示緩存;日數據分離,送顯示緩存;星期數據分離,送顯示緩存;小時數據分離,送顯示緩存;分鐘數據分離,送顯示緩存;秒鐘數據分離,送顯示緩存;=日歷顯示子程序=;=年顯示=DISPLAY:MOV A,#10000001B;設定年第1位的顯示地址為第1行,LCALL WR_COMM;調用寫指令到液晶子程序MOVLCALLA, #32HWR_DATA;數字2的ASCII碼;調用寫 數據到液晶子程序MOVA,#10000
15、010B;設定年第2位的顯示地址為第1行,第2列LCALLWR_COMMMOVA, #30H;數字0的ASCII碼LCALLWR_DATAMOVA,#10000011B;設定年第3位的顯示地址為第1行,第3列LCALLWR_COMMMOVA, YEAR_LBUF;年的低位緩存數據ADDA,#30H;加30H修正取ASCII碼LCALL WR_DA TAMOVA,#10000100B;設定年第4位的顯示地址為第1行,第4列LCALL WR_ COMMMOVA, YEAR_HBUF;年的高位緩存數據ADDA,#30H;加30H修正取ASCII碼LCALL WR_DA TA=斜線顯示=MOV A,#
16、10000101B;設定斜線的顯示地址為第1行,第5列LCALL WR_COMMMOV A,#2FH;斜線的ASCII碼LCALL WR_DA TA=顯示月=MOV A,#10000110B;設定月第1位的顯示地址為第1行,第6列LCALL WR_COMMMOVA, MONT_LBUF;月的低位緩存數據ADDA,#30H;加30H修正取ASCII碼LCALL WR_DA TAMOVA,#10000111B;設定月第2位的顯示地址為第1行,第7列LCALL WR_ COMMMOVA, MONT_HBUF;月的高位緩存數據ADDA,#30H;加30H修正取ASCII碼LCALL WR_DA TA_
17、會絲曰T-科線顯刀、MOVA,#10001000B;設定斜線的顯示地址為第1行,第8列LCALL WRCOMMMOV A,#2FH;斜線的ASCII碼LCALL WR_DA TA=天顯示=MOV A,#10001001B;設定夭第1位的顯示地址為第1行,第9列;夭的低位緩存數據;加30H修正取ASCII碼;設定夭第2位的顯示地址為第1行,第10列;夭的高位緩存數據;加30H修正取ASCII碼星期顯示=;設定星期第2位的顯示地址為第1行,第13列;星期的高位緩存數據;加30H修正取ASCII碼=小時顯示=MOVA,#11000000BLCALLMOVMOV A,#11000001B;設定小時第2
18、位的顯示地址為第2行,第1列LCALL WR_COMMMOV A, HOUR_HBUF ;小時的高位緩存數據ADD A,#30H;加30H修正取ASCII碼LCALL WR_DATA=冒號的顯示=MOV A,#11000010B;設定冒號的顯示地址為第2行,第2列LCALL WR_COMMMOV A, #3AH;冒號的ASCII碼LCALL WR_DATA=分鐘顯示=MOV A,#11000011B ;設定分鐘第1位的顯示地址為第2行,第3列LCALL WR_COMMMOV A, MINTUE_LBUF;分鐘的低位緩存數據ADD A,#30H;加30H修正取ASCII碼LCALLWR_DA T
19、AMOV A,#11000100B ;設定分鐘第2位的顯示地址為第2行,第4列LCALL WR_COMM MOV A,DAY_LBUF ADD A,#30H LCALL WR_DATA MOV A,#10001010B LCALLWR_COMM MOV A, DAY_HBUF ADDA,#30H LCALL WR_DA TA ;= MOVA,#10001111B LCALL WR_COMMMOV A, WEEK_DATA SUBBA,#1ADD A,#30H LCALLWRDATAWR_COMMA, HOUR_LBUFA,#30HWRDATA;小時的低位緩存數據;加30H修正取ASCII碼AD
20、DLCALLLCALL WR_COMMMOV A, MINTUE_HBUF;分鐘的高位緩存數據ADD A,#30H;加30H修正取ASCII碼LCALL WR_DATA=冒號的顯示=MOV A,#11000101B;設定冒號的顯示地址為第2行,第5列LCALL WR_COMMLCALL WR_DATA=秒鐘顯示=MOV A,#11000110B ;設定秒鐘第1位的顯示地址為第2行,第6列LCALL WR_COMMMOV A, SECOND_LBUF;秒鐘的低位緩存數據ADD A,#30H;加30H修正取ASCII碼LCALL WR_DATAMOV A,#11000111B ;設定秒鐘第2位的顯
21、示地址為第2行,第7列LCALL WR_COMMMOV A, SECOND_HBUF;秒鐘的高位緩存數據ADD A,#30H;加30H修正取ASCII碼LCALL WR_DA TARETDS18B20復位初始化子程序 -;復位(有具體的時序要求)SETB DQNOPCLR DQ;然后拉高數據線SETB DQNOPNOPNOP;等待DS18B20回應MOVA, #3AH;冒號的ASCII碼RESET 1820:;主機發出延時MOVDL Y: MOVDJNZDJNZ537微秒的復位低脈沖R1,#3R0,#107R0,$R1,DLYMOVT2: JNBDJNZR0,#25HDQ ,T5R0, T2;
22、時序要求延時一段時間T5: MOV R0,#117T6: DJNZ R0,T6JT7: SETB DQRET;=;=DS1302初始化=SET_1302:MOV DS1302_ADDR, #8EH;寫DS1302控制指令MOV DS1302_DATA, #00H;寫數據到DS1302的8E控制寄存器中,允許對其進行寫操作LCALL WRITE ;調用寫DS1302子程序J;=延時程序=DEL:MOV R6,#5L1:MOV R7,#248DJNZ R7,$DJNZ R6,L1MOV DS1302_ADDR, #90HMOV DS1302_DATA,#0A6H流充電,充電電流為1.1mALCAL
23、L WRITE;調用寫RET;=查詢忙碌標志=CHECK_BUSY:PUSH ACC BUSY_LOOP:CLR E SETB RW CLR RS SETB EMOV A, p0 JB p0.7,BUSY_LOOPPOP ACC LCALL DEL RET;寫DS1302控制指令;寫數據到DS1302的90控制寄存器中,對電池涓DS1302子程序RET- 寫入DS18B20子程序-;寫入DS18B20(有具體的時序要求)WRITE_1820:MOV R2,#8;一共8位數據CLR C;C=0WR1:CLR DQ;總線低位,開始寫入MOV R3,#6DJNZ R3,$;保持16微秒以上RRC A
24、;把字節DATA分成8個BIT環移給CMOV DQ, C;寫入一個BITMOV R3,#23DJNZ R3,$;等待SETB DQ;重新釋放總線NOPDJNZ R2,WR1;寫入下一個BITSETB DQ;釋放總線RET;快U4;將溫度值從DS18B20中讀出READ_1820:MOV R4,#4MOV R1,#TEMPLRE0:MOV R2,#8RE1:CLR CSETB DQNOPNOPCLR DQNOPNOPNOPLJDIODCUIE丁(有具體的時序要求);存入25H、26H、27H、28H;數嚀共有8位;讀前總線保持為低位;總線釋放;MOV R3,#9DJNZ R3,$MOV C, D
25、Q;延時18微妙;從總線讀到一個BITMOV R3,#23J;等待50微秒;把讀得的位值環移給A;讀下一個BIT;R1內數據遞增LCD 1602顯示程序;初始化設置SET_LCD:CLR ECALL INIT_LCDCALL STORE_DATARETLCDINIT_LCD:MOV A,#38HACALL WR_COMMACALL DELAY1MOV A,#0CHACALL WR_COMMACALL DELAY1MOV A,#01HACALL WR_COMMACALL DELAY1RETJTEMP_BJ:MOV A, #0CEHACALL WR_COMMMOV DPTR,#BJMOVR1 ,#
26、0MOVR0 ,#2Tp0:MOVA,R1MOVCA,A+DPTRACALLWR_DATAINC R1DJNZ R0,Tp0 RETJBJ:;代碼表DB 00H,C- 自定義字符子程序 -RETDJNZ R3,$RRC ADJNZ R2,RE1MOV R1,AINC R1DJNZ R4,RE0;初始化LCD;將自定義字符存入LCD的CGRAM初始化子程序 -;設置8位、2行、5x7點陣;調用寫指令子程序;調用延時子程序;開顯示,光標不閃爍;調用寫指令子程序;;調用延時子程序;清除LCD顯示屏;調用寫指令子程序;;調用延時子程序顯示溫度標記子程序;設定第二行起始地址;調用寫指令子程序;存代碼表;
27、使指針指到表中第一個碼;取碼次數;A為0;取碼;調用寫數據子程序;R1值加1;判斷是否將代碼讀取完?;將自定義字符寫入LCD1602的CGRAM中STORE_DATA:MOVA,#40H;指定CG RAM起始地址ACALLWR_COMM;將指令寫入LCDMOVR2,#08H;圖形數據長度8個字節MOVDPTR,#TAB;存代碼表MOVR3,#00H;使指針指到表中第一個碼S_D: MOVA,R3;A為0MOVCA,A+DPTR;讀取表代碼ACALLWR_DA TA;調用寫入數據指令INCR3;R3值加1DJNZR2, S_D;判斷是否將代碼讀取完?RET;JTAB:;代碼表DB 0CH,12H
28、,12H,0CHDB 00H,00H,00H,00H- 顯示OK信息子程序 -MEU_OK:MOVDPTR,#M_OK1;指針指到顯示消息MOVA,#1;顯示在第一行ACALLLCD_PRINT;LCD顯示MOVDPTR,#M_OK2;指針指到顯示消息MOVA,#2;顯示在第一行ACALLLCD_PRINT;LCD顯示RET;M_OK1:DB - WK: ,0M_OK2:DB -,0;術中亞小丁任廳;在LCD的第行或第一行顯示子符LCD_PRINT:CJNEA,#1,LINE2;判斷是否為第一行LINE1:ACALLCLR_LINE;清除該行字符數據MOVA,#80H;設置LCD的第一行地址A
29、CALLWR_COMM;寫入命令JMPFILLLINE2:ACALL CLR_LINE;清除該行字符數據MOVA,#0C0H;設置LCD的第二行地址ACALLWR_COMMFILL:CLRA;填入字符MOVCA,A+DPTR;由消息區取出字符CJNEA,#0,LC1;判斷是否為結束碼RETLC1:ACALLWR_DATA;寫入數據INCDPTR;指針加1JMPFILL;繼續填入字符RETLCD顯示子程序 -CONV:MOVA,73H;加載百位數據MOVX,#9;設置位置CJNE A,#1,CO1JMP CO2CO1:MOV A,#MOV B,XACALL LCDP2JMPCO3CO2:ACAL
30、LSHOW_LINE2;顯示數據CO3: INCX;位加1MOVA,72H;十位ACALLSHOW_LINE2;顯示數據INCX;位加1MOVA, 71H;個位ACALLSHOW_LINE2;顯示數據INCX;位加1MOVA,#.MOVB,XACALLLCDP2;顯示字符MOVA,70H;加載小數點位INCX;設置位置ACALLSHOW_LINE2;顯示數據RET- 顯示第二行-;在LCD的第二行顯示數字SHOW_LINE2:ADD A,#30HMOV B,XACALL LCDP2RETLCDP2:PUSH ACCMOV A,BADD A,#0C0HACALL WR_COMMPOP ACCAC
31、ALL WR_DATA RET;-WR_COMM:MOV p0,ACLR RSCLR RWSETB EACALL DELAY1CLR ERET;-WR_DATA:MOV p0,ASETB RSCLR RWSETB EACALL DECLR EACALL DERET;- 清除CLR_LINE:MOV R0,#24CL1: MOV A,#ACALL WR_DATADJNZ R0,CL1RET;CLR_LINE1:MOV A,#80HACALL WR_COMMMOV R0,#24C1: MOV A,# ACALL WR_DA TA;在LCD的第二行顯示字符;放入堆棧;設置顯示地址;設置LCD的第二行
32、地址;寫入命令;由堆棧取出A;寫入數據寫指令子程序 -;寫入指令;RS=0,選擇指令寄存器;RW=0,選擇寫模式;E=1,允許讀/寫LCM;延時5MS;E=0,禁止讀/寫LCM寫數據子程序 -;寫入數據;RS=1,選擇數據寄存器;RW=0,選擇寫模式;E=1,允許讀/寫LCM;延時0.5MS;E=0,禁止讀/寫LCM;延時0.5MSLCD的字符-;設置計數值;載入空格符至LCD;輸出字符至LCD;判斷;清除LCD的第一行字符;設置LCD的第一行地址;調用寫指令子程序;設置計數值;載入空格符至LCD;輸出字符至LCDWRITE:CLR SCLKNOPSETB RSTNOPMOV A,DS1302_ADDRMOV R4,#8WRITE1:RRC A;送地址給1302NOPNOPCLR SC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 證券投資顧問考試試題及答案大全
- 招聘司機筆試題目及答案
- 廣東省封開縣廣信中學2024-2025學年高一下學期第二次教學質量檢測物理試題
- 云南成人自考考試題庫及答案
- 源訊的筆試題目及答案
- 語文編制筆試題目及答案
- 《幼兒園教育活動設計與指導》課件-第六章 第一節 掌握幼兒園各領域教育活動的設計方法(上)-1健康
- 變電檢修工-高級工考試模擬題+參考答案
- 金融行業大數據人才培養與教育
- 金融市場風險評估及防范
- 精裝分包勞務合同協議書
- 2025-2030中國酸奶冰淇淋市場需求前景預測及投資效益盈利性研究報告
- 2025年高考英語應用文第09講 讀后續寫分話題萬能結尾滿分句(講義)
- 2025年四年級下冊美術期末測試題附答案
- 圖像編輯基礎Photoshop試題及答案
- 新媒體國企面試題及答案
- 寶寶改姓夫妻協議書
- 宣城汽車精密零部件項目商業計劃書
- 2021入河(海)排污口三級排查技術指南
- 央企華潤集團杭州片區年度品牌傳播策略案
- 行為:2024年全球影視報告-YouGov
評論
0/150
提交評論