導航:首頁 > 操作系統 > 基於單片機的溫度計

基於單片機的溫度計

發布時間:2022-11-17 11:13:33

⑴ 基於單片機的數字溫度計設計要做成實物所需要的硬體有什麼

你搜一下單片機最小系統,按上面所列出的東西焊接起來,然後就是溫度感測器,可以選擇樓上的ds18b20,這個挺好用,直接接io口加個上拉電阻就行了,當然也可以用熱敏電阻,這個需要ad轉換.adc0804就夠了.然後就是顯示 ,除了樓上的數碼管之外還需要數碼管驅動,用三極體8050就行了,數碼管有共陽和共陰極,選的時候要注意.除了單片機最小系統外其他電路都相當簡單,用一般地萬用板就可以完成,就是外觀不太好看而以,單片機最小系統網路一搜一大把圖,直接按圖上的焊接就行了,也許你還需要一個復位按鈕,當然直接上電復位也可以,有段時間沒有接觸過單片機了,能想到的就這些了,希望對你有幫助

⑵ 51單片機 數字溫度計工作原理

數字溫度計原理是通過溫度感測器實現實時溫度檢測,然後通過單片機來根據感測器特性計算出溫度,並且顯示出來

⑶ 基於單片機的數字溫度計設計用C語言寫程序

//------------------------------------------------------------------
//DS18B20溫度感測器輸出顯示,運行本例時,外界溫度將顯示在1602LCD上
//------------------------------------------------------------------
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}
sbit DQ=P2^2;
sbit la=P2^6; //定義鎖存器鎖存端
sbit wela=P2^7;
sbit rs=P3^5; //定義1602液晶RS端
sbit lcden=P3^4;//定義1602液晶LCDEN端
sbit s1=P3^0; //定義按鍵--功能鍵
sbit s2=P3^1; //定義按鍵--增加鍵
sbit s3=P3^2; //定義按鍵--減小鍵
sbit s4=P3^6;//鬧鍾查看鍵
sbit rd=P3^7;
sbit beep=P2^3; //定義蜂鳴器端
uchar code Temp_Disp_Title[]={" Current Temp : "};
uchar Current_Temp_Display_Buffer[]={" TEMP: "};

uchar code Alarm_Temp[]={"ALARM TEMP Hi Lo"};
uchar Alarm_HI_LO_STR[]={"Hi: Lo: "};
uchar temp_data[2]={0x00,0x00};
uchar temp_alarm[2]={0x00,0x00};
uchar display[5]={0x00,0x00,0x00,0x00,0x00};
uchar display1[3]={0x00,0x00,0x00};
uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
uchar CurrentT=0; //當前讀取的溫度整數部分
uchar Temp_Value[]={0x00,0x00}; //從DS18B20讀取的溫度值
uchar Display_Digit[]={0,0,0,0}; //待顯示的各溫度數位
bit DS18B20_IS_OK=1;//感測器正常標志

//-------------------------------------
//延時1
//-------------------------------------
void delay1(uint x)
{
uchar i;
while(x--) for(i=0;i<200;i++);
}
//-------------------------------------
//延時2
//-------------------------------------
void Delay(uint x)
{
while(x--);
}
//------------------------------------
//忙檢查
//------------------------------------
void write_com(uchar com)//液晶寫命令函數
{
rs=0;
lcden=0;
P0=com;
delay1(5);
lcden=1;
delay1(5);
lcden=0;
}
void Write_LCD_Data(uchar date)//液晶寫數據函數
{
rs=1;
lcden=0;
P0=date;
delay1(5);
lcden=1;
delay1(5);
lcden=0;
}
//-----------------------------
//設置LCD顯示位置
//---------------------------------
void Set_Disp_Pos(uchar Pos)
{
write_com(Pos|0x80);
}

//-----------------------------
//LCD初始化
//---------------------------------
void Initialize_LCD()
{
uchar num;
rd=0; //軟體將矩陣按鍵第4列一端置低用以分解出獨立按鍵
la=0;//關閉兩鎖存器鎖存端,防止操作液晶時數碼管會出亂碼
wela=0;
lcden=0;

write_com(0x38);//初始化1602液晶
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//設置顯示初始坐標

for(num=0;num<14;num++)//顯示年月日星期
{
Write_LCD_Data(Temp_Disp_Title[num]);
delay1(5);
}
}

