久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
實現穩定的單片機ds1820一線多點測溫系統,C51源碼,12864液晶顯示溫度值
[打印本頁]
作者:
cm7626
時間:
2017-4-7 22:59
標題:
實現穩定的單片機ds1820一線多點測溫系統,C51源碼,12864液晶顯示溫度值
美國DALAS公司的溫度傳感器ds1820芯片具有高靈敏度、易用性、編程布線簡單等優點,被應用到工控行業的各種產品中。
本C51源碼能夠實現穩定的一線多點測溫系統,液晶顯示溫度值。結合硬件的通信即可實現遠程多點測溫。本c51的ds1820的c語言驅動程序通過實踐使用,程序效率高、穩定準確,可直接使用。
且本原碼包括了FYD12864液晶顯示源碼,為FYD12864液晶初使用者提供了一個實例。
//DS1820 C51 子程序
//這里以11.0592M晶振為例,不同的晶體速度可能需要調整延時的時間
#include<reg52.h>
#include<lcd.h>
#include <absacc.h>
/////////////**********先為液晶初始化函數變量聲明**********///////////
void WRD(uchar DATA); //寫lcd數據子函數聲明
void WRI(uchar com) ; //寫lcd指令子函數聲明
void RD(uchar INDATA) ; //讀lcd數據子函數聲明
void CHEBF(); //讀lcdBF子函數聲明
void lcdinitialdat() ; //寫lcd數據初始化聲明
void delaylong(int n) ; //延遲聲明
void delay(void);
void locatecursor(uchar H,uchar L); //定位游標,行H,列L (最大可到四行八列)
uchar bdata state;
sbit BF=state^7;
uchar idata DDRAM; //設定DDRAM地址第一行80~87,第二行90~97,
//第三行為88-8F,第四行為98-9F
uchar idata basfuncset ; /*0X30基本指令,8位數據 0X34 擴充指令,8位數據*/
uchar idata shiftcursorr=0X14;//游標移位:為14H時,游標右移
uchar idata shiftcursorl=0X10; //游標移位:為10H時,游標左移
//18H時為顯示左移(在一三行之間或二四行之間),游標跟移;
//1CH時為顯示右移,游標跟移
uchar idata page; //頁號
////////////////////////////////////////////////////////////////////////////////////////////
sbit DQ =P1^1;//根據實際情況定義端口
typedef unsigned int uint;
void tmdelay(uchar useconds) ;
uchar tm_initial(void) ;
void read_char(void) ;
void write_char(char val) ;
void Read_Temperature(uchar no) ;
uchar temdate[2][2]=
{0,0, //NO1溫度值的低字節和高字節
0,0}; //NO2溫度值的低字節和高字節
uchar tempkey[2][8]=
{0X28,0X8F,0XF3,0X85,0,0,0,0X60, //NO1
0X28,0X52,0XA4,0X85,0,0,0,0X2A}; //NO2
uchar dy=0;
uchar value = 0;
uchar temint=0;
uint temdot=0;
//////////////////////////////////////////////main staet////////////////////////////////////////////////
main()
{ uchar k=0;
delaylong(500) ; /////此處必須延時300ms以上,500時為約大于1秒
//delaylong(350) ; //779ms
lcdinitialdat() ;//寫lcd數據初始化
delay() ;
while(1)
{k=0;
while(k<2)
{temint=0;temdot=0;
Read_Temperature(k);
locatecursor(k+1,1); //從第2行首列顯示
WRD('T');WRD('E'); WRD('M');WRD(0X30+k);WRD(':');
temint=((temdate[k][1]<<4)|(temdate[k][0]>>4));
temdot=temdate[k][0]&0X0F;
temdot=temdot*625;
temint+=temdot/10000;
WRD(0X30+temint/100);WRD(0X30+temint%100/10);WRD(0X30+temint%10);
WRD('.');
WRD(0X30+(temdot%10000/1000));WRD(0X30+temdot%1000/100);
WRD(0X30+(temdot%100/10));WRD(0X30+temdot%10);
k++;
}
}
}//end main
///////////////////////////////////////////////end main/////////////////////////////////////////////
//延時
void tmdelay(uchar useconds)
{
while(useconds>0)useconds--;
}
/*tmdelay(1) ;//16.28us//增加一個就加6.5us
tmdelay(2) ;//22.78us
tmdelay(3) ;//29.30us
tmdelay(4) ;//35.81us
tmdelay(70) ;//465.49
tmdelay(74) ;//491.54
tmdelay(80) ;//530.60
tmdelay(115) ;//150us */
//復位
uchar tm_initial(void) ///對的
{
uchar answer=1;
NOANSWE:
DQ = 0; //pull DQ line low
tmdelay(74); // leave it low for 490us
DQ = 1; // allow line to return high
tmdelay(12); // wait >60us for answer pulse
if(DQ==1) {answer=1;goto NOANSWE;}
else if(DQ==0)answer=0;
//locatecursor(1,5);
//WRD(0X30+answer);
tmdelay(40) ;//>250us
DQ=1;
return(answer); //0表示有DS18B20應答,1表示沒有應答
}
//從 1-wire 總線上讀取一個字節
void read_char(void)
{
uchar i;
value=0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 1;
dy++;dy++;
DQ = 0; // pull DQ low
dy++;dy++;dy++;dy++;dy++; // wait 1-15us for data in bus
DQ=1; dy++; //pull high
//tmdelay(1);
if(DQ==1)
{value|=0x80;
}else{;}
tmdelay(18) ;//>120us
}
//return(value);
}
//向 1-WIRE 總線上寫一個字節
void write_char(uchar val)
{
uchar i;
locatecursor(3,1);
for (i=8; i>0; i--) // writes uchar, one bit at a time
{
//DQ = 1;
//tmdelay(1);
DQ = 0; // pull DQ low to start timeslot
tmdelay(1);
if(val&0X01==1)
{DQ = 1;tmdelay(12); }
else {DQ=0;tmdelay(12); DQ=1;tmdelay(1); }
//tmdelay(10); // hold value for remainder of timeslot
val=val>>1;
}
DQ = 1;
tmdelay(1);
}
///////讀DS18B20的64bit的KEY
//讀取溫度
void Read_Temperature(uchar no)
{
uchar j=0;
value=0;
if(tm_initial()==1) goto noanswer;
write_char(0X55); // 匹配 ROM
//寫暫存存儲器(4EH)、讀暫存存儲器(BEH)、復制暫存存儲器(48H)、溫度變換(44H)、重
//新調出EERAM(B8H)和讀電源供電方式(B4H)命令
while(j<8)
{
write_char(tempkey[no][j]);
j++;
}
write_char(0x44); // Start Conversion
delaylong(355) ; //>780ms// 延時一段時間,等待AD轉換結束,默認12位則>750ms
if(tm_initial()==1) goto noanswer;
write_char(0X55); // 匹配 ROM
j=0;
while(j<8)
{
write_char(tempkey[no][j]);
j++;
}
write_char(0xBE); // Read Scratch Pad
read_char(); //first temperatue low
temdate[no][0]=value;
read_char(); //then temperatue high
temdate[no][1]=value;
//tm_initial();
//write_char(0xCC); //Skip ROM
//return temp.x/2;
noanswer:;
} //////////////////////////end Read_Temperature(void) ////////////////////
///////////////////////////
/***************************現為各液晶子函數體******************/////
void WRD(uchar DATA) //寫lcd數據子函數
{
CHEBF();
ADWRD=DATA;
ADWRD=DATA;
}
void WRI(uchar com) //寫lcd指令子函數
{
CHEBF();
ADWRI=com;
ADWRI=com;
}
void CHEBF() //讀lcdBF子函數
{
state=ADRI;
while(BF)
{
state=ADRI;
}
}
void lcdinitialdat() //寫lcd數據初始化
{
WRI(0X30) ; //RE=0基本指令設定
delay();
WRI(0X30) ; //延遲39us
delay();
WRI(stadis2); //游標開,反白允許
//WRI(0X0E); //游標開,反白不允許
//WRI(stadis1); //游標關,反白不允許
delay(); //延遲39us
WRI(clrdis) ; //清除顯示
delay(); //延遲39us
WRI(inpointcursorup); //AC+1
delay(); //延遲39us
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
(49.89 KB, 下載次數: 156)
下載附件
2017-4-7 23:59 上傳
下載:
C51源碼能夠實現穩定的一線多點測溫系統,液晶顯示溫度值.rar
(259.6 KB, 下載次數: 57)
2017-4-7 22:59 上傳
點擊文件名下載附件
多點測量溫度
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩在线一区二区
|
免费高清成人
|
免费在线国产视频
|
日本国产精品视频
|
91国内在线观看
|
91视频免费视频
|
国产清纯白嫩初高生在线播放视频
|
亚洲一区二区综合
|
九九精品久久久
|
国产精品久久久久免费
|
亚洲午夜av
|
成人精品一区亚洲午夜久久久
|
国产一区在线免费
|
91网视频
|
国产免费va
|
亚洲欧美日韩精品
|
日日干天天操
|
亚洲国内精品
|
国产精品欧美一区二区
|
毛片一级片
|
狠狠色网
|
日本在线视频一区二区
|
成人精品系列
|
亚洲欧美日韩久久久
|
中文字幕精品一区
|
成人免费毛片片v
|
精品1区2区
|
aⅴ色国产 欧美
|
日韩伦理一区二区
|
亚洲一区二区三区视频
|
欧美日韩一区二区三区四区五区
|
日韩高清国产一区在线
|
亚洲精品免费观看
|
成人精品
|
亚洲a毛片
|
久久久久久久久久影视
|
日本韩国欧美在线观看
|
在线观看午夜视频
|
日本一二三区在线观看
|
亚洲一区二区中文字幕
|
日韩三级
|