讀取DS18B20溫度,通過LCD1602顯示出來,并輸出控制_第1頁
讀取DS18B20溫度,通過LCD1602顯示出來,并輸出控制_第2頁
讀取DS18B20溫度,通過LCD1602顯示出來,并輸出控制_第3頁
讀取DS18B20溫度,通過LCD1602顯示出來,并輸出控制_第4頁
讀取DS18B20溫度,通過LCD1602顯示出來,并輸出控制_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、電路原理圖程序1.main.c#include<reg51.h>#include"lcd.h"#include"temp.h"void LcdDisplay(int);sbit K1=P20;sbit K2=P21;sbit K3=P22;sbit K4=P23;extern int th=20;extern int tl=-10;sbit beep=P10;void main() LcdInit(); LcdWriteCom(0xc7);LcdWriteData('C'); while(1)if(K1=0)Delay1ms(

2、500);if(K1=0);th+;if(K2=0)Delay1ms(500);if(K2=0);th-;if(K3=0)Delay1ms(500);if(K3=0);tl+;if(K4=0)Delay1ms(500);if(K4=0);tl-;LcdDisplay(Ds18b20ReadTemp();void LcdDisplay(int temp) int i,tt,rr,mm; unsigned char datas = 0, 0, 0, 0,datas1 = 0, 0, 0,datas2 = 0, 0, 0;float tp; if(temp< 0) LcdWriteCom(0x

3、c0); LcdWriteData('-'); i=1;temp=temp-1;temp=temp;tp=temp;temp=tp*0.0625*10+0.5;mm=-temp; else LcdWriteCom(0xc0); LcdWriteData('+'); tp=temp;temp=tp*0.0625*10+0.5;mm=temp;datas0 = temp / 1000;datas1 = temp % 1000 / 100;datas2 = temp % 100 / 10;datas3 = temp% 10;if(th < 0) LcdWrite

4、Com(0x89); LcdWriteData('-'); tt=-th; else LcdWriteCom(0x89); LcdWriteData('+'); tt=th;datas10 = tt / 100;datas11 = tt% 100 / 10;datas12 = tt % 10;LcdWriteCom(0x87); LcdWriteData('H');LcdWriteCom(0x88); LcdWriteData(':');LcdWriteCom(0x8a); LcdWriteData('0'+dat

5、as10);LcdWriteCom(0x8b); LcdWriteData('0'+datas11);LcdWriteCom(0x8c); LcdWriteData('0'+datas12);if(tl < 0) LcdWriteCom(0x90); LcdWriteData('-'); rr=-tl; else LcdWriteCom(0x90); LcdWriteData('+'); rr=tl;datas20 = rr / 100;datas21 = rr% 100 / 10;datas22 = rr % 10;Lcd

6、WriteCom(0x8e); LcdWriteData('L');LcdWriteCom(0x8f); LcdWriteData(':');LcdWriteCom(0x91); LcdWriteData('0'+datas20);LcdWriteCom(0x92); LcdWriteData('0'+datas21);LcdWriteCom(0x93); LcdWriteData('0'+datas22);if(mm>=(th*10)|mm<=(tl*10)|th<=tl)beep=0;else

7、beep=1; LcdWriteCom(0x80); LcdWriteData('T'); LcdWriteCom(0x81); LcdWriteData('A'); LcdWriteCom(0x82); LcdWriteData('I'); LcdWriteData(' '); LcdWriteCom(0x84); LcdWriteData('A'); LcdWriteCom(0x85);LcdWriteData('N'); LcdWriteCom(0xc1); LcdWriteData('

8、;0'+datas0); LcdWriteCom(0xc2); LcdWriteData('0'+datas1); LcdWriteCom(0xc3);LcdWriteData('0'+datas2); LcdWriteCom(0xc4);LcdWriteData('.'); LcdWriteCom(0xc5);LcdWriteData('0'+datas3); LcdWriteCom(0xc6);LcdWriteData('"'); 2.lcd.h#ifndef _LCD_H_#define _

9、LCD_H_/*當(dāng)使用的是4位數(shù)據(jù)傳輸?shù)臅r候定義,使用8位取消這個定義*/#define LCD1602_4PINS/*包含頭文件*/#include<reg51.h>/-重定義關(guān)鍵詞-/#ifndef uchar#define uchar unsigned char#endif#ifndef uint #define uint unsigned int#endif/*PIN口定義*/#define LCD1602_DATAPINS P0sbit LCD1602_E=P27;sbit LCD1602_RW=P25;sbit LCD1602_RS=P26;/*函數(shù)聲明*/*在51單片

10、機12MHZ時鐘下的延時函數(shù)*/void Lcd1602_Delay1ms(uint c); /誤差 0us/*LCD1602寫入8位命令子函數(shù)*/void LcdWriteCom(uchar com);/*LCD1602寫入8位數(shù)據(jù)子函數(shù)*/void LcdWriteData(uchar dat);/*LCD1602初始化子程序*/void LcdInit(); #endif3.temp.h#ifndef _TEMP_H_#define _TEMP_H_#include<reg51.h>sbit DSPORT=P37;void Delay1ms(unsigned int );un

11、signed char Ds18b20Init();void Ds18b20WriteByte(unsigned char com);unsigned char Ds18b20ReadByte();void Ds18b20ChangTemp();void Ds18b20ReadTempCom();int Ds18b20ReadTemp();#endif4.lcd.c#include"lcd.h"void Lcd1602_Delay1ms(uint c) /延時 uchar a,b;for (; c>0; c-) for (b=19;b>0;b-) for(a=1

12、;a>0;a-); #ifndef LCD1602_4PINS /當(dāng)沒有定義這個LCD1602_4PINS時void LcdWriteCom(uchar com) /寫入一個字節(jié)命令LCD1602_E = 0; LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DATAPINS = com; Lcd1602_Delay1ms(1);LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0;#else void LcdWriteCom(uchar com) LCD1602_E = 0; LCD1602_RS = 0;

13、LCD1602_RW = 0; LCD1602_DATAPINS = com;/由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(1);LCD1602_E = 1; Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = com << 4; /發(fā)送低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif #ifndef LCD1602_4PINS void LcdWriteData(uchar

14、dat)/寫入一個字節(jié)數(shù)據(jù)LCD1602_E = 0;LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1); LCD1602_E = 1;Lcd1602_Delay1ms(5); LCD1602_E = 0;#elsevoid LcdWriteData(uchar dat)LCD1602_E = 0; LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DATAPINS = dat;/由于4位的接線是接到P0口的高四位,所以傳送高四位不用改Lcd1602_Delay1ms(

