基于單片機(jī)——DsB溫采集LCD顯示匯編程序附帶proteus仿真圖_第1頁
基于單片機(jī)——DsB溫采集LCD顯示匯編程序附帶proteus仿真圖_第2頁
基于單片機(jī)——DsB溫采集LCD顯示匯編程序附帶proteus仿真圖_第3頁
基于單片機(jī)——DsB溫采集LCD顯示匯編程序附帶proteus仿真圖_第4頁
基于單片機(jī)——DsB溫采集LCD顯示匯編程序附帶proteus仿真圖_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 TEMP_ZH EQU 24H ;實(shí)測溫度值存放單元 TEMPL EQU 25H TEMPH EQU 26H TEMP_TH EQU 27H ;高溫報(bào)警值存放單元 TEMP_TL EQU 28H ;低溫報(bào)警值存放單元 TEMPHC EQU 29H ;正、負(fù)溫度值標(biāo)記 TEMPLC EQU 2AH TEMPFC EQU 2BH K1 EQU P1.4 ;查詢按鍵 K2 EQU P1.5 ;設(shè)置/調(diào)整鍵 K3 EQU P1.6 ;調(diào)整鍵 K4 EQU P1.7 ;確定鍵 BEEP EQU P3.7 ;蜂鳴器 RELAY EQU P1.3 ;指示燈 LCD_X EQU 2FH ;LCD 字符顯示位

2、置 LCD_RS EQU P2.0 ;LCD 寄存器選擇信號 LCD_RW EQU P2.1 ;LCD 讀寫信號 LCD_EN EQU P2.2 ;LCD 允許信號 FLAG1 EQU 20H.0 ;DS18B20是否存在標(biāo)志 KEY_UD EQU 20H.1 ;設(shè)定按鍵的增、減標(biāo)志 DQ EQU P3.3 ;DS18B20數(shù)據(jù)信號 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV SP,#60H MOV A,#00H MOV R0,#20H ;將20H2FH 單元清零 MOV R1,#10HCLEAR: MOV R0,A INC R0 DJNZ R1,CLEAR

3、LCALL SET_LCD LCALL RE_18B20 START: LCALL RST ;調(diào)用18B20復(fù)位子程序 JNB FLAG1,START1 ;DS1820不存在 LCALL MENU_OK;DS1820存在,調(diào)用顯示正確信息子程序 MOVTEMP_TH,#055H;設(shè)置TH初值85度 MOVTEMP_TL,#019H;設(shè)置TL初值25度 LCALL RE_18B20A;調(diào)用暫存器操作子程序 LCALL WRITE_E2 ;寫入DS18B20 LCALL TEMP_BJ ;顯示溫度標(biāo)記 JMP START2START1: LCALL MENU_ERROR;調(diào)用顯示出錯(cuò)信息子程序 L

4、CALL TEMP_BJ ;顯示溫度標(biāo)記 SJMP $START2: LCALL RST;調(diào)用DS18B20復(fù)位子程序 JNB FLAG1,START1 ;DS18B20不存在 MOV A,#0CCH ;跳過ROM匹配命令 LCALL WRITE MOV A,#44H ;溫度轉(zhuǎn)換命令 LCALL WRITE LCALL RST MOV A,#0CCH ;跳過ROM匹配 LCALL WRITE MOV A,#0BEH ;讀溫度命令 LCALL WRITE LCALL READ;調(diào)用DS18B20數(shù)據(jù)讀取操作子程序 LCALL CONVTEMP;調(diào)用溫度數(shù)據(jù)BCD 碼處理子程序 LCALL DIS

5、PBCD;調(diào)用溫度數(shù)據(jù)顯示子程序 LCALL CONV;調(diào)用LCD顯示處理子程序 LCALL TEMP_COMP;調(diào)用實(shí)測溫度值與設(shè)定溫度值比較子程序 LCALL PROC_KEY ;調(diào)用鍵掃描子程序 SJMP START2;循環(huán);* 鍵掃描子程序 *PROC_KEY:JB K1,PROC_K1 LCALL BEEP_BL JNB K1,$ MOV DPTR,#M_ALAX1 MOV A,#1 LCALL LCD_PRINT LCALL LOOK_ALARM JB K3,$ LCALL BEEP_BL JMP PROC_K2PROC_K1: JB K2,PROC_END LCALL BEEP_

