久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
自己做的基于單片機(jī)的溫度檢測(cè)系統(tǒng)
[打印本頁(yè)]
作者:
xiaojuan
時(shí)間:
2014-10-13 14:57
標(biāo)題:
自己做的基于單片機(jī)的溫度檢測(cè)系統(tǒng)
該溫度檢測(cè)系統(tǒng)可直接測(cè)溫,測(cè)溫范圍為-125-+125度,還可以時(shí)時(shí)對(duì)不同時(shí)刻的溫度進(jìn)行手動(dòng)采樣,待采樣完成后,可以將采樣溫度一一讀出,也可進(jìn)行定時(shí)采樣,例如間隔1秒采樣溫度一次,采樣開始有指示燈亮,采樣結(jié)束指示燈滅,停止采樣,一一讀出數(shù)據(jù)。
源程序
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P1^1;
sbit lcdrw=P1^2;
sbit lcden=P1^3;
sbit DQ = P3^7;
sbit JL=P3^0;
sbit DT=P3^1;
sbit DS=P3^2;
sbit LED=P3^3;
uchar code table0[]=" RUI LOVE YING";
uchar unm,temp,temp1,temp2,temp3,kk=0,s,tt=0;
uchar temp00,temp01,temp02,temp03,temp04,temp05,temp06,temp07,temp08,temp09;
uchar xs00,xs01,xs02,xs03,xs04,xs05,xs06,xs07,xs08,xs09;
/*************精確延時(shí)函數(shù)*****************/
void delay(unsigned char i)
{
while(--i);
}
/******************************************
此延時(shí)函數(shù)針對(duì)的是12Mhz的晶振
delay(0):延時(shí)518us 誤差:518-2*256=6
delay(1):延時(shí)7us (原帖寫"5us"是錯(cuò)的)
delay(10):延時(shí)25us 誤差:25-20=5
delay(20):延時(shí)45us 誤差:45-40=5
delay(100):延時(shí)205us 誤差:205-200=5
delay(200):延時(shí)405us 誤差:405-400=5
*******************************************/
/*****************DS18B20******************/
void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command
{
DQ = 1; //DQ復(fù)位,不要也可行。
delay(1); //稍做延時(shí)
DQ = 0; //單片機(jī)拉低總線
delay(250); //精確延時(shí),維持至少480us
DQ = 1; //釋放總線,即拉高了總線
delay(100); //此處延時(shí)有足夠,確保能讓DS18B20發(fā)出存在脈沖。
}
uchar Read_One_Byte() //讀取一個(gè)字節(jié)的數(shù)據(jù)read a byte date
//讀數(shù)據(jù)時(shí),數(shù)據(jù)以字節(jié)的最低有效位先從總線移出
{
uchar i = 0;
uchar dat = 0;
for(i=8;i>0;i--)
{
DQ = 0; //將總線拉低,要在1us之后釋放總線
//單片機(jī)要在此下降沿后的15us內(nèi)讀數(shù)據(jù)才會(huì)有效。
_nop_(); //至少維持了1us,表示讀時(shí)序開始
dat >>= 1; //讓從總線上讀到的位數(shù)據(jù),依次從高位移動(dòng)到低位。
DQ = 1; //釋放總線,此后DS18B20會(huì)控制總線,把數(shù)據(jù)傳輸?shù)娇偩上
delay(1); //延時(shí)7us,此處參照推薦的讀時(shí)序圖,盡量把控制器采樣時(shí)間放到讀時(shí)序后的15us內(nèi)的最后部分
if(DQ) //控制器進(jìn)行采樣
{
dat |= 0x80; //若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進(jìn)行處理,保持為0
}
delay(10); //此延時(shí)不能少,確保讀時(shí)序的長(zhǎng)度60us。
}
return (dat);
}
void Write_One_Byte(uchar dat)
{
uchar i = 0;
for(i=8;i>0;i--)
{
DQ = 0; //拉低總線
_nop_(); //至少維持了1us,表示寫時(shí)序(包括寫0時(shí)序或?qū)?時(shí)序)開始
DQ = dat&0x01; //從字節(jié)的最低位開始傳輸
//指令dat的最低位賦予給總線,必須在拉低總線后的15us內(nèi),
//因?yàn)?5us后DS18B20會(huì)對(duì)總線采樣。
delay(10); //必須讓寫時(shí)序持續(xù)至少60us
DQ = 1; //寫完后,必須釋放總線,
dat >>= 1;
delay(1);
}
}
uint Get_Tmp() //獲取溫度get the temperature
{
uchar a,b;
Init_Ds18b20(); //初始化
Write_One_Byte(0xcc); //忽略ROM指令
Write_One_Byte(0x44); //溫度轉(zhuǎn)換指令
Init_Ds18b20(); //初始化
Write_One_Byte(0xcc); //忽略ROM指令
Write_One_Byte(0xbe); //讀暫存器指令
a = Read_One_Byte(); //讀取到的第一個(gè)字節(jié)為溫度LSB
b = Read_One_Byte(); //讀取到的第一個(gè)字節(jié)為溫度MSB
temp1 = b<<4;
temp3=(a&0xf0)>>4;
temp=temp1+temp3;
temp2=(a&0x0f)*0.0625*100;
return temp;
}
void delay1(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}
void writen_com(uchar com)
{
lcdrs=0;
P2=com;
delay1(5);
lcden=1;
delay1(5);
lcden=0;
}
void writen_date(uchar date)
{
lcdrs=1;
P2=date;
delay1(5);
lcden=1;
delay1(5);
lcden=0;
}
void writen_sfm(uchar add,uchar date)
{
uchar bai,shi,ge;
bai=date/100;
shi=date%100/10;
ge=date%10;
writen_com(0x80+0x40+add);
writen_date(0x30+bai);
writen_date(0x30+shi);
writen_date(0x30+ge);
}
void writen_sfm1(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
writen_com(0x80+0x40+add);
writen_date(0x30+shi);
writen_date(0x30+ge);
}
void main();
void xianshi_temp()
{
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('0');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs00);
writen_sfm(2,temp00);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('1');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs01);
writen_sfm(2,temp01);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('2');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs02);
writen_sfm(2,temp02);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('3');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs03);
writen_sfm(2,temp03);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('4');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs04);
writen_sfm(2,temp04);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('5');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs05);
writen_sfm(2,temp05);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('6');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs06);
writen_sfm(2,temp06);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('7');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs07);
writen_sfm(2,temp07);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('8');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs08);
writen_sfm(2,temp08);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
writen_com(0x01);
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
writen_date('9');
writen_com(0x80+0x40+0x05);
writen_date('.');
while(DT)
{
writen_sfm1(6,xs09);
writen_sfm(2,temp09);
}
if(DT ==0)
{
delay(5);
if(DT==0)
{
while(!DT);
s=0;
main();
}}}}}}}}}}}}}}}}}}}}}}
}
void record_temp()
{
if(JL == 0)
{
delay(5);
if(JL == 0)
{
while(!JL);
switch(s)
{
case 0:temp00=Get_Tmp(),xs00=temp2;break;
case 1:temp01=Get_Tmp(),xs01=temp2;break;
case 2:temp02=Get_Tmp(),xs02=temp2;break;
case 3:temp03=Get_Tmp(),xs03=temp2;break;
case 4:temp04=Get_Tmp(),xs04=temp2;break;
case 5:temp05=Get_Tmp(),xs05=temp2;break;
case 6:temp06=Get_Tmp(),xs06=temp2;break;
case 7:temp07=Get_Tmp(),xs07=temp2;break;
case 8:temp08=Get_Tmp(),xs08=temp2;break;
case 9:temp09=Get_Tmp(),xs09=temp2;break;
}
s++;
if(s==10)
s=0;
}
}
}
void init()
{
temp00=temp01=temp02=temp03=temp04=temp05=temp06=temp07=temp08=temp09=0;
xs00=xs01=xs02=xs03=xs04=xs05=xs06=xs07=xs08=xs09=0;
s=0;
LED=1;
lcden=0;
lcdrw=0;
writen_com(0x38);
writen_com(0x0c);
writen_com(0x06);
writen_com(0x80);
for(unm=0;unm<14;unm++)
{
writen_date(table0[unm]);
}
writen_com(0x80+0x40+0x05);
writen_date('.');
}
void main()
{TMOD=0X01; //定時(shí)器工作方式設(shè)定
TH0=(65536-50000)/256; //設(shè)定定時(shí)初值50MS
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //開定時(shí)器0中斷
TR0=1;
init();
while(1)
{
xianshi_temp();
record_temp();
writen_sfm1(6,temp2);
writen_sfm(2,Get_Tmp());
}
}
void time0() interrupt 1 //定時(shí)器0
{
if(DS==0)
{
delay(5);
if(DS==0)
{
LED=0;
if(tt==4)
{
tt=0;
switch(s)
{
case 0:temp00=Get_Tmp(),xs00=temp2;break;
case 1:temp01=Get_Tmp(),xs01=temp2;break;
case 2:temp02=Get_Tmp(),xs02=temp2;break;
case 3:temp03=Get_Tmp(),xs03=temp2;break;
case 4:temp04=Get_Tmp(),xs04=temp2;break;
case 5:temp05=Get_Tmp(),xs05=temp2;break;
case 6:temp06=Get_Tmp(),xs06=temp2;break;
case 7:temp07=Get_Tmp(),xs07=temp2;break;
case 8:temp08=Get_Tmp(),xs08=temp2;break;
case 9:temp09=Get_Tmp(),xs09=temp2;break;
}
s++;
if(s==10)
{s=0;
LED=1;
while(!DS);
}}}}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
Get_Tmp();
tt++;
}
復(fù)制代碼
作者:
bjk3388
時(shí)間:
2015-5-3 22:34
原理圖???
作者:
leichyi
時(shí)間:
2015-5-16 16:52
無圖無真相
作者:
13838851042
時(shí)間:
2015-5-16 18:26
學(xué)習(xí)學(xué)習(xí),謝謝分享。
作者:
龍之骨
時(shí)間:
2015-5-17 00:49
原理圖呢
作者:
眾生作廢
時(shí)間:
2015-5-17 09:40
該溫度檢測(cè)系統(tǒng)可直接測(cè)溫,測(cè)溫范圍為-125-+125度,還可以時(shí)時(shí)對(duì)不同時(shí)刻的溫度進(jìn)行手動(dòng)采樣,待采樣完成后,可以將采樣溫度一一讀出,也可進(jìn)行定時(shí)采樣,例如間隔1秒采樣溫度一次,采樣開始有指示燈亮,采樣結(jié)束指示燈滅,停止采樣,一一讀出數(shù)據(jù)。
作者:
around
時(shí)間:
2015-5-18 23:57
無圖無真相
作者:
hebut332678
時(shí)間:
2016-5-6 11:46
我試試行不行
作者:
洛克人
時(shí)間:
2019-10-4 22:17
怎么不附上實(shí)物圖啊??
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国内精品久久精品
|
涩涩视频在线观看
|
视频一区二区在线
|
国产四虎
|
日韩视频精品在线
|
久久99视频
|
亚洲精品视频在线看
|
国产线视频精品免费观看视频
|
特黄特色大片免费视频观看
|
日本aⅴ中文字幕
|
亚洲少妇综合网
|
日本免费一区二区三区
|
365夜爽爽欧美性午夜免费视频
|
久国产
|
久草网站
|
日韩欧美一区二区三区免费观看
|
久久久久久国产精品免费免费狐狸
|
视频一区二区中文字幕
|
天天搞天天操
|
国产精品theporn
|
日韩欧美视频在线
|
日韩中文字幕免费在线
|
国产乱码精品1区2区3区
|
91精品国产一区二区在线观看
|
最新国产精品
|
久久国产精品一区二区三区
|
国产精品揄拍一区二区久久国内亚洲精
|
久久av一区二区
|
超碰激情
|
成人福利网站
|
国产日韩在线观看一区
|
久久久夜夜夜
|
天天干夜夜操
|
在线2区
|
一区在线视频
|
精品国产乱码久久久久久牛牛
|
欧美一卡二卡在线观看
|
国产高清视频在线观看播放
|
亚洲三区视频
|
精品一区二区在线观看
|
久久久久久亚洲
|