紅外恒溫控制器的設(shè)計(jì)與制作_第1頁
紅外恒溫控制器的設(shè)計(jì)與制作_第2頁
紅外恒溫控制器的設(shè)計(jì)與制作_第3頁
紅外恒溫控制器的設(shè)計(jì)與制作_第4頁
紅外恒溫控制器的設(shè)計(jì)與制作_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、天 津 大 學(xué) 網(wǎng) 絡(luò) 教 育 學(xué) 院??飘厴I(yè)論文題目:紅外恒溫控制器的設(shè)計(jì)與制作完成期限:2016年1月8日 至 2016年4月20日學(xué)習(xí)中心:嘉興專業(yè)名稱:電氣自動(dòng)化技術(shù)學(xué)生姓名:陳連鳳學(xué)生學(xué)號(hào):132092433046指導(dǎo)教師:李娜娜紅外恒溫控制器的設(shè)計(jì)與制作溫度的測量和控制是日常生活和生產(chǎn)實(shí)踐中常見的課題,恒溫控制器會(huì)受到很多因素的影響例如環(huán)境因素、經(jīng)濟(jì)因素、政策因素、市場因素等等。在這里我們只設(shè)計(jì)一種低功率、低成本的恒溫控制器,這種恒溫控制器在一些小型家電中經(jīng)常用到,它的工作額定電壓為AC220V/50HZ,可以由用戶自行設(shè)定控制溫度和控制時(shí)間,采用的芯片管腳少,外圍電路簡單,但可以

2、實(shí)現(xiàn)較復(fù)雜的功能。不同的狀態(tài)可以通過蜂鳴器不同的聲音提示進(jìn)行判斷,通過數(shù)碼管顯示控制時(shí)間和計(jì)時(shí),通過按鍵啟動(dòng)工作和設(shè)定時(shí)間,通過單片機(jī)控制原理控制溫度,升溫至規(guī)定值開始恒溫,并有相應(yīng)LED燈指示。在此之外我們還設(shè)置了幾個(gè)按鍵,用這些按鍵進(jìn)行控制設(shè)定的溫度值,主要是加減功能鍵,功能是進(jìn)行設(shè)置溫度的升高和降低。當(dāng)不使用按鍵功能時(shí),系統(tǒng)為實(shí)時(shí)顯示,可以設(shè)定顯示間隔時(shí)間。當(dāng)有按鍵按下時(shí),設(shè)定某時(shí)刻某個(gè)溫度值時(shí),將箱內(nèi)的溫度控制在此時(shí)溫度。但是,當(dāng)傳感器讀取箱內(nèi)溫度低于或高于該設(shè)定溫度時(shí),可以根據(jù)實(shí)際溫度與設(shè)定溫度之間的偏差輸出兩組PWM信號(hào)分別控制發(fā)熱和制冷器件,從而達(dá)到箱內(nèi)溫度的恒定。第一章 系統(tǒng)的

3、硬件組成與設(shè)計(jì)1.1 系統(tǒng)的硬件組成系統(tǒng)硬件組成有單片機(jī)控制系統(tǒng)、前向通道、后向通道三個(gè)主要的功能模塊,總體框圖如圖1所示。 信號(hào)放大器單片機(jī)控制系統(tǒng)鍵盤顯示A/D轉(zhuǎn)換換電路溫度傳感器圖11.2系統(tǒng)的硬件設(shè)計(jì)單片機(jī)基本系統(tǒng)以AT89C51為核心,主要通過A/D、LED顯示和按鍵完成數(shù)據(jù)采集、溫度顯示、溫度設(shè)定功能,并完成控制信號(hào)的輸出。系統(tǒng)前向通道是信息采集的通道,主要包括由溫度傳感器PT100,運(yùn)算放大器和電阻組成的信號(hào)轉(zhuǎn)換與放大電路、ADC組成的信號(hào)采集電路和單片機(jī)組成的信號(hào)處理電路。溫度經(jīng)溫度傳感器和信號(hào)放大電路產(chǎn)生0-5V的模擬電壓信號(hào)送入A/D轉(zhuǎn)換器的輸入端,A/D轉(zhuǎn)換器將模擬量轉(zhuǎn)化