6、BL JNB K2,$ MOV DPTR,#RST_A1 MOV A,#1 LCALL LCD_PRINT LCALL SET_ALARM LCALL RE_18B20 ;將設(shè)定的TH,TL值寫入DS18B20 LCALL WRITE_E2PROC_K2: LCALL MENU_OK LCALL TEMP_BJPROC_END:RET;* 設(shè)定溫度報(bào)警值 TH、TL *SET_ALARM:LCALL LOOK_ALARMAS0: JB K1,AS00 LCALL BEEP_BL JNB K1,$ CPL 20H.1 ;UP/DOWN 標(biāo)記AS00: JB 20H.1,ASZ01 ;20H.1=

7、1,增加 JMP ASJ01 ;20H.1=0,減小ASZ01: JB K2,ASZ02 ;TH值調(diào)整(增加) LCALL BEEP_BL INC TEMP_TH MOV A,TEMP_TH CJNE A,#120,ASZ011 MOV TEMP_TH,#0ASZ011: LCALL LOOK_ALARM MOV R5,#10 LCALL DELAY JMP ASZ01ASZ02: JB K3,ASZ03 ;TL值調(diào)整(增加) LCALL BEEP_BL INC TEMP_TL MOV A,TEMP_TL CJNE A,#99,ASZ021 MOV TEMP_TL,#00HASZ021: LC

8、ALL LOOK_ALARM MOV R5,#10 LCALL DELAY JMP ASZ02ASZ03: JB K4,AS0 ;確定調(diào)整 LCALL BEEP_BL JNB K4,$ RETASJ01: JB K2,ASJ02 ;TH值調(diào)整(減少) LCALL BEEP_BL DEC TEMP_TH MOV A,TEMP_TH CJNE A,#0FFH,ASJ011 JMP ASJ022ASJ011: LCALL LOOK_ALARM MOV R5,#10 LCALL DELAY JMP AS0ASJ02: JB K3,ASJ03 ;TL值調(diào)整(減少) LCALL BEEP_BL DEC T

9、EMP_TL MOV A,TEMP_TL CJNE A,#0FFH,ASJ021 JMP ASJ022ASJ021: LCALL LOOK_ALARM ; MOV R5,#10 LCALL DELAY JMP AS0ASJ022: CPL 20H.1 JMP ASZ01ASJ03: JMP ASZ03 RETRST_A1: DB " SET ALERT CODE " ,0;* 實(shí)測溫度值與設(shè)定溫度值比較子程序 *TEMP_COMP:MOV A,TEMP_TH SUBB A,TEMP_ZH ;減數(shù)>被減數(shù),則 JC CHULI1 ;借位標(biāo)志位C=1,轉(zhuǎn) MOVA,TEM

10、PFC CJNEA,#0BH,COMP SJMPCHULI2COMP: MOV A,TEMP_ZH SUBB A,TEMP_TL ;減數(shù)>被減數(shù),則 JC CHULI2 ;借位標(biāo)志位C=1,轉(zhuǎn) MOV DPTR,#BJ5 LCALL TEMP_BJ3 CLR RELAY ;點(diǎn)亮指示燈 RET CHULI1: MOV DPTR,#BJ3 LCALL TEMP_BJ3 SETB RELAY ;熄滅指示燈 LCALL BEEP_BL;蜂鳴器響 RET CHULI2: MOV DPTR,#BJ4 LCALL TEMP_BJ3 SETB RELAY ;熄滅指示燈 LCALL BEEP_BL;蜂鳴器

11、響 RET;-TEMP_BJ3: MOV A,#0CEH LCALL WCOM MOV R1,#0 MOV R0,#2BBJJ3: MOV A,R1 MOVC A,A+DPTR LCALL WDATA INC R1 DJNZ R0,BBJJ3 RETBJ3: DB ">H"BJ4: DB "<L"BJ5: DB " !" ;* 顯示溫度標(biāo)記子程序 *TEMP_BJ: MOV A,#0CBH LCALL WCOM MOV DPTR,#BJ1 ;指針指到顯示消息 MOV R1,#0 MOV R0,#2BBJJ1: MOV A,

