LCD1602和DS18B20顯示溫度_第1頁(yè)
LCD1602和DS18B20顯示溫度_第2頁(yè)
LCD1602和DS18B20顯示溫度_第3頁(yè)
LCD1602和DS18B20顯示溫度_第4頁(yè)
LCD1602和DS18B20顯示溫度_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、您研究一下以下這個(gè)程序,然后就可以加上時(shí)間功能.多做一點(diǎn)就能多學(xué)一點(diǎn).開機(jī)時(shí)對(duì)DS18B20進(jìn)行檢測(cè),如果DS18B20檢測(cè)不正常,LCD1602顯示: DS18B20 ERROR PLEASE CHECK 蜂鳴器報(bào)警。DS18B20檢測(cè)正常,LCD1602顯示: DS18B20 OK TEMP: 100.8如果溫度值高位為0,將不顯示出來(lái)。你可以通過(guò)拔插DS18B20查看DS18B20的檢測(cè)功能。/* ME300B單片機(jī)開發(fā)系統(tǒng)演示程序 - DS18B20溫度顯示 */* LCD1602顯示 */* 作者: gguoqing */*Copyright(C)偉納電子 www.willar.co

2、m All Rights Reserved */*/#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P33 ; /定義DS18B20端口DQ sbit BEEP=P37 ; /蜂鳴器驅(qū)動(dòng)線bit presence ;sbit LCD_RS = P20 ; sbit LCD_RW = P21 ;sbit LCD_EN = P22 ;uchar code cdis1 = DS18B20 OK ;uchar code cdis2 = TEMP: . C ;uchar code cdis3

3、= DS18B20 ERR0R ;uchar code cdis4 = PLEASE CHECK ;unsigned char data temp_data2 = 0x00,0x00 ;unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00 ;unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ;void beep() ; unsigned char code mytab8

4、= 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ;#define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ;/*/void delay1(int ms)unsigned char y ; while(ms-) for(y = 0 ; y250 ; y+) _nop_() ; _nop_() ; _nop_() ; _nop_() ; /*/*檢查L(zhǎng)CD忙狀態(tài) */*lcd_busy為1時(shí),忙,等待。lcd-busy為0時(shí),閑,可寫指令與數(shù)據(jù)。 */*/ bit lcd_busy() bit resu

5、lt ; LCD_RS = 0 ; LCD_RW = 1 ; LCD_EN = 1 ; delayNOP() ; result = (bit)(P0&0x80) ; LCD_EN = 0 ; return(result) ; /*寫指令數(shù)據(jù)到LCD */*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */*/void lcd_wcmd(uchar cmd) while(lcd_busy() ; LCD_RS = 0 ; LCD_RW = 0 ; LCD_EN = 0 ; _nop_() ; _nop_() ; P0 = cmd ; delayNOP() ; LCD_EN = 1 ; d

6、elayNOP() ; LCD_EN = 0 ; /*/*寫顯示數(shù)據(jù)到LCD */*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */*/void lcd_wdat(uchar dat) while(lcd_busy() ; LCD_RS = 1 ; LCD_RW = 0 ; LCD_EN = 0 ; P0 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; /* LCD初始化設(shè)定 */*/void lcd_init() delay1(15) ; lcd_wcmd(0x01) ; /清除LCD的顯示內(nèi)容 lcd_wcmd

7、(0x38) ; /16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù) delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x0c) ; /顯示開,關(guān)光標(biāo) delay1(5) ; lcd_wcmd(0x06) ; /移動(dòng)光標(biāo) delay1(5) ; lcd_wcmd(0x01) ; /清除LCD的顯示內(nèi)容 delay1(5) ;/* 設(shè)定顯示位置 */*/void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80) ; /數(shù)據(jù)指針=80+地址變量/*自定義字符寫入CGRAM

8、*/*/void writetab() unsigned char i ; lcd_wcmd(0x40) ; /寫CGRAM for (i = 0 ; i 0 ; i-) DQ = 0 ; / 給脈沖信號(hào) dat = 1 ; DQ = 1 ; / 給脈沖信號(hào) if(DQ) dat |= 0x80 ; Delay(4) ; return (dat) ;/* 寫一個(gè)字節(jié) */*/WriteOneChar(unsigned char dat) unsigned char i = 0 ; for (i = 8 ; i 0 ; i-) DQ = 0 ; DQ = dat&0x01 ; Delay(5)

9、; DQ = 1 ; dat=1 ; /* 讀取溫度 */*/Read_Temperature(void) Init_DS18B20() ; WriteOneChar(0xCC) ; / 跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0x44) ; / 啟動(dòng)溫度轉(zhuǎn)換 Init_DS18B20() ; WriteOneChar(0xCC) ; /跳過(guò)讀序號(hào)列號(hào)的操作 WriteOneChar(0xBE) ; /讀取溫度寄存器 temp_data0 = ReadOneChar() ; /溫度低8位 temp_data1 = ReadOneChar() ; /溫度高8位 /* 數(shù)據(jù)轉(zhuǎn)換與溫度顯示

10、*/*/Disp_Temperature() display4=temp_data0&0x0f ; display0=ditabdisplay4+0x30 ; /查表得小數(shù)位的值 display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4) ; display3=display4/100+0x30 ; display1=display4%100 ; display2=display1/10+0x30 ; display1=display1%10+0x30 ; if(display3=0x30) /高位為0,不顯示 display3=0x20 ; if(dis

11、play2=0x30) /次高位為0,不顯示 display2=0x20 ; lcd_pos(0x48) ; lcd_wdat(display3) ; /百位數(shù)顯示 lcd_pos(0x49) ; lcd_wdat(display2) ; /十位數(shù)顯示 lcd_pos(0x4a) ; lcd_wdat(display1) ; /個(gè)位數(shù)顯示 lcd_pos(0x4c) ; lcd_wdat(display0) ; /小數(shù)位數(shù)顯示 /*/* 蜂鳴器響一聲 */*/void beep() unsigned char y ; for (y=0 ;y100 ;y+) Delay(60) ; BEEP=!

12、BEEP ; /BEEP取反 BEEP=1 ; /關(guān)閉蜂鳴器Delay(40000) ; /* DS18B20 OK 顯示菜單 */*/void Ok_Menu () uchar m ; lcd_init() ; /初始化LCD lcd_pos(0) ; /設(shè)置顯示位置為第一行的第1個(gè)字符 m = 0 ; while(cdis1m != 0) /顯示字符 lcd_wdat(cdis1m) ; m+ ; lcd_pos(0x40) ; /設(shè)置顯示位置為第二行第1個(gè)字符 m = 0 ; while(cdis2m != 0) lcd_wdat(cdis2m) ; /顯示字符 m+ ; writetab() ; /自定義字符寫入CGRAM delay1(5) ; lcd_pos(0x4d) ; lcd_wdat(0x00) ; /顯示自定義字符/* DS18B20 ERROR 顯示菜單 */*/void Error_Menu () uchar m ; lcd_init() ; /初始化LCD lcd_pos(0) ; /設(shè)置顯示位置為第一行的第1個(gè)字符 m = 0 ; while(cdis3m != 0) /顯示字符 lcd_wdat(cdis3m) ; m+ ; lcd_pos(0x40) ; /設(shè)置顯示位置為第二行第1個(gè)字符 m = 0 ; while

溫馨提示

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

評(píng)論

0/150

提交評(píng)論