資源簡介
含datasheet schematic code

代碼片段和文件信息
/*
?*?DS18B20測試程序
?*?
?*?用途:數碼管模塊測試程序
?*?
?*?作者 日期 備注
?*?Huafeng?Lin 2012/04/21 新增
?*?Huafeng?Lin 2012/04/21 修改
?*?
?*/
#include?
#define?uchar?unsigned?char
code?unsigned?char?seg7code[]={0xc00xf90xa40xb00x990x920x820xf80x800x900xff};? //不帶小數點的共陽數碼管段碼
code?unsigned?char?seg7codeB[]={0x400x790x240x300x190x120x020x780x000x100xff};? //帶小數點的共陽數碼管段碼
sbit?DQ=P3^6;? //數據傳輸線接單片機的相應的引腳?
unsigned?char?tempL=0;? //設全局變量
unsigned?char?tempH=0;?
unsigned?int?sdata; //測量到的溫度的整數部分
unsigned?char?xiaoshu1; //小數第一位
unsigned?char?xiaoshu2; //小數第二位
unsigned?char?xiaoshu; //兩位小數
bit?fg=1;???????? //溫度正負標志
void?delay(unsigned?char?i)
{
for(i;i>0;i--);
}
void?delay1(uchar?i)
{
uchar?jk;?
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void?Init_DS18B20(void)?
{
unsigned?char?x=0;
DQ=1;? //DQ先置高?
delay(8);? //稍延時
DQ=0;? //發送復位脈沖?
delay(80);? //延時(>480us)?
DQ=1;? //拉高數據線?
delay(5);? //等待(15~60us)?
x=DQ;? //用X的值來判斷初始化有沒有成功,18B20存在的話X=0,否則X=1?
delay(20);?
}
//讀一個字節
ReadOneChar(void)?? //主機數據線先從高拉至低電平1us以上,再使數據線升為高電平,從而產生讀信號
{
unsigned?char?i=0;? //每個讀周期最短的持續時間為60us,各個讀周期之間必須有1us以上的高電平恢復期
unsigned?char?dat=0;?
for?(i=8;i>0;i--)? //一個字節有8位?
{
DQ=1;?
delay(1);?
DQ=0;
dat>>=1;?
DQ=1;?
if(DQ)?
dat|=0x80;?
delay(4);
}?
return(dat);
}
//寫一個字節
void?WriteOneChar(unsigned?char?dat)?
{?
unsigned?char?i=0;? //數據線從高電平拉至低電平,產生寫起始信號。15us之內將所需寫的位送到數據線上,
for(i=8;i>0;i--)? //在15~60us之間對數據線進行采樣,如果是高電平就寫1,低寫0發生。?
{
DQ=0;? //在開始另一個寫周期前必須有1us以上的高電平恢復期。?
DQ=dat&0x01;?
delay(5);?
DQ=1;?
dat>>=1;
}?
delay(4);
}
//讀溫度值(低位放tempL;高位放tempH;)
void?ReadTemperature(void)?
{?
Init_DS18B20();? //初始化
WriteOneChar(0xcc);? //跳過讀序列號的操作
WriteOneChar(0x44);? //啟動溫度轉換
delay(125);? //轉換需要一點時間,延時?
Init_DS18B20();? //初始化
WriteOneChar(0xcc);? //跳過讀序列號的操作?
WriteOneChar(0xbe);? //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)?
tempL=ReadOneChar();? //讀出溫度的低位LSB
tempH=ReadOneChar();? //讀出溫度的高位MSB
if(tempH>0x7f)?????? //最高位為1時溫度是負
{
tempL=~tempL; //補碼轉換,取反加一
tempH=~tempH+1;???????
fg=0;?????? //讀取溫度為負時fg=0
}
sdata?=?tempL/16+tempH*16;?????? //整數部分
xiaoshu1?=?(tempL&0x0f)*10/16;? //小數第一位
xiaoshu2?=?(tempL&0x0f)*100/16%10; //小數第二位
xiaoshu=xiaoshu1*10+xiaoshu2;? //小數兩位
}
//顯示函數
void?Led(unsigned?int?date)
{?
if(fg==1)
{
P2=0xfe;????? //P1.0=0,選通第一位
P0=seg7code[date/10];?? //十位數,查表,輸出
delay1(5);
P0=0xff;???????? //消隱
P2=0xfd;????? //P1.1=0選通第二位,個位數
P0=seg7codeB[date%10];
delay1(5);
P0=0xff;??????? //消隱
P2=0xfb;????? //P1.3=0選通第三位,小數點第一位
P0=seg7code[xiaoshu1];
delay1(5);
P0=0xff;????????? //消隱
P2=0xf7;????? //P1.3=0選通第四位,小數點第二位
P0=seg7code[xiaoshu2];
delay1(5);
P0=0xff;??????? //消隱
}
if(fg==0)?? //溫度為負時顯示的數據
{
P2=0xfe;????? //P1.0=0
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-06-11?15:32??模塊A150\
?????目錄???????????0??2015-06-11?15:32??模塊A150\原理圖\
?????文件???????64029??2015-06-11?15:31??模塊A150\原理圖\DS18B20.pdf
?????目錄???????????0??2015-06-11?15:32??模塊A150\測試程序\
?????目錄???????????0??2015-06-11?15:32??模塊A150\測試程序\DS18B20\
?????文件????????7066??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20
?????文件???????10431??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20.M51
?????文件????????2111??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20.hex
?????文件??????????43??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20.lnp
?????文件?????????347??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20.plg
?????文件???????55210??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20.uvopt
?????文件???????13239??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20.uvproj
?????文件???????55215??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20_uvopt.bak
?????文件???????13236??2015-06-11?15:31??模塊A150\測試程序\DS18B20\DS18B20_uvproj.bak
?????文件????????9826??2015-06-11?15:31??模塊A150\測試程序\DS18B20\Main.LST
?????文件????????8080??2015-06-11?15:31??模塊A150\測試程序\DS18B20\Main.OBJ
?????文件????????4048??2015-06-11?15:31??模塊A150\測試程序\DS18B20\Main.c
?????目錄???????????0??2015-06-11?15:32??模塊A150\相關資料\
?????文件??????261896??2015-06-11?15:31??模塊A150\相關資料\DS18B20.pdf
- 上一篇:EFK日志系統安裝配置文檔
- 下一篇:RBM 算法理解
評論
共有 條評論