12、R1 MOVC A,A+DPTR LCALL WDATA INC R1 DJNZ R0,BBJJ1 RETBJ1: DB 00H,"C"* 顯示正確信息子程序 *MENU_OK: MOV DPTR,#M_OK1 ;指針指到顯示消息 MOV A,#1 ;顯示在第一行 LCALL LCD_PRINT MOV DPTR,#M_OK2 ;指針指到顯示消息 MOV A,#2 ;顯示在第一行 LCALL LCD_PRINT RETM_OK1: DB " DS18B20 OK ",0M_OK2: DB " TEMP: ",0;* 顯示出錯(cuò)信息子程序

13、 *MENU_ERROR:MOV DPTR,#M_ERROR1 ;指針指到顯示消息 MOV A,#1 ;顯示在第一行 LCALL LCD_PRINT MOV DPTR,#M_ERROR2 ;指針指到顯示消息1 MOV A,#2 ;顯示在第一行 LCALL LCD_PRINT RETM_ERROR1: DB " DS18B20 ERROR ",0M_ERROR2: DB " TEMP: - ",0;*DS18B20復(fù)位子程序 *RST: SETB DQ NOP CLR DQ MOV R0,#6BH ;主機(jī)發(fā)出延時(shí)復(fù)位低脈沖 MOV R1,#04HTSR1:

14、 DJNZ R0,$ MOV R0,#6BH DJNZ R1,TSR1 SETB DQ ;拉高數(shù)據(jù)線 NOP NOP NOP MOV R0,#32HTSR2: JNB DQ,TSR3 ;等待DS18B20回應(yīng) DJNZ R0,TSR2 JMP TSR4 ; 延時(shí)TSR3: SETB FLAG1 ; 置1標(biāo)志位,表示DS1820存在 JMP TSR5TSR4: CLR FLAG1 ; 清0標(biāo)志位,表示DS1820不存在 JMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,$ ; 時(shí)序要求延時(shí)一段時(shí)間TSR7: SETB DQ RET;* DS18B20暫存器操作子程序

15、 *RE_18B20:JB FLAG1,RE_18B20A RETRE_18B20A:LCALL RST MOV A,#0CCH ;跳過ROM匹配 LCALL WRITEWR_SCRAPD: MOV A,#4EH ;寫暫器 LCALL WRITE MOV A,TEMP_TH ;TH(報(bào)警上限) LCALL WRITE MOV A,TEMP_TL ;TL(報(bào)警下限) LCALL WRITE MOV A,#7FH ;12位精度 LCALL WRITE RET;* 復(fù)制暫存器子程序 *WRITE_E2:LCALL RST MOV A,#0CCH ;跳過ROM匹配 LCALL WRITE MOV A,

16、#48H ;把暫存器里的溫度報(bào)警值拷貝到EEROM LCALL WRITE RET;* 重讀EEROM子程序 *READ_E2:LCALL RST MOV A,#0CCH ;跳過ROM匹配 LCALL WRITE MOV A,#0B8H ;把EEROM里的溫度報(bào)警值拷貝回暫存器 LCALL WRITE RET;* 將自定義字符寫入LCD的CGRAM中 *STORE_DATA: MOV A,#40H LCALL WCOM MOV R2,#08H MOV DPTR,#D_DATA MOV R3,#00HS_DATA: MOV A,R3 MOVC A,A+DPTR LCALL WDATA ;寫入數(shù)據(jù)

17、 INC R3 DJNZ R2,S_DATA RETD_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H;* DS18B20數(shù)據(jù)寫入操作子程序 *WRITE: MOV R2,#8 ;一共8位數(shù)據(jù) CLR CWR1: CLR DQ ;開始寫入DS18B20總線要處于復(fù)位(低)狀態(tài) MOV R3,#07 DJNZ R3,$ ;總線復(fù)位保持16微妙以上 RRC A ;把一個(gè)字節(jié)DATA 分成8個(gè)BIT環(huán)移給C MOV DQ,C ;寫入一位 MOV R3,#3CH DJNZ R3,$ ;等待100微妙 SETB DQ ;重新釋放總線 NOP DJNZ R2,WR1 ;寫