//-------------------------------------
//函數功能:初始化DS18B20
//出口參數:status---DS18B20是否復位成功的標志
//-------------------------------------
uchar Init_DS18B20()
{
uchar status; //儲存DS18B20是否存在的標志,status=0,表示存在;status=1,表示不存在
DQ=1;Delay(8); //先將數據線拉高 //略微延時約6微秒
DQ=0;Delay(90); //再將數據線從高拉低,要求保持480~960us
//略微延時約600微秒 以向DS18B20發出一持續480~960us的低電平復位脈沖
DQ=1;Delay(8); //釋放數據線(將數據線拉高) //延時約30us(釋放匯流排後需等待15~60us讓DS18B20輸出存在脈沖)
status=DQ;Delay(100); //讓單片機檢測是否輸出了存在脈沖(DQ=0表示存在) //延時足夠長時間,等待存在脈沖輸出完畢
DQ=1; // 將數據線拉高
return status; //返回檢測成功標志
}
//-------------------------------------
//函數功能:讀一位元組
//出口參數:dat---讀出的數據
//-------------------------------------
uchar ReadOneByte()
{
uchar i,dat=0;
DQ=1;_nop_(); // 先將數據線拉高 //等待一個機器周期
for (i=0;i<8;i++)
{
DQ=0; //單片機從DS18B20讀書據時,將數據線從高拉低即啟動讀時序
dat>>=1;
_nop_(); //等待一個機器周期
DQ=1; //將數據線"人為"拉高,為單片機檢測DS18B20的輸出電平作準備
_nop_();_nop_(); //延時約6us,使主機在15us內采樣
if (DQ) dat|=0x80; //如果讀到的數據是1,則將1存入dat,如果是0則保持原值不變
Delay(30); //延時3us,兩個讀時序之間必須有大於1us的恢復期
DQ=1; // 將數據線拉高,為讀下一位數據做准備
}
return dat;
}
//-------------------------------------
//函數功能:寫一位元組
//入口參數:dat---待寫入的數據
//-------------------------------------
void WriteOneByte(uchar dat)
{
uchar i;
for (i=0;i<8;i++)
{
DQ=0; //將數據線從高拉低時即啟動寫時序
DQ=dat & 0x01; //利用與運算取出要寫的某位二進制數據,
//並將其送到數據線上等待DS18B20采樣
Delay(5); //延時約30us,DS18B20在拉低後的約15~60us期間從數據線上采樣
DQ=1; //釋放數據線
dat>>=1; //將dat中的各二進制位數據右移1位
}
}
//-------------------------------------
//函數功能:讀取溫度值
//出入口參數:無
//-------------------------------------
void Read_Temperature()
{
if(Init_DS18B20() == 1) //DS18B20故障
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xCC); // 跳過讀序號列號的操作
WriteOneByte(0x44); // 啟動溫度轉換
Init_DS18B20(); //將DS18B20初始化
WriteOneByte(0xCC); //跳過讀序號列號的操作
WriteOneByte(0xBE); //讀取溫度寄存器,前兩個分別是溫度的低位和高位
Temp_Value[0]=ReadOneByte(); //溫度低8位
Temp_Value[1]=ReadOneByte(); //溫度高8位
DS18B20_IS_OK=1;
}
}
//-------------------------------------
//函數功能:在LCD上顯示當前溫度
//入口參數:
//-------------------------------------
void Display_Temperature()
{
uchar i;
//延時值與負數標識
uchar t=150,ng=0;
//高5位全為1(0xF8)則為負數,為負數時取反加1,並設置負數標示
if ((Temp_Value[1] & 0xF8)==0xF8)
{
Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Value[0]+1;
if(Temp_Value[0]==0x00) Temp_Value[1]++; //加1後如果低位元組為00表示有進位,進位位再加到高位元組上
ng=1; //負數標示置1
}
Display_Digit[0]=df_Table[Temp_Value[0] & 0x0F]; //查表得到溫度小數部分
//獲取溫度整數部分(高位元組的低3位與低位元組中的高4位,無符號)
CurrentT=((Temp_Value[0] & 0xF0)>>4)|((Temp_Value[1] & 0x07)<<4);
//將整數部分分解為3位待顯示數字
Display_Digit[3]=CurrentT/100; //百位 digit[CurrentT/100];
Display_Digit[2]=CurrentT%100/10; //十位
Display_Digit[1]=CurrentT%10; //個位
//刷新LCD顯示緩沖
Current_Temp_Display_Buffer[11]=Display_Digit[0]+'0';//先將'0'轉換成整數48,然後與前面數字相加,得到相應數字的ASCII字元
Current_Temp_Display_Buffer[10]='.';
Current_Temp_Display_Buffer[9]=Display_Digit[1]+'0'; //個位
Current_Temp_Display_Buffer[8]=Display_Digit[2]+'0'; //十位
Current_Temp_Display_Buffer[7]=Display_Digit[3]+'0'; //百位
//高位為0時不顯示
if(Display_Digit[3]==0) Current_Temp_Display_Buffer[7]=' ';
//高位為0且次高位為0時,次高位不顯示
if(Display_Digit[2]==0 && Display_Digit[3]==0)
Current_Temp_Display_Buffer[8]=' ';
//負數符號顯示在恰當位置
if(ng)
{
if (Current_Temp_Display_Buffer[8]==' ')
Current_Temp_Display_Buffer[8]='-';
else if(Current_Temp_Display_Buffer[7]==' ')
Current_Temp_Display_Buffer[7]='-';
else
Current_Temp_Display_Buffer[6]='-';
}
//在第一行顯示標題
Set_Disp_Pos(0x00);
for(i=0;i<16;i++)
{
Write_LCD_Data(Temp_Disp_Title[i]);
}
Set_Disp_Pos(0x40); //在第二行顯示當前溫度
for(i=0;i<16;i++)
{
Write_LCD_Data(Current_Temp_Display_Buffer[i]);
}
//顯示溫度符號
// Set_Disp_Pos(0x4D);Write_LCD_Data(0x00);
Set_Disp_Pos(0x4D);Write_LCD_Data(0xdf);
Set_Disp_Pos(0x4E); Write_LCD_Data('C');
}
//-------------------------------------
//函數功能:主函數
//入口參數:
//-------------------------------------
void main()
{
Initialize_LCD();
Read_Temperature();
Delay(50000);
Delay(50000);
while (1)
{
Read_Temperature();
if (DS18B20_IS_OK) Display_Temperature();
delay1(100);
}
}

