DS18B20,單片機,11.0592MHZ
#ifndef __DELAY_H__#define __DELAY_H__
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void delay(unsigned int i);
#endif
DS18B20_H
#ifndef __DS18B20_H__
#define __DS18B20_H__
#include
//包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義 #include
#define uchar unsigned char
#define uint unsigned int;
/*------------------------------------------------
端口定義
------------------------------------------------*/
/*------------------------------------------------
函數聲明
------------------------------------------------*/
unsigned int ReadTemperature(void);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void delay(unsigned int i);
#endif
delay.c
#include "delay.h"
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
/******************************************************************/
/* 延時函數 */
/******************************************************************/
void delay(unsigned int i)//延時函數
{
while(i--);
}
/*-----------blog.csdn.net/liuzongming1988--------------------------------------
名稱:18B20溫度傳感器
網站:blog.csdn.net/liuzongming1988
內容:18B20單線溫度檢測的應用樣例程序
------------------------------------------------*/
#include"delay.h"
#include"18b20.h"
sbit DQ=P1^3;//ds18b20 端口
/******************************************************************/
/* 初始化 */
/******************************************************************/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ復位
delay(8); //稍做延時
DQ = 0; //單片機將DQ拉低
delay(300); //精確延時 大于 480us
DQ = 1; //拉高總線
delay(10);
x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
delay(5);
}
/******************************************************************/
/* 讀一個字節 */
/******************************************************************/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
delay(5);
}
return(dat);
}
/******************************************************************/
/* 寫一個字節 */
/******************************************************************/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
delay(5);
}
/******************************************************************/
/* 讀取溫度 */
/******************************************************************/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
delay(200);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
b<<=8;
t=a+b;
return(t);
}
/*-----------blog.csdn.net/liuzongming1988---------------------
名稱:DS18b20數碼管顯示
編寫:blog.csdn.net/liuzongming1988
內容:顯示格式 符號 xxx.x C
可以顯示負溫度
------------------------------------------------*/
#include
//包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義 #include
#include
#include "18b20.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int;
/******************************************************************/
/* 定義端口 */
/******************************************************************/
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;
sfr dataled=0x80;//顯示數據端口
/******************************************************************/
/* 全局變量 */
/******************************************************************/
uint temp;
uchar flag_get,count,num,minute,second;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//7段數碼管段碼表 共陰極 顯示段碼值0~ 9
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};//
uchar str[6];
void Init_Timer0(void);
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char TempH,TempL,j;
Init_Timer0();
P2=0x00;
count=0;
temp=ReadTemperature();
temp=ReadTemperature();
while(1)
{
str[5]=0x39; //顯示C符號
str[1]=tab[TempH/100]; //百位溫度
str[2]=tab[(TempH%100)/10]; //十位溫度
str[3]=tab[(TempH%100)%10]|0x80; //個位溫度,帶小數點
str[4]=tab[TempL];
if(flag_get==1) //定時讀取當前溫度
{
temp=ReadTemperature();
if(temp&0x8000)
{
str[0]=0x40;//負號標志
temp=~temp; // 取反加1
temp +=1;
}
else
str[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小數近似處理
flag_get=0;
}
}
}
/*------------------------------------------------
定時器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD|=0x01;//定時器設置
TH0=0xef;
TL0=0xf0;
//IE=0x82;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0xef;//定時器重裝值
TL0=0xf0;
num++;
if (num==50)
{num=0;
flag_get=1;//標志位有效
}
count++;
if(count==1)
{P2=0;
dataled=str[0];}//數碼管掃描
if(count==2)
{P2=1;
dataled=str[1];}
if(count==3)
{ P2=2;
dataled=str[2];
}
if(count==4)
{ P2=3;
dataled=str[3];
}
if(count==5)
{ P2=4;
dataled=str[4];
}
if(count==6)
{ P2=5;
dataled=str[5];
count=0;}
}
上一篇:KEIL v3添加STC系列單片機庫文件 方法+頭文件庫
下一篇:IIC讀寫AT24C02代碼2——串口命令控制多頁讀寫
推薦閱讀
史海拾趣
AVG Semiconductors自創立之初,就始終堅持以技術創新為核心競爭力。公司不斷投入研發資源,推出了一系列具有劃時代意義的半導體產品。其中,AVG的某款高效能低功耗芯片在市場上引起了廣泛關注,其獨特的節能設計和卓越的性能使得AVG在激烈的市場競爭中脫穎而出。這款芯片的成功不僅提升了AVG的品牌形象,也為公司帶來了可觀的收益,進一步推動了公司的研發創新步伐。
Curtis自成立以來,始終將創新作為公司的核心驅動力。公司每年將總收入的10%以上投資于研發,運營著四個研發中心,分別位于加利福尼亞、瑞士、紐約和中國。這些研發中心聚集了高度專業化的工程師和技術人員,專注于設計和開發適用于所有類型電動汽車的先進電機速度控制器等產品。正是這種持續的技術創新,使Curtis在電子行業中保持領先地位。
B+B SmartWorx一直致力于產品創新,不斷推出符合市場需求的新產品。其中,光纖轉換器、3G/4G無線路由器以及Wzzard系列無線感測裝置等產品受到了市場的廣泛認可。這些產品不僅填補了研華在某些領域的空白,也展示了B+B SmartWorx在物聯網和工業網通領域的強大實力。此外,公司還積極開發風扇配件、AC插座等電力元件產品線,進一步豐富了其產品體系。
B+B SmartWorx一直致力于產品創新,不斷推出符合市場需求的新產品。其中,光纖轉換器、3G/4G無線路由器以及Wzzard系列無線感測裝置等產品受到了市場的廣泛認可。這些產品不僅填補了研華在某些領域的空白,也展示了B+B SmartWorx在物聯網和工業網通領域的強大實力。此外,公司還積極開發風扇配件、AC插座等電力元件產品線,進一步豐富了其產品體系。
B+B SmartWorx的前身是B&B Electronics,一個在1981年成立的公司,起初主要為無線和有線網絡提供設備連接解決方案。隨著技術的快速發展,物聯網和M2M連接的需求日益增長,B&B Electronics意識到必須進行創新以應對市場的變化。于是,公司開始致力于開發“邊緣智能”技術,使網絡連接設備更加智能、自主和響應迅速。這一創新轉型使得公司在物聯網行業中嶄露頭角,并在2015年決定將公司名稱更改為B+B SmartWorx,以更好地反映其業務重心和技術方向。
B+B SmartWorx的前身是B&B Electronics,一個在1981年成立的公司,起初主要為無線和有線網絡提供設備連接解決方案。隨著技術的快速發展,物聯網和M2M連接的需求日益增長,B&B Electronics意識到必須進行創新以應對市場的變化。于是,公司開始致力于開發“邊緣智能”技術,使網絡連接設備更加智能、自主和響應迅速。這一創新轉型使得公司在物聯網行業中嶄露頭角,并在2015年決定將公司名稱更改為B+B SmartWorx,以更好地反映其業務重心和技術方向。
4 變換器拓撲選擇 根據SAE J-1773給出的感應耦合器等效電路元件值,及上述的設計考慮,這里對適用于三種不同充電模式的變換器拓撲進行了考察。 如圖2所示,電動汽車車載部分包括感應耦合器的插孔部分及AC/DC整流及容?濾波電路。首先,對直接連 ...… 查看全部問答∨ |
|
哪位大蝦做過這方面的問題:我10位的并行AD輸出,要進行緩存,打算用quartus提供的存儲模塊,但是我希望能用個雙端口的RAM來存,除了將高6位補0進行16位存儲外,又沒有直接的可10位存儲的雙端口RAM模塊 謝ing… 查看全部問答∨ |
GTM900 TCP 丟包問題.. GTM900 在TCP 用IPSEND發送數據時, 發送十個數據,只收到6個數據.延時時間為1S,不知何因?… 查看全部問答∨ |
那位兄弟能幫忙解讀下面的LOG信息,謝謝! State Dump for Thread Id 0xe8c eax=00000000 ebx=033f5400 ecx=14f50038 edx=01875700 esi=07e2f2a4 edi=15753c38 eip=00f3018d esp=07e2c240 ebp=07e2f13c iopl=0   ...… 查看全部問答∨ |
有個觸摸屏裝的WINCE 6.0,想增加一個串口,使用了USB轉串口的轉換器,但是驅動不知道怎么裝上去,轉換器的驅動只有一個DLL文件和一個INF文件,請問如何安裝?… 查看全部問答∨ |
我用LF2407A通過PID控制PWM占空比來穩定輸出電壓在3V,但占空比不隨ADCIN0輸入的電壓而變化,不知問題在哪里?請各位高手指教?。。〕绦蛉缦拢? .title \\"ex.asm\\" & ...… 查看全部問答∨ |
我把工程中生成的.out文件和hex500轉換工具和編寫的.cmd文件拷貝到同一個文件夾下,執行HEX500.EXE,沒有反應? 應該是怎么做呢?還是DOS下輸入什么命令??? 哪位大俠幫助一下,不勝感激?。。 ? 查看全部問答∨ |