18、入下一位 SETB DQ RET;* DS18B20數(shù)據(jù)讀取操作子程序 *READ: MOV R4,#4 ;將溫度低位、高位、TH、TL從DS18B20中讀出 MOV R1,#TEMPL ;存入25H、26H、27H、28H單元RE00: MOV R2,#8RE01: CLR CY SETB DQ NOP NOP CLR DQ ;讀前總線保持為低 NOP NOP NOP SETB DQ ;開始讀總線釋放 MOV R3,#09 ;延時(shí)18微妙 DJNZ R3,$ MOV C,DQ ;從DS18B20總線讀得一位 MOV R3,#3CH DJNZ R3,$ ;等待100微妙 RRC A ;把讀得的

19、位值環(huán)移給A DJNZ R2,RE01 ;讀下一位 MOV R1,A INC R1 DJNZ R4,RE00 RET;* 溫度值 BCD 碼處理子程序 *CONVTEMP: MOV A,TEMPH ;判溫度是否零下 ANL A,#08H JZ TEMPC1 ;溫度零上轉(zhuǎn) CLR C MOV A,TEMPL ;二進(jìn)制數(shù)求補(bǔ)(雙字節(jié)) CPL A ;取反加1 ADD A,#01H MOV TEMPL,A MOV A,TEMPH CPL A ADDC A,#00H MOV TEMPH,A MOV TEMPHC,#0BH;負(fù)溫度標(biāo)志 MOV TEMPFC,#0BH SJMP TEMPC11TEMPC1

20、: MOV TEMPHC,#0AH ;正溫度標(biāo)志 MOV TEMPFC,#0AHTEMPC11: MOV A,TEMPHC SWAP A MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH ;乘0.0625 MOV DPTR,#TEMPDOTTAB MOVC A,A+DPTR MOV TEMPLC,A ;TEMPLC LOW=小數(shù)部分 BCD MOV A,TEMPL ;整數(shù)部分 ANL A,#0F0H ;取出高四位 SWAP A MOV TEMPL,A MOV A,TEMPH ;取出低四位 ANL A,#0FH SWAP A ORL A,TEMPL ;重新組合 MOV TE

21、MP_ZH,A LCALL HEX2BCD1 MOV TEMPL,A ANL A,#0F0H SWAP A ORL A,TEMPHC ;TEMPHC LOW = 十位數(shù) BCD MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH SWAP A ;TEMPLC HI = 個(gè)位數(shù) BCD ORL A,TEMPLC MOV TEMPLC,A MOV A,R4 JZ TEMPC12 ANL A,#0FH SWAP A MOV R4,A MOV A,TEMPHC ;TEMPHC HI = 百位數(shù) BCD ANL A,#0FH ORL A,R4 MOV TEMPHC,ATEMPC12:

22、 RET;* 二-十進(jìn)制轉(zhuǎn)換子程序 *HEX2BCD1: MOV B,#064H DIV AB MOV R4,A MOV A,#0AH XCH A,B DIV AB SWAP A ORL A,B RETTEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H ; 小數(shù)部分碼表 DB 05H,05H,06H,06H,07H,08H,08H,09H;* 查詢溫度報(bào)警值子程序 *LOOK_ALARM: MOV DPTR,#M_ALAX2 ;指針指到顯示信息區(qū) MOV A,#2 ;顯示在第二行 LCALL LCD_PRINT MOV A,#0C6H LCALL TE

23、MP_BJ1 MOV A,TEMP_TH ;加載TH數(shù)據(jù) MOV LCD_X,#3 ;設(shè)置顯示位置 LCALL SHOW_DIG2H ;顯示數(shù)據(jù) MOV A,#0CEH LCALL TEMP_BJ1 MOV A,TEMP_TL ;加載TL數(shù)據(jù) MOV LCD_X,#12 ;設(shè)置顯示位置 LCALL SHOW_DIG2L ;顯示數(shù)據(jù) RETM_ALAX1: DB " LOOK ALERT CODE",0M_ALAX2: DB "TH: TL: ",0TEMP_BJ1: LCALL WCOM MOV DPTR,#BJ2 ;指針指到顯示信息區(qū) MOV R1,#

