亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
LCD1602顯示的單總線4路ds18B20溫度監測系統
[打印本頁]
作者:
dzdiy
時間:
2015-4-11 21:23
標題:
LCD1602顯示的單總線4路ds18B20溫度監測系統
本帖最后由 dzdiy 于 2015-4-11 21:42 編輯
LCD1602顯示的單總線4路ds18B20溫度監測系統,溫度測量范圍-55~125度,單片機使用的是AT89C51,測試測量結果由LCD1602進行顯示,溫度精確到小數點后一位。LCD1602顯示的單總線4路ds18B20溫度監測系統程序資料包中含有C語言源程序,仿真文件。LCD1602顯示的單總線4路ds18B20溫度監測系統是一個不錯的多路溫度監測系統。需要源程序的就自己下載LCD1602顯示的單總線4路ds18B20溫度監測系統程序資料,資料附后。
下載:
單總線掛接4路ds18B20溫度監測系統.zip
(271.41 KB, 下載次數: 260)
2015-4-11 21:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
相關程序:
http://www.denmoz.com/bbs/dpj-33277-1.html
部分程序源碼預覽(完整版本請下載本帖附件):
/*******************************************************************
**函數功能:ds18b20的驅動函數 **
**創建人:xingyuegu **
**創建日期:2006-7-12 **
**版本:1.0 **
**修改日期:2006-10-30 **
**版本:2.0 **
*******************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void serial_set(void);
void process(unsigned char,unsigned char);
char volatile xiaoshu_temp[5],zhen_temp[4]; //
bit flag;
bit dot_dis=1;
sbit DQ=P1^0;
//sbit DQ=P2^3;
extern unsigned char temp[5];
/*************************************************************
**功能:延時600us **
**參數:無 **
*************************************************************/
void delay600us(void)
{
uchar i;
for(i=0;i<255;i++);
}
/*************************************************************
**功能:延時60us **
**參數:無 **
*************************************************************/
void delay60us(void)
{
uchar i;
for(i=0;i<20;i++);
}
/*************************************************************
**功能:延時18us **
**參數:無 **
*************************************************************/
/*void delay15us(void)
{
uchar i;
for(i=0;i<2;i++);
}*/
/*************************************************************
**功能:復位脈沖 **
**參數:bool **
*************************************************************/
bit resetpulse(void)
{
DQ=0;
delay600us(); //延時500us
DQ=1;
delay60us(); // 延時60us
return(DQ); //讀取P1.0的狀態
}
/*************************************************************
**功能:ds18b20的初始化 **
**參數:無 **
*************************************************************/
void ds18b20_init(void)
{
while(1)
{
if(!resetpulse()) //收到ds18b20的應答信號
{
//printf("reset successful!");
//delay240us(); //延時240us
DQ=1;
delay600us(); //延時240us
break;
}
else
resetpulse(); //否則再發復位信號
}
}
/*************************************************************
**功能:向ds18b20寫命令 **
**參數:無 **
*************************************************************/
void ds18b20_writecommand(uchar command)
{
uchar i;
for(i=0;i<8;i++)
{
if((command & 0x01)==0)
{
DQ=0; //寫0
delay60us(); //延時60us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
DQ=1;
_nop_();
_nop_();
}
else //寫1
{
DQ=0;
_nop_();
_nop_(); //延時2us
DQ=1;
delay60us(); //延時60us
_nop_();
_nop_();
_nop_();
_nop_();
}
command=_cror_(command,1); // 右移1位
}
}
/*************************************************************
**功能:讀ds18b20數據 **
**參數:返回讀到的數據 **
*************************************************************/
uchar ds18b20_readdata(void)
{
uchar readdata;
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
_nop_();
_nop_();
DQ=1; //釋放總線
//delay15us(); 注意不需要
if(DQ==0) //如果讀到的是0
{
readdata=readdata&0x7f;
delay60us();
}
else //讀到的是1
{
readdata=readdata|0x80;
delay60us();
}
if(i<7)
readdata=_cror_(readdata,1);
}
return readdata;
}
/*************************************************************
**功能:溫度處理函數 **
**參數:無返回 **
*************************************************************/
void temperature_process(uchar low,uchar high)
{
uint temp1,temp2,temp3;
if(high&0x80)//判斷正負
{
flag=1;
temp3=temp3|high;
temp3=temp3&0x00ff;
temp3=temp3<<8;
temp1=temp3;
temp1=temp1|low;
temp1=(temp1^0xffff);
temp1=temp1+1; //取反加1
low=temp1&0x000f;
high=temp1>>4;
process(high,low);
}
else
{
flag=0; //zhen
temp1=high;
temp2=low;
temp1=temp1<<4;
temp2=temp2>>4;
temp3=temp1|temp2;
high=temp3;
low=low&0x0f;
process(high,low);
}
}
/*************************************************************
**功能:數值處理函數 **
**參數:無返回 **
*************************************************************/
void process(unsigned char high,unsigned char low)
{
uint temp1;
uchar i;
temp1=low*625;
xiaoshu_temp[0]=temp1/1000+'0';
//xiaoshu_temp[1]=temp1/100%10+'0';
//xiaoshu_temp[2]=temp1%100/10+'0';
//xiaoshu_temp[3]=temp1%10+'0';
xiaoshu_temp[1]='\0';
dot_dis=1;
//if(xiaoshu_temp[3]=='0')
//{
// xiaoshu_temp[3]='\0';
// if(xiaoshu_temp[2]=='0')
// {
// xiaoshu_temp[2]='\0';
// if(xiaoshu_temp[1]=='0')
// {
// xiaoshu_temp[1]='\0';
if(xiaoshu_temp[0]=='0')
{
xiaoshu_temp[0]='\0';
dot_dis=0;
}
else
dot_dis=1;
// }
// }
// }
zhen_temp[0]=high/100+'0';
zhen_temp[1]=high%100/10+'0';
zhen_temp[2]=high%10+'0';
zhen_temp[3]='\0';
for(i=0;i<2;i++)
if(zhen_temp[0]=='0')
{
zhen_temp[0]=zhen_temp[1];
zhen_temp[1]=zhen_temp[2];
zhen_temp[2]='\0';
}
else
break;
}
/****************************************/
//serial_set func
void serial_set(void)
{
SCON=0x50;
TMOD=TMOD&0x0f;
TMOD=TMOD|0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
TI=1; //用PRINTF時,TI要置1
}
/*************************************************************
**功能:序列號匹配子程序 **
**參數:無返回 **
*************************************************************/
bit match_rom(uchar *rom)
{
uchar i;
ds18b20_init();
ds18b20_writecommand(0x55);
for(i=8;i>0;i--)
{
ds18b20_writecommand(*(rom+i-1));
// rom++;
}
return 1;
}
復制代碼
作者:
suda
時間:
2015-7-19 12:09
怎么按照你給的電路圖制作怎么檢測不了啊,現在能顯示 1:-0 2:-0 3:-0 4:-0 就是不能檢測溫度 請問你知道是什么情況嗎?
作者:
愛生活,愛折騰
時間:
2015-10-26 22:27
下一個看看
作者:
愛生活,愛折騰
時間:
2015-10-26 22:37
下載的程序不對啊,沒有c文件
作者:
whengfu
時間:
2015-11-8 20:54
想學習一下18B20多點測溫,很少有實例,不知道有否參考價值
作者:
swim
時間:
2016-5-17 21:15
哇哇
作者:
xzs
時間:
2016-5-17 21:34
好東西啊
作者:
a1298703610
時間:
2016-5-18 15:49
謝謝分享
作者:
weichen
時間:
2017-4-5 15:20
謝謝分享
作者:
李曉冬
時間:
2017-4-10 15:22
感謝分享
作者:
琪亞娜時間到了
時間:
2018-7-10 10:11
感謝分享
作者:
xsj1877578806
時間:
2018-7-29 10:05
感謝分享,點贊
作者:
971958171
時間:
2018-12-29 13:57
程序可以運行,但是沒有讀取rom序列號的功能,我找了好久,加了自動搜索這個功能
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1