4、為數(shù)字量通過系統(tǒng)總線送入單片機(jī)進(jìn)行運(yùn)算處理。后向通道是控制信號(hào)的輸出通道,主要由功率放大電路,雙向晶閘管,電熱裝置等組成,單片機(jī)輸出的控制信號(hào)通過按鍵功能并顯示在液晶顯示器上,并通過加熱控制電路實(shí)現(xiàn)溫度的控制。第二章 硬件設(shè)計(jì)部件選擇及功能介紹 為了降低成本和避免過于復(fù)雜的電路,此系統(tǒng)所用的元器件均為常用的電子器件。主控制器采用單片機(jī)AT89C51,溫度傳感器采用PT100,采用控制端TTL電平,即可實(shí)現(xiàn)對(duì)繼電器的開和關(guān),使用時(shí)完全可以使用NPN型三極管結(jié)成電壓跟隨器,這種形式下完成驅(qū)動(dòng);單片機(jī)所用的+5V工作電源是通過220V交流電壓通過變壓、整流、穩(wěn)壓、濾波得到。實(shí)時(shí)控制的顯示器、鍵盤通過

5、單片機(jī)來完成鍵盤掃描與輸出動(dòng)態(tài)顯示。下面對(duì)硬件電路做具體設(shè)計(jì)。2.1 AT89C51單片機(jī)2.1.1 AT89C51單片機(jī)功能簡介AT89C51是一種低功耗,高性能的片內(nèi)含有4KB快閃可編程/擦除只讀存儲(chǔ)器(FPEROMFlash Programmable and Erasable Read Only Memory)的8位COMS微控制器,使用高密度,非易失存儲(chǔ)技術(shù)制造,并且與80C51引腳和指令系統(tǒng)完全兼容。芯片上的FPEROM允許在線編程或采用通用的非易失存儲(chǔ)編程器對(duì)存儲(chǔ)器重復(fù)編程。 AT89C51(以下簡稱89C51)將具有多種功能的8位CPU與FPEROM結(jié)合在一個(gè)芯片上,為很多嵌入式

6、控制應(yīng)用提供了非常靈活而又便宜的方案,其性能價(jià)格比遠(yuǎn)高于8751。由于片內(nèi)帶EPROM的87C51價(jià)格偏高,而片內(nèi)帶FPEROM的89C51價(jià)格低且與INTEL80C51兼容,這就顯示出了89C51的優(yōu)越性。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器。89C51有40個(gè)引腳,有32個(gè)輸入端口(I/O),2個(gè)讀/寫端口,程序存儲(chǔ)器可以擦出。422.1.2 AT89C51單片機(jī)信號(hào)引腳介紹輸入輸出口線:P0.1-P0.7 P0口8位三態(tài)I/O口P1.0-P1.7 P1口8位雙向I/O口P2.0-P2.7 P2口8位雙向I/O口 P3.0-P3.

7、7 P3口8位雙向I/O口主電源引腳(2根)VCC:電源輸入,接+5V電源GND:接地線外接晶振引腳(2根)XTAL1:片內(nèi)晶振電路的輸入端XTAL2:片內(nèi)晶振電路的輸出端控制引腳(4根)RST/VPP:復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。ALE/PROG:地址所存允許信號(hào)。PSEN:外部存儲(chǔ)器讀選通訊信號(hào)。EA/VPP:程序存儲(chǔ)器的內(nèi)外部選通,接低電平從外部程序存儲(chǔ)器讀指令,如果接高電平則從內(nèi)部程序存儲(chǔ)器讀指令2.1.3 AT89C51單片機(jī)時(shí)鐘和復(fù)位電路1、 時(shí)鐘電路:單片機(jī)內(nèi)部有一個(gè)高增益反向放大器,輸入端引腳為XTAL1,輸出端引腳為XTAL2。而在芯片外部XTAL

