|
使用鉑熱電阻PT100,其阻值會(huì)隨著溫度的變化而改變。PT后的100即表示它在0℃時(shí)阻值為100歐姆,在100℃時(shí)它的阻值約為138.5歐姆。廠家提供有PT100在各溫度下電阻值值的分度表,在此可以近似取電阻變化率為 0.385Ω/℃。向PT100輸入穩(wěn)恒電流,再通過(guò)A/D轉(zhuǎn)換后測(cè)PT100兩端電壓,即得到PT100的電阻值,進(jìn)而算出當(dāng)前的溫度值。
采用2.55mA的電流源對(duì)PT100進(jìn)行供電,然后用運(yùn)算放大器LM324搭建的同相放大電路將其電壓信號(hào)放大25倍后輸入到AD0804中。利用電阻變化率0.385Ω/℃的特性,計(jì)算出當(dāng)前溫度值。
溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖2-1所示。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include<reg51.h>
- #include <intrins.h>
- #define Disdata P3
- #define discan P0
- sbit adrd=P2^7; //IO口定義
- sbit adwr=P2^6;
- sbit csad=P2^4;
- sbit DIN=P3^7; //LED小數(shù)點(diǎn)控制
- unsigned char j,k,ad_data,t;
- unsigned char dis[4]={0x00,0x00,0x00,0x00};
- unsigned char code dis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x40};
- /* 共陽(yáng)LED段碼表對(duì)應(yīng) "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */
- unsigned char code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; // 列掃描控制字
- void delay(unsigned int t)
- {
- for(;t>0;t--)
- {
- ;
- }
- } //11微秒延時(shí)函數(shù)
- void scan()
- {
- char k;
-
- for(k=0;k<4;k++) //四位LED掃描控制
- {
- Disdata=dis_7[dis[k]];
- if(k==1)
- {
- DIN=1; //加入小數(shù)點(diǎn)
- }
- discan=scan_con[k];
- delay(90);
- discan=0xff;
- }
- }
- void ad0804()
- {
- P1=0xff; //讀取P1口之前先給其寫全1
- csad=0; //選通ADCS
- adrd=0; //AD讀使能
- ad_data=P1; //AD數(shù)據(jù)讀取賦給P1口
- adrd=1;
- csad=1; //關(guān)閉ADCS
- adwr=0;
- }
- void ad_compute() //u=2.55+T/100, 2.55反映在AD上為0x83
- {
- unsigned char t_temp;
- //if(ad_data>=0x83)
- //{
- ad_data=ad_data-0x83;
- t_temp=ad_data*2-4;
- if(t_temp<=110)
- {
- dis[3]=t_temp/100;
- dis[2]=t_temp/10-dis[3]*10;
- dis[1]=t_temp%10;
- dis[0]=t%5*2;
- }
- else
- {
- t_temp=256-t_temp;
- dis[3]=11;
- dis[2]=t_temp/10;
- dis[1]=t_temp%10;
- dis[0]=t%5*2;
- }
- //
- // }
- }
- void main() // 主程序
- {
- while(1)
- {
- ad0804();
- ad_compute();
- scan();
- }
- }
復(fù)制代碼
Proteus仿真和參考文檔下載:
51熱敏電阻運(yùn)放溫度計(jì).zip
(607.77 KB, 下載次數(shù): 184)
2022-5-3 00:47 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|