⑷ 基於單片機的數字溫度計設計

精度為0.1度 感覺很難實現 最起碼你要用到Pt100或者Pt1000的溫度感測器 其它的很難做到

⑸ 基於單片機的電子溫度計設計

看看這個吧,是個通過溫度感測器實現對電風扇的智能控制的程序
溫度感測器是ds18b20
不懂的地方m我 qq 296264785

#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P3^4;
sbit ka=P3^0;
sbit guan=P3^1;

uchar wen[]={0x00,0x00};
uchar code tab[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
uchar code anma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar ,shi,ge,xiao,wen;

//延時子程序
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void delay1(uint a)
{
while(--a);
}

uchar init_18b20() //18b20初始化
{
uchar b;
DQ=1;
delay1(8);
DQ=0;
delay1(90);
DQ=1;
delay1(8);
b=DQ;
delay1(100);
DQ=1;
return b;
}

uchar ()//讀位元組
{
uchar i,dat=0;
DQ=1;_nop_();
for(i=0;i<8;i++)
{
DQ=0;
dat >>=1;
DQ=1;
_nop_(); _nop_();
if(DQ)dat|=0x80;
delay1(30);
DQ=1;
}
return dat;
}

void xie(uchar da)//寫位元組
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=da & 0x01;
delay1(5);
DQ=1;
da>>=1;
}
}

void wen()
{
while(init_18b20()); //DQ=1;等待
xie(0xcc);
xie(0x44);
init_18b20();
xie(0xcc);
xie(0xbe);
wen[0]=();
wen[1]=();
}