8、1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。晶體振蕩頻率高,則系統(tǒng)的時(shí)鐘頻率也高,單片機(jī)運(yùn)行速度也就快,但反過來運(yùn)行速度快對(duì)存儲(chǔ)器的速度要求就高,對(duì)印制電路板的要求也高,所以,這里使用振蕩頻率為6MHZ的石英晶體。振蕩電路產(chǎn)生的振蕩脈沖并不直接使用,而是經(jīng)分頻后再為系統(tǒng)所用,震蕩脈沖經(jīng)過二分頻后才作為系統(tǒng)的時(shí)鐘信號(hào)。在設(shè)計(jì)電路板時(shí),振蕩器和電容應(yīng)盡量靠近單片機(jī),以避免干擾。需要注意的是:設(shè)計(jì)電路板時(shí),振蕩器和電容應(yīng)盡量安裝得與單片機(jī)靠近一些,這樣可以減少寄生電容的存在,可以更好的保障振蕩器穩(wěn)定、可靠的工作,電路圖如圖2所示。圖2復(fù)位電路:單片機(jī)的復(fù)位電路分上電復(fù)位

9、和按鍵復(fù)位兩種方式。(a)上電復(fù)位:上電復(fù)位是利用電容從電來實(shí)現(xiàn)的,即上電瞬間RST/Vpd端的電位與Vcc相同,隨著從電電流的減少,RST/Vpd的電位下降,最后被牽制在0V。復(fù)位時(shí)要保證加在RST引腳上的高電平持續(xù)兩個(gè)機(jī)器周期,才能使單片機(jī)有效復(fù)位。在應(yīng)用系統(tǒng)中,為了保證復(fù)位電路可靠地工作,常在R、C電路先接施密特電路,然后再接入單片機(jī)復(fù)位端。這樣,當(dāng)系統(tǒng)有多個(gè)復(fù)位端時(shí),能保證可靠地同步復(fù)位,且具有抗干擾作用。(b)按鍵復(fù)位: 按鍵復(fù)位是在調(diào)試程序或者程序運(yùn)行不正常時(shí)手動(dòng)復(fù)位使程序重新運(yùn)行,程序運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)處于死鎖狀態(tài)時(shí),為了擺脫困境,也需按復(fù)位鍵以重新啟動(dòng)。RST引腳是復(fù)位信

10、號(hào)的輸入端,復(fù)位信號(hào)是高電平有效。按鍵復(fù)位又分按鍵脈沖復(fù)位(圖3)和按鍵電平復(fù)位。電平復(fù)位將復(fù)位端通過電阻與Vcc相連,按鍵脈沖復(fù)位是利用RC分電路產(chǎn)生正脈沖來達(dá)到復(fù)位的。 圖32.2 電源電路:2.3 溫度傳感器 PT100是一個(gè)溫度傳感器,是一種穩(wěn)定性和線性都比較好的鉑絲熱電阻傳感器,可以工作在 -200 至 650 的范圍.PT100溫度感測器是一種以白金(Pt)作成的電阻式溫度檢測器,屬于正電阻系數(shù),其電阻和溫度變化的關(guān)系式如下:R=Ro(1+T)其中=0.00392,Ro為100(在0的電阻值),T為攝氏溫度<br>因此白金作成的電阻式溫度檢測器,又稱為PT100。 1:

11、Vo=2.55mA ×100(1+0.00392T)=0.255+T/1000 。 溫度測量轉(zhuǎn)換部分是整個(gè)系統(tǒng)的數(shù)據(jù)來源,直接影響系統(tǒng)的可靠性。本設(shè)計(jì)用的溫度測量方法是:用PT100將測量的溫度轉(zhuǎn)換成模擬電信號(hào),再經(jīng)過A/D轉(zhuǎn)換器把模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),最后由單片機(jī)再對(duì)采集的數(shù)字信號(hào)進(jìn)行處理。 PT100溫度測量電路,溫度傳感器PT100是一種穩(wěn)定性和線性都比較好的鉑絲熱電阻傳感器,可以工作在-200至650的范圍,本電路選擇其工作在0-100范圍。 整個(gè)電路分為兩部分,一是傳感器前置放大電路,一是單片機(jī)A/D轉(zhuǎn)換和顯示,控制,軟件非線性校正等部分。前置放大部分原理圖如下: 工作原

12、理:傳感器的接入非常簡單,從系統(tǒng)的+5V供電端僅僅通過一個(gè)阻值可變的滑動(dòng)電阻就連接到PT100了,這種接法通常會(huì)引起嚴(yán)重的非線性問題,但是由于有個(gè)單片機(jī)的軟件進(jìn)行校正,也就簡化了傳感器的接入方式。 按照PT100的參數(shù)我們得出在0到100的區(qū)間內(nèi),電阻值為100至138.51歐姆,我們按照其串聯(lián)分壓的接法,使用公式:Vcc/(PT100+?)*PT100=輸出電壓(mv)可以計(jì)算出其在整百攝氏度時(shí)的輸出電壓,見下面的表格1:溫度PT100阻值歐姆傳感兩端電壓mv0100.00124.381100.39124.850119.40147.79100138.51170.642.4 鍵盤和顯示電路 模

13、塊電路如圖4.鍵盤采用行列式和外部中斷相結(jié)合的方法,各按鍵的功能定義如下表格2.其中設(shè)置鍵與單片機(jī)的INT0腳相連,S0-S9、YES、NO用四行三列接單片機(jī)P0口,REST鍵為硬件復(fù)位鍵,與R、C構(gòu)成復(fù)位電路。表格2 按鍵功能按鍵鍵名功能REST復(fù)位鍵使系統(tǒng)復(fù)位SET設(shè)置鍵使系統(tǒng)產(chǎn)生中斷,進(jìn)入設(shè)置狀態(tài)S0-S9數(shù)字鍵設(shè)置用戶需要的溫度YES確認(rèn)鍵用戶設(shè)定目標(biāo)溫度后進(jìn)行確認(rèn)NO清除鍵用戶設(shè)定溫度錯(cuò)誤或誤按了YES鍵后使用圖4 鍵盤接口電路2.5 程序設(shè)計(jì)軟件程序設(shè)計(jì)如下:#include<reg51.h>#include <absacc.h>#include <i

14、ntrins.h>#include<ziranshu.h>void main() C_port=0x03; /8155初始化 time0init(); /定時(shí)器0初始化 lcdinit(); /液晶顯示初始化 while(1) Key_scan(); dischange(); compare(); display(); void time0init() TMOD=0x11; TH0=-50000/256; TL0=-50000%256; TH1=-50000/256; TL1=-50000%256; EA=1; ET0=1; ET1=1; TR1=0; TR0=1;void

15、lcdinit() wrcommand(0x01); wrcommand(0x38); wrcommand(0x06); wrcommand(0x0c);void wrcommand(uchar dat) delay(200); rs=0; rw=0; en=1; Port_A=dat; en=0;void wrdata(uchar dat) delay(200); rs=1; rw=0; en=1; Port_A=dat; en=0;void delay(uint dat) while(dat-); void mdelay(uchar x) uchar i; for(;x>0;x-)

16、for(i=0;i<125;i+); void dischange() if(play=2) mode=U_Sec/7+1; if(mode=9) mode=8; AD_value=read1543(mode-1); if(play=6) AD_value=read1543(mode-1); void compare() uchar count0; uint value0; count0=mode; value1=(uint)(100.0*AD_value)/1024)*10); value0=(value1+9)/10; switch(count0) case 1:if(value0&

17、gt;temp_updata1|value0<temp_downdata1) play=6;TR1=1; if(value0<=temp_updata1&&value0>=temp_downdata1) if(play=6) play=2; TR1=0; break; case 2:if(value0>temp_updata2|value0<temp_downdata2) play=6;TR1=1; if(value0<=temp_updata2&&value0>=temp_downdata2) if(play=6) p