15、1);LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;LCD1602_DATAPINS = dat << 4; /寫入低四位Lcd1602_Delay1ms(1);LCD1602_E = 1; /寫入時序Lcd1602_Delay1ms(5);LCD1602_E = 0;#endif #ifndefLCD1602_4PINSvoid LcdInit() /LCD初始化子程序 LcdWriteCom(0x38); LcdWriteCom(0x0c); LcdWriteCom(0x06); LcdWriteCom(0x01);

16、 LcdWriteCom(0x80); #elsevoid LcdInit() LcdWriteCom(0x32); LcdWriteCom(0x28); LcdWriteCom(0x0c); LcdWriteCom(0x06); LcdWriteCom(0x01); LcdWriteCom(0x80); #endif5.temp.c#include"temp.h"void Delay1ms(unsigned int y) /延時unsigned int x;for(y;y>0;y-)for(x=110;x>0;x-);unsigned char Ds18b20

17、Init()/初始化unsigned int i;DSPORT=0;i=70;while(i-);DSPORT=1;i=0;while(DSPORT)i+;if(i>5000)return 0;/失敗return 1;/成功void Ds18b20WriteByte(unsigned char dat) /寫字節(jié)unsigned int i,j;for(j=0;j<8;j+)DSPORT=0;/每寫入一位數(shù)據(jù)之前先把總線拉低1us(數(shù)據(jù)手冊上模糊)i+;DSPORT=dat&0x01; i=6;while(i-); DSPORT=1;dat>>=1;unsigned char Ds18b20ReadByte()unsigned char byte,bi;unsigned int i,j;for(j=8;j>0;j-)DSPORT=0;i+;DSPORT=1;i+;i+;bi=DSPORT; byte=(byte>>1)|(bi<<7); i=4;while(i-);return byte;void Ds18b20ChangTemp() /溫度轉(zhuǎn)換Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc); Ds18b20WriteByte(0x44); void Ds18b20R

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論