溫度控制器程序_第1頁
溫度控制器程序_第2頁
溫度控制器程序_第3頁
溫度控制器程序_第4頁
溫度控制器程序_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、溫度控制器程序/PT100自身溫度范圍#defineM_temper_MIN-200#defineM_temper_MAX500最低溫度最高溫度/CPU引腳定義#defineP_LEDP0sbitLED_S1=P2八0;sbitLED_S2=P2八1;sbitLED_S3=P2八2;/LED1位選/LED2位選/LED3位選/LED4位選sbitLED_S4=P2八3;sbit KEY_S1 = P1 八 0;上下限溫度設(shè)置sbitKEY_S2=P1八1;溫度加sbitKEY_S3=P1八2;溫度減全局變量寄存器ucharM_LED1,M_LED2,M_LED3,M_LED4;/4位LED顯示

2、寄存器ucharLED_DISP_TAB口=/LED編碼表0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,/0-90X40,0X23,0X1c,0X58字符:-nuc;uchar Set_count;uchar T0_count;uint T1_count;char M_temper_up;char M_temper_down;char M_temper_AI;char M_temper_conver;bit B_set,B_set_AI;溫度設(shè)置按鈕計數(shù)/T0定時中斷計數(shù)/T1定時中斷計數(shù)溫度上限溫度下限設(shè)置中溫度當前溫度溫度設(shè)置標志bit

3、B_set_T0,B_set_T1;定時器中斷標志函數(shù)聲明voidT1int_init();/*定時器T1初始化:設(shè)置工作方式賦初值開啟中斷*/voidT0int_init();/*定時器T0初始化:設(shè)置工作方式賦初值開啟中斷*/voidSet_temper();/*設(shè)置上下限溫度:按鍵次數(shù)=1:顯示上限溫度并處于操作狀態(tài)按鍵次數(shù)=2:顯示下限溫度并處于操作狀態(tài)按鍵次數(shù)=3:保存設(shè)置值并退出*/voidInc_temper();/*提高設(shè)置的溫度*/voidDec_temper();/*降低設(shè)置的溫度*/voidLED_data_BCD(charDisp_dat);/*數(shù)碼管顯示溫度*/voi

4、dPT100_delay(uintcount);/*PT100延時程序*/voidPT100_reset(void);/*PT100復位初始程序:根據(jù)PT100要求對其進行復位初始控制*/bitPT100_readbit(void);/*PT100位讀子程序:從PT100取出一位數(shù)據(jù)*/ucharPT100_readbyte(void);/*PT100字節(jié)讀子程序:返回數(shù)據(jù)值*/讀出的一字節(jié)數(shù)據(jù)并voidPT100_writebyte(uchardat);/*PT100字節(jié)寫子程序:將輸入?yún)?shù)值寫入PT100*/voidPT100_change(void);/啟動PT100溫度轉(zhuǎn)換ucharP

5、T100_Gettemper(void);/*讀取PT100溫度數(shù)據(jù):單線方式讀取PT100轉(zhuǎn)換的溫度數(shù)據(jù),并返回處理后的溫度值*/延時子voidDelay_ms(uintcount);程序:延時count(ms)voidmain()ucharM_temper_curr;SP=0x50;堆棧起始地址M_temper_up=100;初始溫度上下限M_temper_down=0;Delay_ms(500);T0int_init();/T0T1初始化T1int_init();while(1)if(B_set_T0)/T0定時讀取溫度標志EA=0;關(guān)總中斷B_set_T0=0;if(!B_set)上下

6、限設(shè)置狀態(tài)時,取消溫度讀取PT100_change();讀取溫度M_temper_curr=PT100_Gettemper();M_temper_conver=(M_temper_curr>126?(127-M_temper_curr):M_temper_curr);轉(zhuǎn)換正負溫度LED_data_BCD(M_temper_conver);轉(zhuǎn)換LED顯示EA=1;if(B_set_T1)T1定時LED顯示掃描標志TR1=0;B_set_T1=0;+T1_count;switch(T1_count)依次顯示4位LEDcase1:LED_S4=1;P_LED=LED_DISP_TABM_LED

7、1;LED_S1=0;break;case 2:LED_S1=1;P_LED=LED_DISP_TABM_LED2;LED_S2=0;break;case 3:LED_S2=1;P_LED=LED_DISP_TABM_LED3;LED_S3=0;break;case 4:LED_S3=1;P_LED=LED_DISP_TABM_LED4;LED_S4=0;T1_count=0;break;TR1=1;開T1定時器if(M_temper_conver>M_temper_down)&&(M_temper_conver<M_temper_up)/溫度在上下限范圍內(nèi)BUZZ

8、=B_BUZZ_OFF;RED_ALARM=B_RED_OFF;GREEN_ALARM=B_GREEN_OFF;elseBUZZ=B_BUZZ_ON;if(M_temper_conver<M_temper_down)RED_ALARM=B_RED_ON;低于下限溫度elseGREEN_ALARM=B_GREEN_ON;高于上限溫度if(!KEY_S1)按鍵檢測Set_temper();/設(shè)置溫度Delay_ms(200);if(B_set)if(!KEY_S2)Inc_temper();溫度加Delay_ms(200);if(!KEY_S3)Dec_temper();溫度減Delay_m