18、lay=2; TR1=0; break; case 3:if(value0>temp_updata3|value0<temp_downdata3) play=6;TR1=1; if(value0<=temp_updata3&&value0>=temp_downdata3) if(play=6) play=2; TR1=0; break; case 4:if(value0>temp_updata4|value0<temp_downdata4) play=6;TR1=1; if(value0<=temp_updata4&&v

19、alue0>=temp_downdata4) if(play=6) play=2; TR1=0; break; case 5:if(value0>temp_updata5|value0<temp_downdata5) play=6;TR1=1; if(value0<=temp_updata5&&value0>=temp_downdata5) if(play=6) play=2; TR1=0; break; case 6:if(value0>temp_updata6|value0<temp_downdata6) play=6;TR1=1;

20、 if(value0<=temp_updata6&&value0>=temp_downdata6) if(play=6) play=2; TR1=0; break;case7:if(value0>temp_updata7|value0<temp_downdata7) play=6;TR1=1; if(value0<=temp_updata7&&value0>=temp_downdata7) if(play=6) play=2; TR1=0; break; case 8:if(value0>temp_updata8|val

21、ue0<temp_downdata8) play=6;TR1=1; if(value0<=temp_updata8&&value0>=temp_downdata8) if(play=6) play=2; TR1=0; break;/ default:play=2;/ break; void display() if(play=1) /顯示姓名和學(xué)號(hào) lcd_string(name,1); lcd_string(number,2); if(play=2) /自動(dòng)顯示溫度值 change(mode,AD_value); lcd_string(time,1); lc

22、d_string(count,2); /手動(dòng)顯示溫度值 if(play=3) uchar mode1; uint AD_value1=1024; mode1=keyvalue; AD_value1=read1543(mode1-1); change(mode1,AD_value1); lcd_string(time,1); lcd_string(count,2); if(play=4) /溫度上下限顯示 uchar cc=1,dd=20,ee=50; cc=temp_play; if(cc=1) dd=temp_downdata1; ee=temp_updata1; if(cc=2) dd=t

23、emp_downdata2; ee=temp_updata2; if(cc=3) dd=temp_downdata3; ee=temp_updata3; if(cc=4) dd=temp_downdata4; ee=temp_updata4; if(cc=5) dd=temp_downdata5; ee=temp_updata5; if(cc=6) dd=temp_downdata6; ee=temp_updata6; if(cc=7) dd=temp_downdata7; ee=temp_updata7; if(cc=8) dd=temp_downdata8; ee=temp_updata8

24、; temp_change(cc,dd,ee); lcd_string(temp_name,1); lcd_string(count,2); if(play=5) /時(shí)間設(shè)定顯示 time_change(); lcd_string(time_name,1); lcd_string(count,2); if(play=6) uchar aaaaa,bbbbb,ccccc; uint ddddd;/ alarm_mode=mode;/ alarm_value=value0; ccccc=mode; ddddd=value1; if(ccccc=1) aaaaa=temp_downdata1; bb

25、bbb=temp_updata1; if(ccccc=2) aaaaa=temp_downdata2; bbbbb=temp_updata2; if(ccccc=3) aaaaa=temp_downdata3; bbbbb=temp_updata3; if(ccccc=4) aaaaa=temp_downdata4; bbbbb=temp_updata4; if(ccccc=5) aaaaa=temp_downdata5; bbbbb=temp_updata5; if(ccccc=6) aaaaa=temp_downdata6; bbbbb=temp_updata6; if(ccccc=7)

