當前位置:編程學習大全網 - 編程語言 - 高精度編程

高精度編程

/* * * * * * * * * * ds 18b 20子程序* * * * * * * * * * * * * * * * * * * *

/* * * * * * * * * DS18B20延遲子功能(晶體振蕩器12Mhz) * * * * * */

# include & ltreg 51 . h & gt;

sbit dq=p1^2;

#定義uchar無符號字符

void delay_18B20(無符號整數I)

{

while(I-);

}

/* * * * * * * * * * ds 18b 20初始化功能* * * * * * * * * * * * * * * * * *

void Init_DS18B20(void)

{

無符號字符x = 0;

DQ = 1;//DQ復位

delay _ 18b 20(8);//有點延遲

DQ = 0;//單片機拉低DQ。

delay _ 18b 20(80);//精確延時大於480us。

DQ = 1;//拉高總線

delay _ 18b 20(4);

x = DQ;//稍微延遲後,如果x=0,初始化成功;如果x=1,初始化失敗。

delay _ 18b 20(20);

}

/* * * * * * * * DS 18b 20讀取壹個字節* * * * * * * * * * *

無符號字符ReadOneChar(void)

{

uchar I = 0;

uchar dat = 0;

for(I = 8;我& gt0;我-)

{

DQ = 0;//給出脈沖信號

dat & gt& gt=1;

DQ = 1;//給出脈沖信號

if(DQ)

dat | = 0x80

delay _ 18b 20(4);

}

return(dat);

}

/* * * * * * * * * * ds 18b 20寫壹個字節* * * * * * * * * * * *

void WriteOneChar(uchar dat)

{

無符號字符I = 0;

for(I = 8;我& gt0;我-)

{

DQ = 0;

DQ =日期與時間;0x 01;

delay _ 18b 20(5);

DQ = 1;

dat & gt& gt=1;

}

}

/* * * * * * * * * * * *讀取ds18b20的當前溫度* * * * * * * *

讀取溫度(void)

{ float val

uchar temp_value,value;

無符號字符a = 0;

無符號字符b = 0;

無符號字符t = 0;

init _ ds 18b 20();

WriteOneChar(0x cc);//跳過讀取序列號和列號。

WriteOneChar(0x 44);//開始溫度轉換

delay _ 18b 20(100);//這個消息非常重要

init _ ds 18b 20();

WriteOneChar(0x cc);//跳過讀取序列號和列號。

WriteOneChar(0x be);//讀取溫度寄存器(* * *可以讀取9個寄存器),前兩個是溫度。

delay _ 18b 20(100);

a = ReadOneChar();//讀取低溫值

b = ReadOneChar();//讀取高溫值

temp_value=b<& lt4;

temp _ value+=(a & amp;0xf0)>& gt4;

價值= a & amp0x0f

val =臨時值+值;

返回(val);

}

以上是DS18B20的驅動。然後直接在主程序中調用函數。

以上是主程序中的調用,看看關於溫度的就知道了。

#包含" reg51.h "

#包含“18b20.h”

#定義uchar無符號字符

#定義uint無符號整數

uchar碼表[]= "歡迎光臨";//初始化日期和星期

uchar碼表1[]= "我們的系統!";//初始化時間

uchar代碼table2[]= "溫度為:";//初始化時間

//下面三個是定義LCD的管腳。

sbit lcden=p2^2;

sbit lcdwrite=p2^1;

sbit lcdrs=p2^0;

夏爾·杜文;

//延遲程序

無效延遲(單位z)

{ uint x,y;

for(x = z;x & gt0;x -)

for(y = 110;y & gt0;y-);

}

//lcd的寫指令

void write_com(uchar com)

{

LCD RS = 0;

LC den = 0;

P0 = com

延遲(5);

LC den = 1;

延遲(5);

LC den = 0;

}

//寫入//lcd的數據

void write_data(uchar da)

{ lcdrs = 1;

LC den = 0;

P0 = da

延遲(5);

LC den = 1;

延遲(5);

LC den = 0;

}

//初始化

void初始化()

{

uchar編號;

LCD write = 0;

LC den = 0;

write _ com(0x 38);//16*2顯示,5*7點陣,8位數據

write _ com(0x0c);//打開和關閉顯示光標。

write _ com(0x 06);//移動光標

write _ com(0x 01);//清除LCD的顯示內容。

write _ com(0x 80);

for(num = 0;num & lt10;num++)

{

write _ data(table[num]);

延遲(5);

}

write _ com(0x 80+0x 40);

for(num = 0;num & lt11;num++)

{

write _ data(table 1[num]);

延遲(5);

}

}

無效寫入_杜文(uchar add,char da)

{

烏恰爾史、葛;

石= da/10;

ge = da % 10;

write _ com(0x 80+0x 40+add);

write _ data(0x 30+Shi);

write _ data(0x 30+ge);

}

//主函數

void main()

{

uchar編號;

init();

延遲(2000年);

延遲(2000年);

延遲(2000年);

write _ com(0x 01);//清除LCD的顯示內容。

while(1)

{

write _ com(0x 80);

for(num = 0;num & lt15;num++)

{

write _ data(table 2[num]);

延遲(5);

}

杜文= ReadTemp();

寫_杜文(2,杜文);

}

}

  • 上一篇:邏輯回歸解決什麽問題
  • 下一篇:什麽是矢量圖,圖片都有哪些格式?
  • copyright 2024編程學習大全網