版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本程序為ds18b20的多路溫度采集程序,是我自己參考其他程序后改寫而成,可顯示4路正負溫度值,并有上下限溫度報警(聲音、燈光報警)。親測,更改端口即可使用。(主要器件:51單片機,ds18b20,lcd顯示器)附有proteus仿真圖,及序列號采集程序/*上限62度 下限-20度*/#include#define uchar unsigned char#define uint unsigned intsbit ds=P11;sbit rs=P14;sbit e=P16;sbit sp=P10;sbit d1=P12;sbit d2=P13;uchar lcdrom48=0x28,0x30,0
2、xc5,0xb8,0x00,0x00,0x00,0x8e, 0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9, 0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0, 0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7;unsigned char code table0=TEMPERARTURE:U ;unsigned char code table1=0123456789ABCDEF;int f4;int tvalue;float ftvalue;uint warnl=320;uint warnh=992;/
3、*lcd程序*/void delayms(uint ms)/延時uint i,j;for(i=ms;i0;i-)for(j=110;j0;j-);void wrcom(uchar com)/寫指令delayms(1);rs=0;P3=com;delayms(1);e=1;delayms(1);e=0;void wrdat(uchar dat)/寫數據rs=1;e=0;P3=dat;delayms(5);e=1;delayms(5);e=0;void lcdinit()/初始化lcddelayms(15);wrcom(0x38);delayms(5);wrcom(0x0c);delayms(5)
4、;wrcom(0x06);delayms(5);wrcom(0x01);delayms(5);void display(uchar *p)/顯示while(*p!=0)wrdat(*p);p+;delayms(1);displayinit()/初始化顯示lcdinit();wrcom(0x80);display(table0);/*ds18b20程序*/void dsrst()/ds18b20復位uint i;ds=0;i=103;while(i0)i-;ds=1;i=4;while(i0)i-;bit dsrd0()/讀一位數據uint i;bit dat;ds=0;i+;ds=1;i+;i
5、+;dat=ds;i=8;while(i0)i-;return(dat);uchar dsrd()/讀1個字節(jié)數據uchar i,j,dat;dat=0;for(i=8;i0;i-)j=dsrd0();dat=(j1);return(dat);void dswr(uchar dat)/寫數據uint i;uchar j;bit testb;for(j=8;j0;j-)testb=dat&0x01;dat=dat1;if(testb)ds=0;i+;i+;ds=1;i=8;while(i0)i-;elseds=0;i=8;while(i0)i-;ds=1;i+;i+;void tmstart()
6、/初始化ds18b20sp=1;d1=1;d2=1;dsrst();delayms(1);dswr(0xcc);dswr(0x44);void read_dealtemp()/讀取并處理溫度uchar i,j,t;uchar a,b;for(j=0;j4;j+)dsrst();delayms(1);dswr(0x55);for(i=0;i8;i+)dswr(lcdromji);/發(fā)送64位序列號dswr(0xbe);a=dsrd();b=dsrd();tvalue=b;tvalue=8;tvalue=tvalue|a;if(tvaluewarnl)d2=0;sp=0;elsed2=1;sp=1
7、;elsed2=1;wrcom(0xc0);wrdat( );if(tvaluewarnh)d1=0;sp=0;elsed1=1;sp=1;if(j=0)wrcom(0x8e); wrdat(2);if(j=1)wrcom(0x8e);wrdat(3);if(j=2)wrcom(0x8e); wrdat(4);if(j=3)wrcom(0x8e); wrdat(5);ftvalue=tvalue*0.0625;tvalue=ftvalue*10+0.5;ftvalue=ftvalue+0.05;fj=tvalue;/溫度擴大十倍,精確到一位小數tvalue=fj;t=tvalue/1000;w
8、rcom(0x80+0x41);wrdat(table1t);/顯示百位 t=tvalue%1000/100;wrdat(table1t);/顯示十位t=tvalue%100/10;wrdat(table1t);/顯示個位wrdat(0x2e); /顯示小數點兒t=tvalue%10/1;wrdat(table1t);/顯示小數位 delayms(5000);/*主函數*/void main() d1=1;d2=1;sp=1;displayinit();/初始化顯示 while(1) tmstart();/初始化 read_dealtemp();/讀取溫度 /*序列號讀取程序*/#includ
9、e #define uchar unsigned char#define uint unsigned intsbit DQ = P11; /溫度傳感器信號線sbit rs = P14; /LCD數據/命令選擇端(H/L)位聲明sbit lcden = P16; /LCD使能信號端位聲明void delay(uint z); /延時函數void DS18B20_Reset(void); /DQ18B20復位,初始化函數bit DS18B20_Readbit(void); /讀1位數據函數uchar DS18B20_ReadByte(void); /讀1個字節(jié)數據函數void DS18B20_Wr
10、iteByte(uchar dat); /向DQ18B20寫一個字節(jié)數據函數void LCD_WriteCom(uchar com); /1602液晶命令寫入函數void LCD_WriteData(uchar dat); /1602液晶數據寫入函數void LCD_Init(); /LCD初始化函數void Display18B20Rom(char Rom); /顯示18B20序列號函數/*/* 主函數 */*/void main() uchar a,b,c,d,e,f,g,h; LCD_Init(); DS18B20_Reset(); delay(1); DS18B20_WriteByte
11、(0x33); delay(1); a = DS18B20_ReadByte(); b = DS18B20_ReadByte(); c = DS18B20_ReadByte(); d = DS18B20_ReadByte(); e = DS18B20_ReadByte(); f = DS18B20_ReadByte(); g = DS18B20_ReadByte(); h = DS18B20_ReadByte(); LCD_WriteCom(0x80+0x40); Display18B20Rom(h); Display18B20Rom(g); Display18B20Rom(f); Displ
12、ay18B20Rom(e); Display18B20Rom(d); Display18B20Rom(c); Display18B20Rom(b); Display18B20Rom(a); while(1);/*/* 延時函數:void delay() */* 功能:延時函數 */*/void delay(uint z)/延時函數 uint x,y; for( x = z; x 0; x- ) for( y = 110; y 0; y- );/*/* DS18B20函數:void DS18B20_Reset() */* 功能:復位18B20 */*/void DS18B20_Reset(voi
13、d)/DQ18B20復位,初始化函數 uint i; DQ = 0; i = 103; while( i 0 ) i-; DQ = 1; i = 4; while( i 0 ) i-;/*/* DS18B20函數:void DS18B20_Readbit() */* 功能:讀1個字節(jié)數據函數 */*/bit DS18B20_Readbit(void) /讀1位數據函數 uint i; bit dat; DQ = 0; i+; /i+起延時作用 DQ = 1; i+; i+; dat = DQ; i = 8; while( i 0 )i-; return( dat );/*/* DS18B20函
14、數:void DS18B20_ReadByte() */* 功能:讀1個字節(jié)數據函數 */*/uchar DS18B20_ReadByte(void) /讀1個字節(jié)數據函數 uchar i,j,dat; dat = 0; for( i = 1; i = 8; i+ ) j = DS18B20_Readbit(); dat = ( j 1 ); return(dat);/*/* DS18B20函數:void DS18B20_WriteByte() */* 功能:向DQ18B20寫一個字節(jié)數據函數 */*/void DS18B20_WriteByte(uchar dat) /向DQ18B20寫一個
15、字節(jié)數據函數 uint i; uchar j; bit testb; for( j=1; j1; if(testb) /寫1 DQ = 0; i+;i+; DQ = 1; i = 8;while(i0)i-; else DQ = 0; /寫0 i = 8;while(i0)i-; DQ = 1; i+;i+; /*/* LCD函數:void LCD_WriteCom() */* 功能:向LCD寫入命令 */*/void LCD_WriteCom(uchar com) rs = 0; P3= com; delay(5); lcden = 0; delay(5); lcden = 1; delay
16、(5); lcden = 0;/*/* LCD函數:void LCD_WriteData(uchar dat) */* 功能:向LCD寫入數據 */*/void LCD_WriteData(uchar dat) rs = 1; /選擇LCD為寫入數據狀態(tài) lcden = 0; P3= dat; /將待寫入數據放到總線上 delay(5); lcden = 1; /給LCD使能端一個脈沖 delay(5); /信號將之前放到總線上 lcden = 0; /的數據寫入LCD delay(5);/*/* LCD函數:void LCD_Init() */* 功能:初始化LCD,設定LCD的初始狀態(tài) */*/void LCD_Init() LCD_WriteCom(0x38); /LCD顯示模式設定 delay(15); LCD_WriteCom(0x08); /關閉LCD顯示 delay(3); LCD_WriteCom(0x01); /LCD顯示清屏 delay(3); LCD_WriteCom(0x06); /設定光標地址指針為自動加1 delay(3); LCD_Writ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025企業(yè)承包經營(經營責任制)合同
- 正規(guī)合同書范本
- 汽車公路運輸委托合同
- 汽車租賃公司合作合同
- 2025合同管理考核實施細則
- 2025中介擔保合同范文
- 2025橘皮書fidic設計建造與交鑰匙工程合同條
- 2025北京市國有土地使用權出讓合同
- 2025年鐵路運輸服務項目規(guī)劃申請報告模范
- 2025合同模板購車合同范本
- 2025年銷售部年度工作計劃
- 2024年蘇州工業(yè)園區(qū)服務外包職業(yè)學院高職單招職業(yè)適應性測試歷年參考題庫含答案解析
- ESG表現對企業(yè)財務績效的影響研究
- DB3713T 340-2024 實景三維數據接口及服務發(fā)布技術規(guī)范
- 八年級生物開學摸底考(長沙專用)(考試版)
- 車間空調崗位送風方案
- 使用錯誤評估報告(可用性工程)模版
- 初一年級班主任上學期工作總結
- 2023-2024年同等學力經濟學綜合真題及參考答案
- 農村集體土地使用權轉讓協(xié)議
- 課件四露天礦山安全知識培訓
評論
0/150
提交評論