26、aaaaa=temp_downdata7; bbbbb=temp_updata7; if(ccccc=8) aaaaa=temp_downdata8; bbbbb=temp_updata8; alarm_change(aaaaa,bbbbb,ccccc,ddddd); lcd_string(time,1); lcd_string(count,2); void change(uchar num,uint value) uint addata; addata=(100.0*value)/1024)*10; count0='m' count1='o' count2=&

27、#39;d' count3='e' count4=' ' count5=num+0x30; count6=' ' count7=' ' count8=' ' count9=0x30; count10=(addata%1000)/100+0x30; count11=(addata%100)/10+0x30; count12='.' count13=addata%10+0x30; count14=0xdf; count15='C' if(play=2) time0='z&

28、#39; time1='i' time2='d' time3='o' time4='n' time5='g' time6=' ' time7=' ' if(play=3) time0='s' time1='h' time2='o' time3='u' time4='d' time5='o' time6='n' time7='g' time8=U_Hour/1

29、0+0x30; time9=U_Hour%10+0x30; time10=':' time11=U_Min/10+0x30; time12=U_Min%10+0x30; time13=':' time14=U_Sec/10+0x30; time15=U_Sec%10+0x30;void temp_change(uchar ccc,uchar ddd,uchar eee) if(flash=1) count0='m' count1='o' count2='d' count3='e' count4=&#

30、39; ' count5=ccc+0x30; count6=' ' count7=ddd/100+0x30; count8=ddd/10%10+0x30; count9=ddd%10+0x30; count10='-' count11=eee/100+0x30; count12=eee/10%10+0x30; count13=eee%10+0x30; count14=0xdf; count15='C' if(flash=0) if(temp_flash=1) count5=' ' if(temp_flash=2) coun

31、t7=' ' if(temp_flash=3) count8=' ' if(temp_flash=4) count9=' ' if(temp_flash=5) count11=' ' if(temp_flash=6) count12=' ' if(temp_flash=7) count13=' ' void time_change() if(flash=1) count0=U_Hour/10+0x30; count1=U_Hour%10+0x30; count2=':' count3

32、=U_Min/10+0x30; count4=U_Min%10+0x30; count5=':' count6=U_Sec/10+0x30; count7=U_Sec%10+0x30; count8=' ' count9=' ' count10=' ' count11=' ' count12=' ' count13=' ' count14=' ' count15=' ' if(flash=0) if(time_flash=1) count0='

33、 ' if(time_flash=2) count1=' ' if(time_flash=3) count3=' ' if(time_flash=4) count4=' ' if(time_flash=5) count6=' ' if(time_flash=6) count7=' ' void alarm_change(uchar aaaa,uchar bbbb,uchar cccc,uint dddd) time0='M' time1='i' time2='n

34、9; time3='g' time4='D' time5='i' time6='!' time7=aaaa/100+0x30; time8=aaaa/10%10+0x30; time9=aaaa%10+0x30; time10='-' time11=bbbb/100+0x30; time12=bbbb/10%10+0x30; time13=bbbb%10+0x30; time14=0xdf; time15='C' if(flash=1) count0='m' count1='

35、o' count2='d' count3='e' count4=' ' count5=cccc+0x30; count6=' ' count7=' ' count8=dddd/1000+0x30; count9=dddd/100%10+0x30; count10=dddd/10%10+0x30; count11='.' count12=dddd%10+0x30; count13=0xdf; count14='C' count15=' ' if(flash=0)

36、 count0=' ' count1=' ' count2=' ' count3=' ' count4=' ' count5=' ' count6=' ' count7=' ' count8=' ' count9=' ' count10=' ' count11=' ' count12=' ' count13=' ' count14=' ' count15=&

37、#39; ' void lcd_string(uchar *p,uchar flag) uchar addr; if(flag=1) addr=0x80; while(*p!='0') wrcommand(addr); wrdata(*p); addr+; p+; if(flag=2) addr=0xc0; while(*p!='0') wrcommand(addr); wrdata(*p); addr+; p+; void T0_serve() interrupt 1 TH0=-50000/256; TL0=-50000%256; U_ms=U_ms+