9、s(200);voidSet_temper()設(shè)置溫度+Set_count;B_set=1;設(shè)置標志if(Set_count=1)設(shè)置上限B_set_AI=0;LED_data_BCD(M_temper_up);M_temper_AI=M_temper_up;將原上限溫度取出設(shè)置下elseif(Set_count=2)限B_set_AI=1;M_temper_up=M_temper_AI;存入新的上限溫度LED_data_BCD(M_temper_down);M_temper_AI將原下限溫度取出=M_temper_down;/else確認退出B_set=0;Set_count=0;LED_d

10、ata_BCD(M_temper_conver);M_temper_down存入新的下限溫度M_temper_AI;void Inc_temper()溫度加if (B_set_AI)限(0)還是下限(1)判斷當前是設(shè)置上if(M_temper_AI<M_temper_MAX)&&(M_temper_AI<M_temper_up)M_temper_AI+;不能加到上線溫度和溫度范圍elseif(M_temper_AI<M_temper_MAX)M_temper_AI+;LED_data_BCD(M_temper_AI);溫度減判斷當前是設(shè)置voidDec_tem

11、per()if(B_set_AI)上限(0)還是下限(1)if(M_temper_AI>M_temper_MIN)M_temper_AI-;elseif(M_temper_AI>M_temper_MIN)&&(M_temper_AI>M_temper_down)M_temper_AI-;PT100特LED_data_BCD(M_temper_AI);voidPT100_delay(uintcount)定延時uinti;while(count)i=200;while(i>0)count-;voidPT100_reset(void)/PT100復位初始uin

12、ti;DQ=0;i=103;while(i>0)i-;DQ=1;i=4;while(i>0)i-;bitPT100_readbit(void)/PT100位讀子程序uinti;bitdat;DQ=1;_nop_();DQ=0;i+;DQ=1;i+;i+;dat=DQ;i=8;while(i>0)i-;return(dat);ucharPT100_readbyte(void)/PT100字節(jié)讀子程序uchari,j,dat;dat=0;for(i=1;i<=8;i+)j=PT100_readbit();dat=(j<<7)|(dat>>1);把讀取

13、的數(shù)據(jù)一位一位放進去return(dat);voidPT100_writebyte(uchardat)/PT100字節(jié)寫子程序uinti;ucharj;bittestb;for(j=1;j<=8;j+)testb=dat&0x01;dat=dat>>1;if(testb)/write1(DQ=0;i+;i+;DQ=1;i=8;while(i>0)i-;)elseDQ=0;(/write0i=8;while(i>0)i-;DQ=1;i+;i+;voidPT100_change(void)啟動PT100溫度轉(zhuǎn)換PT100_reset();PT100_delay

14、(1);PT100_writebyte(0xcc);PT100_wMtebyte(0x44);讀取ucharPT100_Gettemper()PT100溫度數(shù)據(jù)uinttemp;ucharM_temper_L=0,M_temper_H=0;PT100_reset();PT100_delay(1);PT100_writebyte(0xcc);PT100_writebyte(0xbe);M_temper_L=PT100_readbyte();M_temper_H=PT100_readbyte();temp=M_temper_H;溫度數(shù)據(jù)處理temp<<=8;temp=temp|M_te

15、mper_L;if(M_temper_H>0xf0)/正(0)負(1)溫度值temp=(0x1000-(temp&0x0fff)/16)+127;計算溫度elsetemp=temp/16;M_temper_H=temp;returnM_temper_H;voidLED_data_BCD(charDisp_dat)顯示數(shù)據(jù)LED編碼處理if(Disp_dat<0)負溫度M_LED1=0X0a;/調(diào)用第10個M_LED2=(0-Disp_dat)/10;M_LED3=(0-Disp_dat)%10;elseM_LED1=Disp_dat/100;正溫度M_LED2=(Disp_

16、dat%100)/10;M_LED3=(Disp_dat%100)%10;if(B_set)/設(shè)置狀態(tài)時顯示字符if(B_set_AI)M_LED4=0x0c;elseM_LED4=0x0b;elseM_LED4=0x0d;voidT0int_init()定時器T0初始化TMOD=0X11;TH0=(65536-XTAL/12q0_TIMER)/256;TL0=(65536-XTAL/12叮0_TIMER)%256;EA=1;ET0=1;TR0=1;voidT1int_init()定時器T1初始化TMOD=0X11;TH1=(65536-XTAL/12q1_TIMER)/256;TL1=(65536-XTAL/12叮1_TIMER)%256;EA=1;ET1=1;TR1=1;延時countvoidDelay_ms(uintcount)(ms)uinti;while(-count>0)for(i=0;i<125;i+);voidTimer0()inter

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論