24、0 MOV R0,#2 BBJJ2: MOV A,R1 MOVC A,A+DPTR LCALL WDATA INC R1 DJNZ R0,BBJJ2 RETBJ2: DB 00H,"C"* LCD顯示子程序 *SHOW_DIG2H: MOV B,#100 DIV AB ADD A,#30H PUSH B MOV B,LCD_X LCALL LCDP2 POP B MOV A,#0AH XCH A,B DIV AB ADD A,#30H INC LCD_X PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B

25、,LCD_X ADD A,#30H LCALL LCDP2 RETSHOW_DIG2L: MOV B,#100 DIV AB MOV A,#0AH XCH A,B DIV AB ADD A,#30H PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H LCALL LCDP2 RET;* 顯示區(qū) BCD 碼溫度值刷新子程序 *DISPBCD: MOV A,TEMPLC ANL A,#0FH MOV 70H,A ;小數(shù)位 MOV A,TEMPLC SWAP A ANL A,#0FH MOV 71

26、H,A ;個(gè)位 MOV A,TEMPHC ANL A,#0FH MOV 72H,A ;十位 MOV A,TEMPHC SWAP A ANL A,#0FH MOV 73H,A ;百位DISPBCD2: RET;* LCD 顯示數(shù)據(jù)處理子程序 *CONV: MOV A,73H ;加載百位數(shù)據(jù) MOV LCD_X,#6 ;設(shè)置位置 CJNE A,#1,CONV1 JMP CONV2CONV1: CJNE A,#0BH,CONV11 MOV A,#"-" ;"-"號顯示 JMP CONV111CONV11: MOV A,#" " ;"

27、;+"號不顯示CONV111: MOV B,LCD_X LCALL LCDP2 JMP CONV3CONV2: LCALL SHOW_DIG2 ;顯示數(shù)據(jù)CONV3: INC LCD_X MOV A,72H ;十位 LCALL SHOW_DIG2 INC LCD_X MOV A,71H ;個(gè)位 LCALL SHOW_DIG2 INC LCD_X MOV A,#'.' MOV B,LCD_X LCALL LCDP2 MOV A,70H ;加載小數(shù)點(diǎn)位 INC LCD_X ;設(shè)置顯示位置 LCALL SHOW_DIG2 ;顯示數(shù)據(jù) RET;* 第二行顯示數(shù)字子程序 *SH

28、OW_DIG2:ADD A,#30H MOV B,LCD_X LCALL LCDP2 RET;* 第二行顯示數(shù)字子程序 *LCDP2: PUSH ACC MOV A,B ;設(shè)置顯示地址 ADD A,#0C0H ;設(shè)置LCD的第二行地址 LCALL WCOM ;寫入命令 POP ACC ;由堆棧取出A LCALL WDATA ;寫入數(shù)據(jù) RET;* 對 LCD 做初始化設(shè)置及測試*SET_LCD: CLR LCD_EN LCALL INIT_LCD ;初始化 LCD LCALL STORE_DATA ;將自定義字符存入LCD的CGRAM RET;* LCD初始化 *INIT_LCD: MOV A

29、,#38H ;2行顯示,字形5*7點(diǎn)陣 LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1 MOV A,#0CH ;開顯示,顯示光標(biāo),光標(biāo)不閃爍 LCALL WCOM LCALL DELAY1 MOV A,#01H ;清除 LCD 顯示屏 LCALL WCOM LCALL DELAY1 RET;* 清除LCD的第一行字符 *CLR_LINE1:MOV A,#80H ;設(shè)置 LCD 的第一行地址 LCALL WCOM MOV R0,#24 ;設(shè)置計(jì)數(shù)值 C1: MOV A,#' ' ;載入空格符至LCD LCALL WDATA ;輸出字符至LCD DJNZ R0,C1 ;計(jì)數(shù)結(jié)束 RET;* LCD的第一行或第二行顯示字符 *LCD_PRINT:CJNE A,#1,LINE2 ;判斷是否為第一行 LINE1: MOV A,#80H ;設(shè)置 LCD 的第一行地址 LCALL WCOM ;寫入命令 LCALL CLR_LINE ;清除該行字符數(shù)據(jù) MOV A,#80H ;設(shè)置 LCD 的第一行地址 LCALL WCOM ;寫入命令 JMP FILL LINE2: MOV A,#0C0H ;設(shè)置 LCD 的第

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論