38、1; if(U_ms=20) U_ms=0; U_Sec+; if(U_Sec=60) U_Sec=0; U_Min+; if(U_Min=60) U_Min=0; U_Hour+; if(U_Hour=24) U_Hour=0; void T1_serve() interrupt 3 TH1=-50000/256; TL1=-50000%256; U_count+; if(U_count=10) flash=0; if(U_count=20) U_count=0; flash=1; uint read1543(uchar addr) uchar i; uchar ah,al; uint ad

39、; clk=0; cs=0; addr<<=4; for(i=0;i<4;i+) D_Addr=(bit)(addr&0x80); clk=1; clk=0; addr<<=1; D_Addr=0; for(i=0;i<6;i+) clk=1; clk=0; cs=1; delay(25); cs=0; _nop_(); _nop_(); _nop_(); for(i=0;i<2;i+) D_out=1; clk=1; ah<<=1; if(D_out) ah=ah+0x01; clk=0; for(i=0;i<8;i+) D

40、_out=1; clk=1; al<<=1; if(D_out) al=al+0x01; clk=0; cs=1; ad=(uint)ah; ad<<=8; ad=ad+(uint)al; return(ad);void Key_scan() /a 0000 0000/c00 0000 uchar KeyValue; uchar aa; Port_A=0xfe; /第一列按鍵掃描 KeyValue=Port_C|0xe0; if(KeyValue!=0xff) mdelay(35); KeyValue=Port_C|0xe0; if(KeyValue!=0xff) aa

41、=KeyValue; while(aa=KeyValue) /判斷鍵彈起 KeyValue=Port_C|0xe0; if(aa=0xf7) /*鍵按下,調(diào)整顯示模式 1為姓名和時(shí)間,2為溫度自動(dòng)顯示,3為溫度手動(dòng)顯示 play+; if(play=4) TR1=1; keyvalue=1; if(play=5) TR0=0;TR1=1; temp_flash=1; if(play>5) TR0=1;TR1=0; play=1;time_flash=1; if(play=3)/手動(dòng)溫度顯示通道1,4,7選擇鍵 switch(aa) case 0xfe: keyvalue=1; break

42、; case 0xfd: keyvalue=4; break; case 0xfb: keyvalue=7; break; default : break; /溫度值上下限調(diào)整鍵值1,4,7 if(play=4) if(temp_flash=1) switch(aa) case 0xfe: temp_play=1; break; case 0xfd: temp_play=4; break; case 0xfb: temp_play=7; break; default : break; if(temp_flash!=1) switch(aa) case 0xfe: if(temp_play=1)

43、 if(temp_flash=2) temp_downdata1=temp_downdata1%100+100; if(temp_flash=3) temp_downdata1=(temp_downdata1/100)*100+temp_downdata1%10+10; if(temp_flash=4) temp_downdata1=(temp_downdata1/10)*10+1; if(temp_flash=5) temp_updata1=temp_updata1%100+100; if(temp_flash=6) temp_updata1=(temp_updata1/100)*100+t

44、emp_updata1%10+10; if(temp_flash=7) temp_updata1=(temp_updata1/10)*10+1; if(temp_play=2) if(temp_flash=2) temp_downdata2=temp_downdata2%100+100; if(temp_flash=3) temp_downdata2=(temp_downdata2/100)*100+temp_downdata2%10+10; if(temp_flash=4) temp_downdata2=(temp_downdata2/10)*10+1; if(temp_flash=5) temp_updata2=temp_updata2%100+100; if(temp_flash=6) temp_updata2=(temp_updata2/100)*100+temp_updata2%10+10; if(temp_flash=7) temp_updata2=(temp_updata2/10)*10+1; if(temp_play=3) if(temp_flash=2) te

溫馨提示

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

評(píng)論

0/150

提交評(píng)論