標(biāo)題: 自制mini數(shù)字溫度計 [打印本頁]

作者: daogu    時間: 2015-4-1 23:20
標(biāo)題: 自制mini數(shù)字溫度計
    芯片采用AT89C2051,溫度檢測采用DS18B20,顯示3位共陰數(shù)碼管,電路非常簡單。

原理仿真圖:實際運用中請將P1口加上1K上拉電阻。


采用基本和數(shù)碼管大小的一塊實驗洞洞板來焊接,電源采用常用的5VminiUSB供電(數(shù)據(jù)線好找些,可以直接USB,比較方便),晶振采用了壞U盤中的12MHZ的小晶振嵌入到集成插座的中間空隙以減小體積。為了減小數(shù)碼管和其他電子元件通電后發(fā)熱對DS18B20溫檢產(chǎn)生檢測誤差,將DS18B20的3只腳分別焊接到一個立體聲插頭上,然后再通過立體聲插座再傳遞到AT89C2051的P3.7端口。數(shù)碼管采用插接件,方便修改和燒錄單片機程序。


只拍照的正面,背面就是亂云飛渡人從容啦


裝好通電后效果,測試中還是感覺到電子元件溫升的差異



源程序如下:

#include<reg52.h>
#include <intrins.h>
#define  uchar  unsigned  char
#define  uint   unsigned  int
sbit  DATA = P3^7; //DS18B20接入口
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
char  bai,shi,ge; //定義變量
/*延時子函數(shù)*/
void delay(uint num)
{
while(num--) ;
}
/*************DS18b20溫度傳感器函數(shù)*********************/
Init_DS18B20(void)     //傳感器初始化
{
  uchar x=0;
  DATA = 1;    //DQ復(fù)位
  delay(10);  //稍做延時
  DATA = 0;    //單片機將DQ拉低
  delay(80); //精確延時 大于 480us    //450
  DATA = 1;    //拉高總線
  delay(20);
  x=DATA;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  delay(30);
}
//讀一個字節(jié)
ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
  {
    DATA = 0; // 給脈沖信號
    dat>>=1;
    DATA = 1; // 給脈沖信號
    if(DATA)
     dat|=0x80;
    delay(8);
  }
  return(dat);
}
//寫一個字節(jié)
WriteOneChar(unsigned char dat)
{
  uchar i=0;
  for (i=8; i>0; i--)
  {
    DATA = 0;
    DATA = dat&0x01;
   delay(10);
   DATA = 1;
   dat>>=1;
  }
delay(8);
}
//讀取溫度
int ReadTemperature(void)
{
uchar a=0;
uchar b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
return(t);
}
/*顯示子函數(shù)*/
void  display(int bai,int shi,int ge)
{
P3=0XFB; //顯示小數(shù)點
P1=0X80; //顯示小數(shù)點
delay(50);//顯示小數(shù)點
P3=0xf7;
P1=table[bai];//顯示千位
delay(50);//一小段延時動態(tài)顯示
P3=0xfb;
P1=table[shi];//顯示百位
delay(50);
P3=0xfd;
P1=table[ge];//顯示十位
delay(50);
}
void  main()
{
int  temp;
while(1)
{  
  temp=ReadTemperature();//讀溫度
  bai=temp%1000/100;//顯示百位
  shi=temp%100/10;//顯示十位
  ge=temp%10;//顯示個位
  
  display(bai,shi,ge);//顯示函數(shù)
}  
}




作者: 1783119269    時間: 2015-5-3 20:31
很好  贊一下
作者: horseydk    時間: 2015-5-6 17:52
程序挺多
作者: yjx189    時間: 2016-4-5 18:06
2051的芯片燒寫是個問題,沒有專用的編程器,可怎么辦啊?

作者: admin    時間: 2016-4-8 15:07
yjx189 發(fā)表于 2016-4-5 18:06
2051的芯片燒寫是個問題,沒有專用的編程器,可怎么辦?

AT89c2051需要用編程器才能燒錄,建議采用stc的2051芯片,源代碼引腳都能兼容。采用串口燒錄。
作者: 愛玩單片機    時間: 2016-4-8 15:12
admin 發(fā)表于 2016-4-8 15:07
AT89c2051需要用編程器才能燒錄,建議采用stc的2051芯片,源代碼引腳都能兼容。采用串口燒錄。

釆用STC的不能正常工作,時序不對還是什么請教
作者: mslong    時間: 2016-4-8 20:11
用STC芯片多好,試試
作者: Animals    時間: 2016-4-9 20:31
我的keil不知怎么了設(shè)置了生成hex文件卻沒生成誰做過的好心幫忙提供下hex文件啊
作者: admin    時間: 2016-4-9 21:11
Animals 發(fā)表于 2016-4-9 20:31
我的keil不知怎么了設(shè)置了生成hex文件卻沒生成誰做過的好心幫忙提供下hex文件啊

hex文件生成好了,0個警告,0個錯誤。你的應(yīng)該是keil設(shè)置的問題: 源碼及hex文件.rar (20.1 KB, 下載次數(shù): 44)

作者: Animals    時間: 2016-4-9 22:54
本帖最后由 Animals 于 2016-4-9 23:02 編輯

謝謝了!
作者: 少年狂    時間: 2016-5-27 12:07
菜鳥請教一下   怎么做成3路檢測3路顯示?
作者: deng73301    時間: 2016-5-27 23:26
不錯 支持diy
作者: deng73301    時間: 2016-5-27 23:27
哼不錯 支持diy
作者: whengfu    時間: 2016-5-29 09:40
這款制作線路簡單扼要,值得仿制
作者: LIUWEIMIN    時間: 2016-6-3 15:32
怎么實現(xiàn)不了呢
作者: 51hei電控2112311    時間: 2016-6-4 01:47
我用msp430g2231也做了個溫濕度計,就是體積比你的大了好多,有點丑。
作者: 越快樂越墮落    時間: 2016-7-5 00:01
怎么只顯示00.0???這是什么原因???樓主你的剛開機顯示啥???
作者: bingobingo    時間: 2016-10-31 20:08
不錯,支持支持一下
作者: XDDZ1013    時間: 2017-6-9 22:50
謝謝分享
作者: 18026723501    時間: 2017-11-19 14:37
請問數(shù)碼管用哪一種呢

作者: ronglle    時間: 2018-9-5 13:48
溫度檢測,還是蠻準(zhǔn)確的。用這個元器件。
作者: xunxing    時間: 2018-11-26 22:29
簡單明了
作者: whrxl    時間: 2018-12-4 10:13
溫度測量范圍多少?
作者: mhl6408    時間: 2018-12-21 16:16
學(xué)習(xí)了
作者: Li平    時間: 2018-12-22 17:06
贊一下,很好?樟嗽谧屑(xì)研究。  
作者: mhl6408    時間: 2018-12-25 14:50
這款簡單明了
作者: brew9    時間: 2018-12-25 16:00
亮點在18b20的接入方式
作者: 快樂眼淚    時間: 2018-12-25 20:26
這個怎么改成LDE燈顯示溫度的?用LED燈珠做成一串,每一個燈珠代表0.5度,誰幫忙寫下程序?先謝謝了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1