欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
DS18B20讀取序列號+1602顯示源程序
[打印本頁]
作者:
woaiyujuan
時間:
2017-10-30 19:44
標(biāo)題:
DS18B20讀取序列號+1602顯示源程序
DS18B20讀取序列號+1602顯示,H我沒加進(jìn)去,序列號開頭是28H,我只放進(jìn)去28.
單片機(jī)源程序如下:
#include <intrins.h>
#include <lcd.h>
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define uchar unsigned char
#define uint unsigned int
uint temp,flag1;
int LedOut[4];
int temper;
sbit DQ=P3^7;
uchar sn[8];//存序列號
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
/*--------- DS18B20-----------*/
void delay1(unsigned char i)
{
while(i--);
}
void initionds18b20()
{
DQ=0;
delay1(128); //900us
DQ=1;
delay1(1);
while(DQ); //檢測到應(yīng)答脈沖
//i=103;while(i>0) i--;//等待870us
delay1(100);
}
uchar readds18b20()
{ uchar i = 0;
uchar dat = 0;
for(i=8;i>0;i--)
{
DQ = 0; //將總線拉低,要在1us之后釋放總線
//單片機(jī)要在此下降沿后的15us內(nèi)讀數(shù)據(jù)才會有效。
_nop_(); //至少維持了1us,表示讀時序開始
dat >>= 1; //讓從總線上讀到的位數(shù)據(jù),依次從高位移動到低位。
DQ = 1; //釋放總線,此后DS18B20會控制總線,把數(shù)據(jù)傳輸?shù)娇偩上
delay1(1); //延時7us,此處參照推薦的讀時序圖,盡量把控制器采樣時間放到讀時序后的15us內(nèi)的最后部分
if(DQ) //控制器進(jìn)行采樣
{
dat |= 0x80; //若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進(jìn)行處理,保持為0
}
delay1(10); //此延時不能少,確保讀時序的長度60us。
}
return (dat);
}
void writeds18b20(uchar dat)
{
uchar i = 0;
for(i=8;i>0;i--)
{
DQ = 0; //拉低總線
_nop_(); //至少維持了1us,表示寫時序(包括寫0時序或?qū)?時序)開始
DQ = dat&0x01; //從字節(jié)的最低位開始傳輸
//指令dat的最低位賦予給總線,必須在拉低總線后的15us內(nèi),
//因為15us后DS18B20會對總線采樣。
delay1(10); //必須讓寫時序持續(xù)至少60us
DQ = 1; //寫完后,必須釋放總線,
dat >>= 1;
delay1(1);
}
}
void rom() //讀取序列號
{
uchar i;
int j;
initionds18b20(); //復(fù)位
delay1(1); //延時
writeds18b20(0x33); //發(fā)送讀序列號子程序
for (j=0;j<9;j++)
{
sn[j]=readds18b20(); //讀取序列號
}
}
/*---------------lLCD----------------------*/
delay(BYTE ms)
{ // 延時子程序
BYTE i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
BOOL lcd_bz()
{ // 測試LCD忙碌狀態(tài)
BOOL result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (BOOL)(P0 & 0x80);
ep = 0;
return result;
}
lcd_pos(BYTE pos)
{ //設(shè)定顯示位置
LcdWriteCom(pos | 0x80);
}
void write_lcd_disp(char Rom)
{
uchar i,c,l,h;
l = Rom & 0x0f; //取低4位
h = Rom & 0xf0; //取高4位
h >>= 4;
if( ( h >= 0x00 )&&( h <= 0x09 ) )
LcdWriteData(h+0x30); //取ASCII碼
else
LcdWriteData(h+0x37); //取ASCII碼
if( ( l >= 0x00 )&&( l <= 0x09 ) )
LcdWriteData(l+0x30); //取ASCII碼
else
LcdWriteData(l+0x37); //取ASCII碼
delay(1);
}
void main()
{
int k;
uchar a,b,c,d,e,f,g,h,j;
LcdInit(); // 初始化LCD
rom();
a=sn[0]; //調(diào)用讀序列號子程序
b=sn[1];
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
ds18b20讀取序列號 16022.rar
(40.62 KB, 下載次數(shù): 77)
2017-10-30 19:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1