void xshi()
{
uchar i;

xiao=tab[wen[0] & 0x0f];
wen=((wen[0] & 0xf0)>>4) | ((wen[1] & 0x07)<<4);
=wen/100;
shi=wen%100/10;
ge=wen%10;

for(i=0;i<15;i++)
{
P1=0xfe;
P2=anma[xiao];
delay(5);
P1=0xfd;
P2=anma[ge];
delay(5);
P1=0xfb;
P2=anma[shi];
delay(5);
P1=0xf7;
P2=anma[];
delay(5);
}
}

void main()
{
ka=0;
guan=0;
wen();
delay(10);
while(1)
{
wen();
xshi();
if(wen>=25) //溫度高於25度 開風扇
{
ka=1;
guan=0;
}
else
{
ka=0;
guan=1;
}
}
}

⑹ 基於單片機的數字溫度計設計

按你的要求設計了程序並且通過ProteUS模擬
無償提供原理圖,ProteUS模擬工程(可運行),供參考運行效果,及原理圖的設計。
推薦:01 基於單片機的數字報警溫度計( http://ishare.iask.sina.com.cn/f/11655563.html )

; 源程序為匯編
; 實時顯示溫度
; 高於高限,低於低限,進行聲光報警
; 溫度高低限可自由設定

; 上電顯示 543210
; 讀出溫度後實時顯示溫度
; 溫度高於上限溫度時,顯示"HH****", 並進行聲光報警
; 溫度低於下限溫度時,顯示"LL****", 並進行聲光報警
; 設定鍵 進行高低限設定 循環為 "實時溫度" 「L ***」 「H ***」
; 可用+ -鍵進行修改報警值

⑺ 基於51單片機的溫度計中什麼可以代替DS18B20

DS18B20屬於數字溫度計。如果要代替的話,可以試試LM75,當然LM75是I2C介面的。然後就是模擬信號輸出的溫度計了,什麼NPT、鉑電阻、熱電偶、AD590、LM35之類的,就要用ADC了。如果你的單片機自帶了ADC,還差不多。

⑻ 基於AT89C51單片機數字溫度計

我買了一個,不錯!

一、AT-12A學習板主要特點:

1.直接USB口供電,可通過電腦USB口下載程序,方便沒有串口的筆記本電腦下載並直接燒寫程序。

2.直接在線下載燒寫程序,不需要另外購買單片機燒寫器,也能隨時方便的燒寫程序到單片機里查看程序運行情況,學習、調試

程序省去復雜頻繁的燒寫、換片過程。

3.具有直接在線模擬功能,不需要另外購置昂貴的模擬器。將模擬晶元安在實驗上後便可直接進行在線單步,全速調試等。

4.昂天AT-12A學習板集實驗開發板、編程器、燒寫器、模擬器四合一,簡單高效。

5.豐富的硬體資源:AD模數轉換晶元,DA數模轉換晶元,先進的光耦隔離驅動繼電器模塊,紅外接收通信模塊,18B20溫度感測模塊,三個埠復用鎖存器,基於IIC協議的EEPROM24C0**系列晶元,全八位數碼管,全八位發光二激管(和單片機8位系統完整對應),發聲音樂實驗的蜂鳴器,串口RS232轉換晶元,4x4矩陣鍵盤和4個特殊功能鍵盤等等。

6.豐富的擴展介面:1602字元液晶介面(液晶對比度亦可任意調節),12864字元、漢字、圖形液晶介面(液晶對比度亦可任意調

節),繼電器外控電源介面,TTL串列數據外擴介面(方便做與其他單片機通信實驗),單片機IO引腳全部40個外擴介面,全部可以自行擴展,這是非常重要的。

7,人性化設計:晶元全部採用插座可更換式,方便根據需求隨時更換晶元。單片機採用緊鎖裝置,方便更換模擬晶元和批量燒寫

程序。串列下載程序狀態指示燈。功能模塊布局合理,使用方便,開發板四端加電保護螺絲等等。使用方便舒適。

二、AT-12A豐富的硬體資源介紹:

1、全八位發光二極體:流水燈相關試驗:比如正反流水燈、交通指示、移位顯示等等。(周邊硬體狀態指示實驗等)。

2、全八位數碼管:全八位發光二極體和數碼管與單片機8位完整對應,硬體不縮水,使用顯示更方便更完整。可做實驗:比如計

數器、秒錶、電子鍾、數碼管動態顯示、靜態顯示等等。(做靜態顯示實驗,動態掃描實驗,8位與IO口全匹配)。

3、串列通信介面:MAX232晶元RS232通信介面,(可以做為與計算機串列通信的介面,同時也可做為STC單片機下載程序的介面,還可以做為主從系統中多機互連介面。一口多用,非常方便)。串口TTL電平外擴介面,可方便與其他單片機做串口通信實驗,同時可以直接通過串口在線燒寫STC晶元和在線模擬。含有232介面,支持串口通訊實驗、模擬晶元自舉、SST模擬模塊在線硬體模擬,通過此介面可直接支持各種類型的嵌入式模擬器。學習串列通信的有關原理,51單片機串列口的結構、串列口編程的方法。

4、USB供電系統:直接插接到電腦USB口即可提供電源,不需另接直流電源。

5,AD模數轉換模塊(含ADC0804晶元):(做模/數轉換實驗)工業上最常用的將模擬量轉變成單片機可識別的數字量實驗,學好模數轉換技術,在實際單片機應用中非常重要。

6,DA數模轉換模塊(含DAC0832晶元):(做數/模轉換實驗)將單片機的數字量轉換成模擬信號電路,在單片機應用中也很重要。

7、IIC匯流排介面:通過EEPROM的24C**寫入、讀取試驗,學習工業上常用的IIC協議以及掉電存儲晶元的使用。(IIC匯流排元件實驗驗)

8、實用的繼電器控制模塊:AT-12A學習板採用工控中先進的、具有良好隔離性和穩定性的光電耦合器驅動,繼電器因為需要分離電路,電路比較復雜,一般實驗板沒有,AT-12A學習板採用獨立的驅動隔離電路,所有原理圖一並提供。繼電器及分離驅動電路模塊(學習工業設備中最常用的以弱控強繼電器的使用,以及其驅動電路的設計)。

9、光電耦合器:學習工控現場系統中穩定可靠的電隔離系統的設計)。

