數字溫度計設計
Ⅰ 設計一個測試溫度范圍為0~100℃的數字溫度計
你到網上隨便搜索DS18B20的電路圖,很多的,而且都是用單片機控制。
推薦你一個軟體Proteus,它還有一個論壇,你在Bai搜索Proteus論壇就能看到的,裡面前輩們已經整理了許許多多的模擬實例,包括各種版本的DS18B20,有電路圖,有源程序。自己花點心思琢磨吧,從模仿學習開始。
Ⅱ 求數字溫度計設計方案
我沒做過這個,只能給你個大概的思路.
首先是要用熱敏電阻,通過熱敏電阻把溫度轉化為電壓版,再得到每一度權熱敏電阻的電壓變化值,用LM324運放做成乘法器,使電壓乘以一個比例系數,使一度的變化得到一個整數變化的電壓值,然後送入CC7107進行數模轉換和數字顯示.
Ⅲ 課程設計:基於單片機的數字溫度計的設計
說實話,自己做吧,不難的,理工科的嘛,不多動手出來不好混的。
題目也有點問內題,既然是容數字溫度計,為什麼還要用AD?
採用8031晶元用與中斷程序
通過8155晶元用於8位LED動態顯示電路
這兩個很少用吧,我記得就在微機原理的試驗箱上見過...
你可以搜索DS18B20,大家在學校最常用的數字溫度計,51的程序也一大堆,搜索下就有了。
Ⅳ 用單片機設計數字溫度計
我以前玩了一下,抄大體上我你說的差不多,你可以參考一下,我當時是用匯編寫的,現在用C語言。我發給你了。
其實很簡單,你可以用4個74HC595串連做一個LED靜態顯示電路,或者用1602字元液晶也行,單片機最小系統用一個IO口直接和DS18B20連接就行了。設定溫度的話有兩種方式:
一是用拔碼盤來設定溫度,很多的儀器儀表上也有用到(8421BCD碼的拔碼盤很好買,要多少位可以自由組合,像你這個上下限各用4位組成一組,共2組),這種方法是硬體比較麻煩,但是軟體寫起來很簡單,只要將拔碼盤的值讀進來轉換一下再和DS18B20的數據對比一下就知道有沒有有超過上下限了。
二是用幾個按鍵來設置,如果用按鍵設置的話,建議用內部帶有EEPROM存儲器的單片機,用來存儲設置的上下限值,EEPROM存儲器掉電不丟失,當然你也可以用外部的EEPROM存儲器,像IIC匯流排介面的AT24CXX系列的就可以。
Ⅳ 基於LM35的數字溫度計設計
以上電路僅供參考,程序就請自行在網上搜索
Ⅵ 數字溫度計設計
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint c,d,i,ii,,1,aa,bb,cc,shu,1h,1l;
uchar o,p,q,a,b,x,x1,x2,x3,x4,x5,x6,x7,x8,y1,y2,y3,y4,y5,y6,y7,y8,y,s,r,rr;
uchar flag,mm,nn,ff,jian,add2;
sfr ADC_CONTR=0XBC;
sfr ADC_RES=0XBD;
sfr ADC_RESL=0XBE;
sfr P1ASF=0X9D;
sfr AUXR=0x8E;
sfr AUXR1=0xA2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint temp,,shi,ge,qian;
void display(uint z);
sbit gew=P2^;
sbit shiw=P2^1;
sbit w=P2^2;
sbit qianw=P2^3;
sbit geew=P2^4;
sbit shiew=P2^5;
sbit ew=P2^6;
sbit qianew=P2^7;
uchar add,cb;
sfr IAP_DATA=0xc2;
sfr IAP_ADDRH=0xc3;
sfr IAP_ADDRL=0xc4;
sfr IAP_CMD=0xc5;
sfr IAP_TRIN=0xc6;
sfr IAP_CONTR=0xc7;
void display2(uint z);
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=100;k>0;k--);
}
void anquan()//安全程序,沒什麼用 看資料
{
IAP_ADDRH=0xff;
IAP_ADDRL=0xff;
IAP_CONTR=0x00;
IAP_CMD=0x00;
IAP_TRIN=0x00;
}
void (uchar h,uchar l)//讀
{
IAP_ADDRH=h;
IAP_ADDRL=l;
IAP_CONTR=0x83;
IAP_CMD=0x01;
IAP_TRIN=0x5a;
IAP_TRIN=0xa5;
delay(1);
shu=IAP_DATA;
anquan();
}
void xie(uchar h,uchar l,uchar d)//寫
{
IAP_DATA=d;
IAP_ADDRH=h;
IAP_ADDRL=l;
IAP_CONTR=0x83;
IAP_CMD=0x02;
IAP_TRIN=0x5a;
IAP_TRIN=0xa5;
delay(1);
anquan();
}
void cha(uchar h,uchar l)//察
{
IAP_ADDRH=h;
IAP_ADDRL=l;
IAP_CONTR=0x83;
IAP_CMD=0x03;
IAP_TRIN=0x5a;
IAP_TRIN=0xa5;
delay(1);
anquan();
}
void init4()//初始化定時器
{
TMOD=0x11;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;}
void init()//初始化定時器
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;}
void init3()//初始化判斷各區寫了幾個數
{(0x00,0x30);
ff=shu;
(0x00,0x40);
x1=shu;
(0x00,0x41);
x2=shu;
(0x00,0x42);
x3=shu;
(0x00,0x43);
x4=shu;
(0x00,0x44);
x5=shu;
(0x00,0x45);
x6=shu;
(0x00,0x46);
x7=shu;
(0x00,0x47);
x8=shu;
if(x8==8)x=8;else
if(x7==7)x=7;else
if(x6==6)x=6;else
if(x5==5)x=5;else
if(x4==4)x=4;else
if(x3==3)x=3;else
if(x2==2)x=2;else
if(x1==1)x=1;
(0x02,0x40);
y1=shu;
(0x02,0x41);
y2=shu;
(0x02,0x42);
y3=shu;
(0x02,0x43);
y4=shu;
(0x02,0x44);
y5=shu;
(0x02,0x45);
y6=shu;
(0x02,0x46);
y7=shu;
(0x02,0x47);
y8=shu;
if(y8==8)y=8;else
if(y7==7)y=7;else
if(y6==6)y=6;else
if(y5==5)y=5;else
if(y4==4)y=4;else
if(y3==3)y=3;else
if(y2==2)y=2;else
if(y1==1)y=1;
if(ff!=0xff){nn=0;mm=0;}
else{nn=1;mm=1;}
}
void send()
{
ADC_CONTR=0x80;
delay(1);
ADC_CONTR=0x8f;
delay(5);
if (ADC_CONTR==0X97)
{
ADC_CONTR=0x00;
delay(5);
a=ADC_RES;
b=ADC_RESL;
delay(5);
c=4*a+b;
P3=~a;
d=c*34/10;
}
}
void pq ()//P1.7
{ AUXR1=0x00;
P1ASF=0x80;
ADC_RES=0X00;
ADC_RESL=0X00;
ADC_CONTR=0X80| 0x00 |0x0f | 0;
delay(50);
send();
}
void display(uint z)
{
temp=z;
if (temp>999)q=1;else q=0;
if (temp>99) p=1;else p=0;
if (temp>9) o=1;else o=0;
qian=temp/1000;
=temp%1000/100;
shi=temp%1000%100/10;
ge=temp%10;
if(q==1)
{ qianw=0;
w=1;
shiw=1;
gew=1;
P0=table[qian];
delay(50);}
if(p==1)
{ qianw=1;
w=0;
shiw=1;
gew=1;
P0=table[];
delay(50);}
if(o==1)
{ qianw=1;
w=1;
shiw=0;
gew=1;
P0=0x7f;
delay(50);
P0=table[shi];
delay(50);
}
qianw=1;
w=1;
shiw=1;
gew=0;
P0=table[ge];
delay(50);
gew=1;
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
r++;
if(r==60){r=0;rr=1;}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
ii++;
if(i==24){i=0;}
if(ii==961) {ii=0;}
}
void init2()
{
AUXR1=0x00;
P1ASF=0x40;
ADC_RES=0X00;
ADC_RESL=0X00;
ADC_CONTR=0X80| 0x00 |0x0e | 0;
delay(50);
}
void send2()
{
ADC_CONTR=0x80;
delay(1);
ADC_CONTR=0x8e;
delay(5);
if (ADC_CONTR==0X96)
{
ADC_CONTR=0x00;
delay(5);
aa=ADC_RES;
bb=ADC_RESL;
delay(5);
cc=4*aa+bb;
//dd=4*cc;
}
}
void pl ()//p1.6
{
init2();
send2();
}
void anjian()
{
if((0<=cc)&&(cc<20))flag=1;else
if((20<cc)&&(cc<100))flag=2;else
if((100<cc)&&(cc<200))flag=3;else
if((200<cc)&&(cc<300))flag=4;else
if((300<cc)&&(cc<400))flag=5;else
if((400<cc)&&(cc<500))flag=6;else
if((500<cc)&&(cc<600))flag=7;else
if((600<cc)&&(cc<700))flag=8;
switch(flag)
{
case 0: ;break;//無鍵按下
case 1:jian=1;s=0; break;//第1個按下
case 2:jian=2;s=2; break;//第2個按下
case 3: jian=3;s=4;break;//第3個按下
case 4: jian=4;s=6;break;//第4個按下
case 5:jian=5;s=8;break;//第5個按下
case 6: jian=6;s=10;break;//第6個按下
case 7:jian=7;s=12;break;//第7個按下
case 8: jian=8;s=14;break;//第8個按下
}
}
void main()
{
init();init3();
while(1)
{
pl();
if(cc<800)
{TR0=0;rr=0;
init4();
while(!rr){
init3();
pl();
anjian();
if (ff!=0xff)
{
if(jian>y)
{
(0x00,s);1h=shu;(0x00,(s+1));1l=shu;=((1h*4+1l)*34)/10;
}else
{
(0x02,s);1h=shu;(0x02,(s+1));1l=shu;=(1h*4+1l)*34/10;
}
}
else
{
if(jian>x)
{
(0x02,s);1h=shu;(0x02,(s+1));1l=shu;=((1h*4+1l)*34)/10;
}else
{
(0x00,s);1h=shu;(0x00,(s+1));1l=shu;=((1h*4+1l)*34)/10;
}
}
display2();
}
}
TR0=1;
TR1=0;
if(i==23)
{ pq();}
display(d);
if(mm==1){
if(ii==120)
{
cha(0x00,0x00);
delay(10);
xie(0x00,0x00,a);
xie(0x00,0x01,b);
add++;
xie(0x00,0x40,add);
}else
if(ii==240)
{
xie(0x00,0x02,a);
xie(0x00,0x03,b);
add++;
xie(0x00,0x41,add);
}else
if(ii==360)
{
xie(0x00,0x04,a);
xie(0x00,0x05,b);
add++;
xie(0x00,0x42,add);
}else
if(ii==480)
{
xie(0x00,0x06,a);
xie(0x00,0x07,b);
add++;
xie(0x00,0x43,add);
}else
if(ii==600)
{
xie(0x00,0x08,a);
xie(0x00,0x09,b);
add++;
xie(0x00,0x44,add);
}else
if(ii==720)
{
xie(0x00,0x0a,a);
xie(0x00,0x0b,b);
add++;
xie(0x00,0x45,add);
}else
if(ii==840)
{
xie(0x00,0x0c,a);
xie(0x00,0x0d,b);
add++;
xie(0x00,0x46,add);
}else
if(ii==960)
{
xie(0x00,0x0e,a);
xie(0x00,0x0f,b);
xie(0x00,0x30,0x05);
add++;
xie(0x00,0x47,add);
if(add==8){add=0;}
mm=0;
}
}else
if(mm==0)
{
if(ii==120)
{
cha(0x02,0x00);
xie(0x02,0x00,a);
xie(0x02,0x01,b);
add2++;
xie(0x02,0x40,add2);
}else
if(ii==240)
{
xie(0x02,0x02,a);
xie(0x02,0x03,b);
add2++;
xie(0x02,0x41,add2);
}else
if(ii==360)
{
xie(0x02,0x04,a);
xie(0x02,0x05,b);
add2++;
xie(0x02,0x42,add2);
}else
if(ii==480)
{
xie(0x02,0x06,a);
xie(0x02,0x07,b);
add2++;
xie(0x02,0x43,add2);
}else
if(ii==600)
{
xie(0x02,0x08,a);
xie(0x02,0x09,b);
add2++;
xie(0x02,0x44,add2);
}else
if(ii==720)
{
xie(0x02,0x0a,a);
xie(0x02,0x0b,b);
add2++;
xie(0x02,0x45,add2);
}else
if(ii==840)
{
xie(0x02,0x0c,a);
xie(0x02,0x0d,b);
add2++;
xie(0x02,0x46,add2);
}else
if(ii==960)
{
xie(0x02,0x0e,a);
xie(0x02,0x0f,b);
xie(0x02,0x30,0x05);
add2++;
xie(0x02,0x47,add2);
if(add2==8){add2=0;}
mm=1;
}
}
}
}
void display2(uint z)
{
temp=z;
if (temp>999)q=1;else q=0;
if (temp>99) p=1;else p=0;
if (temp>9) o=1;else o=0;
qian=temp/1000;
=temp%1000/100;
shi=temp%1000%100/10;
ge=temp%10;
if(q==1)
{ qianew=0;
ew=1;
shiew=1;
geew=1;
P0=table[qian];
delay(50);}
if(p==1)
{ qianew=1;
ew=0;
shiew=1;
geew=1;
P0=table[];
delay(50);}
if(o==1)
{ qianew=1;
ew=1;
shiew=0;
geew=1;
P0=0x7f;
delay(50);
P0=table[shi];
delay(50);
}
qianew=1;
ew=1;
shiew=1;
geew=0;
P0=table[ge];
delay(50);
geew=1;
Ⅶ 急求!!!!數字溫度計課程設計
說實話,要完來全一樣的現成答源案在這里很難的,除非運氣好碰到一個做過類似實例的人就給你了。
這個問題用單片機可以做,用可編程器件和VHDL編程也可以做。這我都會,但是要我花那多時間做好瞭然後用protel99se畫好電路圖給你,這根本不可能,誰搞那麼累啊。
最好的辦法還是自己到網上去搜,下載來改改試試,這樣最快。 網上像數字溫度計,數字頻率計,數字秒錶,數字定時器都很多的。
Ⅷ 數字溫度計的設計
ICL7107是數字表專用晶元,這里可以用它來測量溫度。可以下載它的PDF文檔,裡面有典型應用電路和相關內的容設計資料。
1.溫度感測器看用途而定,搜索關鍵詞;
2.調理電路:以0-200℃為測量范圍,根據溫度感測器的輸出電壓而定;
3.片內集成3位半AD轉換器;
4.市售任意4位共陽LED數碼管(帶小數點),接法請搜索關鍵詞:
著重討論下感測器選擇和信號調理部分:
感測器選擇:(可以聯系供應商為你專業指導,這里只是提供參考)
1.使用環境:如果測室溫,那麼感測器可以在溫度計內部,這時,使用裸熱敏電阻,如果要測液體,高溫環境,可用熱電偶
2.溫度范圍:看你的描述,至少要能到200℃的溫度
3.測量精度,成本:根據具體的應用有不同要求
信號調理:
也許很麻煩,但只要記住一件事,就好:ICL7107的有效信號輸入范圍是0-200mV
所以,需要將0-200℃的溫度變化對應到0-200mV的輸入范圍