|
不能顯示,無顯示!原貼KEX可以顯示溫度!但無按鍵!
- #define MAIN_Fosc 24000000L
- #include <STC15W.h>//STC15W408AS頭文件
- #include <intrins.h>
- sbit Key_Tup = P3^1;
- sbit Key_Tdown = P3^2;
- sbit Key_Confirm = P3^3;
- unsigned int NTC_R;//定義熱敏電阻阻值變量
- unsigned char temperature;//定義溫度存儲(chǔ)變量
- unsigned int code Ttable[106][2]={//溫度與電阻阻值對應(yīng)關(guān)系表格
- 0,3274,//0度對應(yīng)阻值32.74k
- 1,3111,//1度對應(yīng)阻值31.11k
- 2,2957,//2度對應(yīng)阻值29.57k
- 3,2812,//
- 4,2674,//
- 5,2545,
- 6,2422,
- 7,2306,
- 8,2196,
- 9,2092,
- 10,1993,
- 11,1900,
- 12,1811,
- 13,1728,
- 14,1648,
- 15,1573,
- 16,1501,
- 17,1433,
- 18,1369,
- 19,1308,
- 20,1250,
- 21,1194,
- 22,1142,
- 23,1092,
- 24,1045,
- 25,1000,//25度對應(yīng)阻值10k
- 26,957,//26度對應(yīng)阻值9.57k
- 27,916,
- 28,877,
- 29,840,
- 30,805,
- 31,771,
- 32,739,
- 33,709,
- 34,679,
- 35,652,
- 36,625,
- 37,600,
- 38,576,
- 39,553,
- 40,531,
- 41,510,
- 42,490,
- 43,471,
- 44,453,
- 45,435,
- 46,418,
- 47,402,
- 48,387,
- 49,372,
- 50,358,
- 51,345,
- 52,332,
- 53,320,
- 54,308,
- 55,297,
- 56,286,
- 57,276,
- 58,266,
- 59,256,
- 60,247,
- 61,238,
- 62,230,
- 63,222,
- 64,214,
- 65,207,
- 66,199,
- 67,193,
- 68,186,
- 69,180,
- 70,174,
- 71,168,
- 72,162,
- 73,157,
- 74, 152,
- 75, 147,
- 76, 142,
- 77, 137,
- 78, 133,
- 79, 128,
- 80, 124,
- 81, 120,
- 82, 116,
- 83, 113,
- 84, 109,
- 85, 106,
- 86, 102,//86度對應(yīng)阻值1.02k
- 87, 99,//87度對應(yīng)阻值0.99k
- 88, 96,
- 89, 93,
- 90, 90,
- 91, 88,
- 92, 85,
- 93, 82,
- 94, 80,
- 95, 78,
- 96, 75,
- 97, 73,
- 98, 71,
- 99, 69,
- 100,67,
- 101,65,
- 102,63,
- 103,61,
- 104,59,
- 105,58//105度對應(yīng)阻值0.58k
-
- };
- #include<4LED_YIN.H>//數(shù)碼管驅(qū)動(dòng)顯示程序
- #include <BandGap.H>//包含讀單片機(jī)內(nèi)部BandGap基準(zhǔn)電壓值
- void T_dis(){//溫度處理函數(shù)采集到的阻值與二維數(shù)組的阻值進(jìn)行比較,
- //從而獲得相對應(yīng)的溫度值。
- unsigned char i;
- for(i=105;i<106;i--) {
- if(NTC_R >= Ttable[i][1] && NTC_R < Ttable[i-1][1]){
- temperature=(Ttable[i][0]+1);
- break;
- }
- }
- }
- char SetT = 40; //設(shè)定溫度初始化為 40 攝氏度1!!!
- float RealT = 25; //實(shí)際溫度初始化為 25 攝氏度2!!!
- void SetTemperature(); //設(shè)定溫度 3!!!
- void KeyScan(); //按鍵掃描 4!!!
- void SetTdisp(); //設(shè)定溫度顯示5!!!
- void RealTdisp(); //實(shí)際溫度顯示6!!!
- /********************************/
- void main (void)
- { Delay20ms();//待系統(tǒng)穩(wěn)定
- InitADC();//初始化ADC
- P1M1=0X80;//P1.7高阻輸入
- init();//IO口設(shè)置初始化
- SetTdisp(); //設(shè)定溫度顯示10!!!
- while (1)
- {
-
- SetTemperature(); //設(shè)定溫度8!!!
-
- ShowResult(7);//測量NTC熱敏電阻上的電壓并根據(jù)電壓計(jì)算出阻值
- T_dis();//測量到的阻值進(jìn)行查表對比找到阻值對應(yīng)的溫度值
- disp(); //數(shù)碼管顯示溫度值
-
- RealTdisp(); //實(shí)際溫度顯示11!!!
- }
- }
- void SetTemperature() //設(shè)定溫度
- {
- if( !(Key_Tup & Key_Tdown) ) //檢測 升溫/降溫 按鍵是否按下
- { //進(jìn)入設(shè)定溫度過程
- uchar i,j;
- do
- {
- KeyScan(); //按鍵掃描
-
- for(i=0;i<2;i++) //設(shè)定溫度閃爍顯示,用來指示設(shè)定溫度過程
- { //實(shí)際溫度常量
- if( i==0 ) //設(shè)定溫度顯示
- for(j=0;j<20;j++)
- {
- diplay_data (4,disdata[SetT/100]);//溫度十位
- diplay_data (3,disdata[SetT/10]);//溫度十位
- diplay_data (2,disdata[SetT%10]);//溫度個(gè)位
- diplay_data (1,disdata[17]);//溫度符號(hào)℃
- }
-
- if( i==1 ) //設(shè)定溫度不顯示
- for(j=0;j<20;j++)
- {
- delay1ms();
- delay1ms();
- diplay_data (4,disdata[SetT/100]);//溫度十位
- diplay_data (3,disdata[SetT/10]);//溫度十位
- diplay_data (2,disdata[SetT%10]);//溫度個(gè)位
- diplay_data (1,disdata[17]);//溫度符號(hào)℃
-
-
-
- }
-
- }
- }while(Key_Confirm); //直到確認(rèn)鍵按下,退出設(shè)定溫度過程
- }
- return;
- }
- void KeyScan() //按鍵掃描
- {
- static uchar flag = 0; //設(shè)置標(biāo)志位
- if( !(Key_Tup & Key_Tdown) ) //檢測 升溫/降溫 按鍵是否按下
- {
- if(!flag) //標(biāo)志位為0時(shí)才進(jìn)行 升溫/降溫,產(chǎn)生延時(shí)效果
- { //防止按鍵按下過程中 升溫/降溫 多次,同時(shí)不占用CPU
- if(!Key_Tup) //升溫
- {
- SetT++;
- if(SetT > 99)
- SetT = 0;
- }
- if(!Key_Tdown) //降溫
- {
- SetT--;
- if(SetT < 0)
- SetT = 0;
- }
- }
-
- flag++; //標(biāo)志位加一
- if(flag == 15); //標(biāo)志位加到15清零
- flag = 0;
- }
- else //無按鍵按下,標(biāo)志位清零
- flag = 0;
- return;
- }
- void SetTdisp() //設(shè)定溫度顯示
- { unsigned int i;
- for(i=0;i<50;i++)
- {
- diplay_data (4,disdata[SetT/100]);//溫度十位
- diplay_data (3,disdata[SetT/10]);//溫度十位
- diplay_data (2,disdata[SetT%10]);//溫度個(gè)位
- diplay_data (1,disdata[17]);//溫度符號(hào)℃
- }
- return;
- }
- void RealTdisp() //實(shí)際溫度顯示
- {
- unsigned int i;
- for(i=0;i<50;i++){
- diplay_data (4,disdata[temperature/100]);//溫度十位
- diplay_data (3,disdata[temperature/10]);//溫度十位
- diplay_data (2,disdata[temperature%10]);//溫度個(gè)位
- diplay_data (1,disdata[17]);//溫度符號(hào)℃
- }
- return;
- }
復(fù)制代碼
|
|