單片機熱敏電阻測溫
源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sfr P1ASF=0x9d;
- sfr ADC_RES=0xbd;
- sfr ADC_CONTR=0xbc;
- #define ADC_POWER 0x80
- #define ADC_FLAG 0x10
- #define ADC_START 0x08
- #define ADC_SPEEDLL 0x00 //0000 0000
- #define ADC_SPEEDL 0x20 //0010 0000
- #define ADC_SPEEDH 0x40 //0100 0000
- #define ADC_SPEEDHH 0x60 //0110 0000
- void delay(uint z); //延時函數
- void initADC(); //初始化AD功能
- uint code Ttable[42][2]={// 此數組保存熱敏電阻的溫度值(從2-43攝氏度),2℃對應25.7K;超出無效
- {2,257},{3,246},{4,236},{5,225},{6,216},
- {7,207},{8,198},{9,190},{10,182},{11,174},
- {12,167},{13,160},{14,154},{15,148},{16,142},
- {17,136},{18,131},{19,126},{20,121},{21,116},
- {22,112},{23,107},{24,103},{25,100},{26,96},
- {27,92},{28,89},{29,86},{30,82},{31,80},{32,77},
- {33,74},{34,71},{35,69},{36,66},{37,64},{38,62},
- {39,60},{40,58},{41,56},{42,54},{43,52}
- };
- uchar code table[13]={//共陰 數碼管數字0-9
- 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,0x7D, 0x07, 0x7F, 0x6F/*0-9*/,
- 0x00/*無*/, 0x02/*|*/, 0x39/*C*/,};
- uchar code table_wela [4]={//數碼管位置0-3
- 0xef,0xdf,0xbf,0x7f};//1110 1111; 1101 1111; 1011 1111; 0111 1111
-
- uchar show[4];
- void delay(uint z)
- {
- uint x,y;
- for(x=20;x>0;x--)
- for(y=z;y>0;y--);
- }
- /****************************************************
- 函數名稱 : void adc_isr() interrupt 5
- 功能描述 : AD 中斷 , 獲取 AD 數據
- 輸 入 : 無
- 輸 出 : show
- 全局變量 : show
- 調用模塊 : delay **************************/
- void Adc_isr() interrupt 5//Interrupt Service Routines=ISR中斷服務程序
- {
- uchar i;
- uint m;
- m=ADC_RES; // 計算此時熱敏電阻阻值
- m=(100*m)/(255-m); // 計算此時的溫度值
- for(i=41;i<42;i--)
- {
- if(m>=Ttable[i][1]&&m<Ttable[i-1][1])
- {
- show[0]=(Ttable[i][0]+1)/10; //十位
- show[1]=(Ttable[i][0]+1)%10; //個位
- show[2]=11; //溫度符號
- show[3]=12;
- break;
- }
- }
- ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0x01; // 重新 使能 AD 轉換
- }
- /******************************************************
- 函數名稱 : void initADC()
- 功能描述 : 初始化 AD 功能
- 輸 入 : 無
- 輸 出 : 無
- 全局變量 : 無
- 調用模塊 : delay *********************************************************/
- void initADC()
- {
- P1ASF=0xff;
- ADC_RES=0;
- delay(800);
- ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0x01;// 使能 P11 為 AD 輸入
- IE=0xa0;//1010 0000等價于: EA=1; EADC=1;
- delay(5);
- }
- void main()
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
附源碼-單片機設計之熱敏電阻測溫.rar
(1.33 KB, 下載次數: 85)
2018-1-21 11:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|