10,紅外線接收通信模塊:可做紅外線接收解碼實驗,把學習板做成無線控制中心。IR紅外線通信接收器(可做紅外線通信接收實

驗,可將單片機做成無線紅外控制器,通過遙控器控制其它設備,學習紅外無線調制、解調、編碼等實驗)。

11,字元液晶1602介面(含1602液晶):可顯示兩行字元。

12、圖形液晶12864介面(具有液晶對比度調節功能):可顯示任意漢字及圖形。

13,DS18B20溫度顯示器:可做溫度感測顯示實驗,可以做成溫度檢測控制器。(初步掌握單片機操作後即可親自編寫程序獲知當時的溫度,可深入設計溫控系統)。

14、音樂、發聲電路:學習板系統帶蜂鳴器,可做發聲、音樂實驗。(做單片機發聲實驗,鬧鍾提醒實驗等)

15.4X4矩陣鍵盤,4個特殊功能鍵盤共20個鍵盤:做各種復雜的鍵盤控制掃描實驗,實現對系統復雜的控制。(鍵盤檢測試驗)

16、全開放擴展介面:單片機32個IO口全部引出,方便自己進行自由擴展。整個系統採用全開放模塊化設計,獨立結構,穩定實

用。通過擴展口,可以自己做各種想做的實驗,讓自己在電子世界裡自由翱翔吧!

17,鎖緊裝置:非常方便主晶元的安裝及卸取。

18,專業的技術支持:光碟中含本實驗板所有常式。贈送偉褔模擬軟體,easy51pro下載軟體,STC單片機程序下載軟體,KEIL51

等及所有電路圖、實驗板詳細使用教程,下載教程等。豐富的學習資源光碟,讓你學習起到事半功倍的效果,快速進入優秀工程

師的行列。

http://item.taobao.com/auction/item_detail-db2-.jhtml

閱讀全文

與基於單片機的溫度計相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:485
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163