電加熱爐溫度控制系統(tǒng)_第1頁
電加熱爐溫度控制系統(tǒng)_第2頁
電加熱爐溫度控制系統(tǒng)_第3頁
電加熱爐溫度控制系統(tǒng)_第4頁
電加熱爐溫度控制系統(tǒng)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 意義與要求 11.1 實際意義 11.2 技術(shù)要求 12 設(shè)計容及步驟 12.1 方案設(shè)計 12.2 詳細設(shè)計 22.2.1 主要硬件介紹 22.2.2 電路設(shè)計方法 32.2.3 繪制流程圖 62.2.4 程序設(shè)計 72.3 調(diào)試和仿真 73 結(jié)果分析 84 課程設(shè)計心得體會 9參考文獻 10附錄 11電加熱爐溫度控制系統(tǒng)設(shè)計1 意義與要求1.1 實際意義在現(xiàn)實生活當(dāng)中, 很多場合需要對溫度進行智能控制, 日常生活中最常見的要算空調(diào)和冰箱了, 他們都能根據(jù)環(huán)境實時情況, 結(jié)合人為的設(shè)定, 對溫度進行智能控制。 工業(yè)生產(chǎn)中的電加熱爐溫度監(jiān)控系統(tǒng)和培養(yǎng)基的溫度監(jiān)控系統(tǒng)都是計算機控制系統(tǒng)的典型

2、應(yīng)用。 通過這次課程設(shè)計, 我們將自己動手設(shè)計一個小型的計算機控制系統(tǒng),目的在于將理論結(jié)合實踐以加深我們對課本知識的理解。1.2 技術(shù)要求要求利用所學(xué)過的知識設(shè)計一個溫度控制系統(tǒng), 并用軟件仿真。 功能要求如下:( 1)能夠利用溫度傳感器檢測環(huán)境中的實時溫度;( 2)能對所要求的溫度進行設(shè)定;( 3)將傳感器檢測到得實時溫度與設(shè)定值相比較,當(dāng)環(huán)境中的溫度高于或低于所設(shè)定的溫度時, 系統(tǒng)會自動做出相應(yīng)的動作來改變這一狀況, 使系統(tǒng)溫度始終保持在設(shè)定的溫度值。2 設(shè)計容及步驟2.1 方案設(shè)計要想達到技術(shù)要求的容,少不了以下幾種器件:單片機、溫度傳感器、 LCD顯示屏、 直流電動機等。 其中單片機用

3、作主控制器, 控制其他器件的工作和處理數(shù)據(jù); 溫度傳感器用來檢測環(huán)境中的實時溫度, 并將檢測值送到單片機中進行數(shù)值對比;LCD顯示屏用來顯示溫度、時間的數(shù)字值;直流電動機用來表示電加熱 爐的工作情況, 轉(zhuǎn)動表示電加熱爐通電加熱, 停止轉(zhuǎn)動表示電加熱爐斷電停止加 熱。整體思路是這樣的: 首先我們通過按鍵設(shè)定所需要的溫度值, 然后利用溫度傳感器檢測電加熱爐的實時加熱溫度, 并送至單片機與設(shè)定值進行比較。 若檢測 值小于設(shè)定值,則無任何動作,電加熱爐繼續(xù)導(dǎo)通加熱;若檢測值大于設(shè)定值,則單片機控制光電耦合器導(dǎo)通, 繼電器動作, 電加熱爐斷電停止加熱。 一旦爐溫低于設(shè)定值, 單片機又控制光電耦合器斷開,

4、 繼電器開關(guān)分離, 電加熱爐開始導(dǎo)通加熱。這個過程中所設(shè)定的溫度值和傳感器檢測到得溫度值都要在LCD顯示屏上顯示出來,以方便操作人員觀察。另外,還可以加上時鐘模塊,以方便計時。這個設(shè)計思路相對比較簡單, 利用所學(xué)過的知識容易實現(xiàn), 加上光電耦合器用于隔離強電和弱電, 比較安全, 正好符合我們自動化專業(yè)用弱電控制強電的目 的,正所謂學(xué)以致用。2.2 詳細設(shè)計2.2.1 主要硬件介紹1單片機這里選用AT89C51單片機作為控制系統(tǒng)的處理器。AT89C51是一種帶4K字 節(jié)閃存可編程可擦除只讀存儲器的低電壓、高性能CMOS 8位微處理器。2溫度傳感器溫度傳感器有很多種型號,這里我選用DS18B20溫

5、度傳感器。數(shù)字溫度傳感器DS18B20M有獨特的單總線接口方式,支持多節(jié)點,使分布式溫度傳感器 設(shè)計大為簡化。 測溫時無需任何外圍原件, 可以通過數(shù)據(jù)線直接供電, 具有超低 功耗工作方式。測溫圍為 -55 到+125攝氏度,可直接將溫度轉(zhuǎn)換值以 16位二進 制數(shù)字碼的方式串行輸出, 因此特別適合單線多點溫度測量系統(tǒng)。 由于傳輸?shù)氖?串行數(shù)據(jù), 可以不需要放大器和A/D 轉(zhuǎn)換器, 因而這種測溫方式大大提高了各種溫度測控系統(tǒng)的可靠性,降低了成本,縮小了體積。3 .開關(guān)器件由于單片機與電動機之間需要用開關(guān)器件連接,并且前者用弱電控制,后者由強電控制,這就尤其需要注意安全問題。于是我想到了在課本中學(xué)過

6、的高性能安全開關(guān)器件光電耦合器。光電耦合器是由一個發(fā)光器件和和一個光電轉(zhuǎn)換器件組成,這里所用的光電耦合器OPTOCOUPLER-N網(wǎng)由一個發(fā)光二極管和一個光敏晶體管所組成。當(dāng)發(fā)光二極管發(fā)光,就會使得光敏晶體管導(dǎo)通,繼電器通電動作,將開關(guān)吸合,電動機回路斷開。2.2.2電路設(shè)計方法1 .顯示部分電路顯示電路截圖如下圖所示。b f r v a ttt bii r b r r t i i r, , LCD1Lm-oiSl圖2.1顯示部分電路圖這里我選用 LCDLM016L液晶顯示屏作為系統(tǒng)的顯示器件,如圖所示, LCDLM016用標(biāo)準(zhǔn)的16腳接口,仿真時隱藏了背光正極和背光負極兩個 引腳。它通過 D

7、0-D78位數(shù)據(jù)端來與單片機進行數(shù)據(jù)和指令傳輸,這里我們 將它與單片機的 P0 口連接。在顯示屏上顯示的容包括設(shè)定的溫度值SET傳感器檢測到的環(huán)境溫度SA以及時鐘,這個時鐘是可以調(diào)整的,這樣方便工作人員在對系統(tǒng)進行操 作時有一個時間概念。2 .溫度檢測電路溫度傳感器與單片機的連接情況如下圖所示U2VCC DQ GND 3S18B20-<TEXT> 1.'21.0林1工丁”r loP17ATB9C51<TEXT>圖2.2溫度檢測電路圖溫度傳感器18B20將檢測到的環(huán)境實時溫度進行A/D轉(zhuǎn)換和放大,然后用行送入單片機 P1.7 口,便于單片機將此數(shù)值與設(shè)定的溫度值進

8、行比較, 然后先做出相應(yīng)反應(yīng)。在仿真時,我們只能通過按18B20上的加減按鈕來調(diào)節(jié)實時溫度,是一個模擬的過程。3 .鍵盤電路鍵盤電路如下圖所示。圖2.3鍵盤電路圖這里減排設(shè)計得比較簡單,"MS'鍵是切換調(diào)整對象的,調(diào)整對象包括時、分、溫度設(shè)定值三項,“+”鍵是向上加調(diào)整對象的值,“一”鍵是向下減調(diào)整對象的值,“ON/OFF鍵是打開和關(guān)閉系統(tǒng)自動調(diào)節(jié)功能的開關(guān)鍵。4.電氣開關(guān)及工作電路電器開關(guān)及工作電路如下圖所示圖2.4電氣開關(guān)及工作電路圖如圖所示,光電耦合器1腳接電源,2腳接單片機P3.7腳。工作過程用以下三個階段來描述:(1)單片機將溫度傳感器送入的值與設(shè)定值進行比較,若送

9、入值小于 設(shè)定值,則P3.7腳保持高電平,這樣發(fā)光二極管不發(fā)光,光敏晶體管保持 高阻態(tài),繼電器也不會工作,電動機和燈泡維持導(dǎo)通,相當(dāng)于電爐繼續(xù)加 熱,指示燈亮;(2) 一旦送入值比設(shè)定值大,單片機將會控制P3.7腳變?yōu)榈碗娖?,發(fā)光二極管導(dǎo)通發(fā)光,光敏晶體管受光照影響導(dǎo)通,繼而繼電器工作,電 磁鐵將單刀雙擲開關(guān)吸向左端,使電動機和燈泡同時停止工作,這就相當(dāng) 于電爐斷電,停止加熱;(3)電爐短路一段時間后, 必然導(dǎo)致爐溫降低, 而溫度傳感器 DS18B20 在不間斷地檢測爐溫,當(dāng)檢測值低于設(shè)定值后,單片機又控制P3.7腳恢復(fù)高電平,光電耦合器恢復(fù)高阻態(tài),繼電器斷電,單刀雙擲開關(guān)被彈回右端, 電動機

10、和燈泡又開始工作,這相當(dāng)于電爐從新開始加熱。2.2.3繪制流程圖2.2.4程序設(shè)計由于整個程序工程量比較大,我采用模塊化設(shè)計方法來設(shè)計這個程序。首先定義在后面將會用到的變量,不可能一次定義準(zhǔn)確,所以邊定義邊補充。然后編寫子函數(shù),包括 LCM初始化子函數(shù)、顯示指定坐標(biāo)的一個字符子函數(shù)、ds18b20初始化函數(shù)、ds18b20延遲子函數(shù)、讀取 ds18b20當(dāng)前溫 度子函數(shù)、液晶顯示子函數(shù)、鍵盤掃描子函數(shù)、設(shè)定工作模式子函數(shù)、按鍵加法子函數(shù)、按鍵減法子函數(shù)、24C02讀寫驅(qū)動程序、定時器 t0中斷子函數(shù)等子程序,最后是主函數(shù)。2.3調(diào)試和仿真在Keil軟件中編寫完程序后,編譯生成.Hex文件,單片

11、機可以執(zhí)行.Hex 文件。在Protues軟件中,給單片機加載所生成的.Hex文件,按下運行按鈕,系統(tǒng)開始仿真。系統(tǒng)仿真截圖如下圖所示。05! 38107-GEN2gC 5中2,時貶莓u EcEEaEEo11EH 5EWU PZaAH FZ.J4.M2 PZJjA19KEEJL 3nJlRMD 用.i”中 pauTni mjUHT Ejmri 班/IEHF7REfB-LCDI-ri pi -i -ra c - nnc nriH ,RP1.圖2.5系統(tǒng)仿真圖(一)上一是當(dāng)溫度采樣值小于設(shè)定值,電熱爐處于工作狀態(tài)時的仿真截圖 以下這是當(dāng)溫度采樣值高于設(shè)定值后,系統(tǒng)自動做出反應(yīng),使電熱爐斷電停止工作

12、的仿真截圖- , , - ,- ,- 1 lijCDI*- , *, ' * * * ,匠5*1 1 如如 peci ire.Tiii tp*題PJ jtfTT" f-j j-sttw*rnFUiTi pjRF" fTT'F |-Q5:45:02 手ED口l-i Oifef it 7 rr* 卜 > 5 3: -國安 4suaoann落部一當(dāng)事_暑S“尋EkTBlJ-圖2.6系統(tǒng)仿真圖(二)3結(jié)果分析由以上仿真結(jié)果可以知道,此次的設(shè)計基本成功。當(dāng)采樣溫度低于設(shè) 定值的時候,系統(tǒng)不會對電熱爐做出相應(yīng)動作,電熱爐保持加熱。一旦采 樣溫度高于設(shè)定值,系統(tǒng)就會

13、做出反應(yīng),使電加熱爐斷電停止加熱。當(dāng)溫 度降下來后,系統(tǒng)又會自動控制電加熱爐重新開始加熱。系統(tǒng)的反應(yīng)速度 也是十分精確的,會在很短的時間作出相應(yīng)動作。另外,由于在電路中加 入了 EPROM24CQ2使得該系統(tǒng)具有掉電保護功能,來電后自動恢復(fù)正常工 作。除此之外,該系統(tǒng)還有一個比較實用的小功能一電子鐘,這樣的話工 作人員可以利用它準(zhǔn)確掌握系統(tǒng)已經(jīng)工作的時間,也就是說可以把它當(dāng)做 一個定時器來用。在安全保護方面,該系統(tǒng)也有相當(dāng)不錯的表現(xiàn),由于使 用了光電耦合器和就電磁繼電器,將強電部分和弱電部分充分隔離,十分 安全。綜合以上分析,該系統(tǒng)的設(shè)計十分成功。4 課程設(shè)計心得體會一個星期很快就過去了, 計

14、算機控制技術(shù)課程設(shè)計也告一段落。 本次課程設(shè)計,我的題目是設(shè)計一個電加熱爐溫度控制系統(tǒng) 。說到電加熱爐,我們都比較熟悉, 在日常生活中我們經(jīng)常用到, 特別是冬天用它來煮火鍋。 我們也會發(fā)現(xiàn)這樣一個問題, 一般的電加熱爐是沒有溫度自動控制的, 當(dāng)溫度上升到我們需要的程度時,它仍然繼續(xù)加熱,這不僅會影響到加熱效果,還會造成電能的浪費。那么就有必要設(shè)計一種能自動調(diào)節(jié)爐溫的系統(tǒng), 把它應(yīng)用到日常生活中, 將會給人們帶來極大的方便。在設(shè)計的過程中, 我也遇到一些麻煩, 比如說怎樣來實現(xiàn)電動機回路的自動通斷調(diào)節(jié)、 怎樣來實現(xiàn)時鐘的調(diào)整等等, 這些問題都令我十分棘手。 通過去圖書館查閱相關(guān)資料和上網(wǎng)搜索各硬

15、件的原理以及應(yīng)用, 我最終都一一解決了這些問題。 由于我們是三個同學(xué)做同一個題目, 在設(shè)計過程中, 我們遇到困難的時候也經(jīng)常相互討論,相互請教,最終一起解決問題,在此也感我的“戰(zhàn)友”們??偟膩碚f, 此次課程設(shè)計的過程比較輕松, 從拿到問題到徹底解決問題, 這是一個令人振奮并享受的過程。 經(jīng)過去圖書館大量的查閱書籍, 我也學(xué)到了很多在課本上沒有的知識, 收獲頗豐。 這段過程讓我懂得了一個道理, 那就是學(xué)生要學(xué)的絕對不該僅僅是課本上的東西, 有些東西只有走進圖書館, 你才可能學(xué)習(xí)到。也只有這樣,我們才能成為一個見多識廣、淵博的人。參考文獻1 于海生微型計算機控制技術(shù)清華大學(xué), 20042譚浩強.C

16、程序設(shè)計(第三版).清華大學(xué),20063 戴焯 . 傳感與檢測技術(shù). 理工大學(xué), 20064 毅剛 . 單片機原理及應(yīng)用 . 高等教育, 20035 柯節(jié)成 . 簡明電子元件器件手冊. 高等教育, 2005附錄系統(tǒng)的完整程序如下:/*電加熱爐溫度控制系統(tǒng)問題描述:當(dāng)溫控開關(guān)打開時,若測得環(huán)境溫度大于設(shè)定溫度,則繼電器吸合,電加熱爐停止工作;若測得環(huán)境溫度小于設(shè)定溫度,則繼電器釋放,電加熱爐繼續(xù)工作。*/#include<reg51.h>#include<intrins.h>#include <absacc.h>#define uchar unsigned c

17、har#define uint unsigned int#define BUSY 0x80/lcd#define DATAPORT P0/#define PLAYE_ADDR XBYTE0XBFFFsbit RED_ALARM=P1A0;sbit WRITE_ALARM=P1A1;sbit GREEN_ALARM=P1A2;sbit BLUE_ALARM=P1A3;sbit P1_4=P1A4;sbit P1_5=P1A5;sbit P1_6=P1A6;sbit DQ = P1A7;sbit LCM_RS=P2A0;sbit LCM_RW=P2A1;sbit LCM_EN=P2A2;忙檢測標(biāo)志

18、定義P0 口為LCD通訊端口/ 語音報警地址/ 紅色指示燈/ 白色指示燈/ 綠色指示燈/ 時鐘調(diào)整/ 時鐘加/ 時鐘減/ 定義 ds18b20 通信端口/ 數(shù)據(jù) / 命令端/ 讀 / 寫選擇端sbit sda=P2A3;/IOsbit scl=P2A4;sbit ad_busy=P3A2;sbit RECLED_EOC=P3A5;sbit OUT=P3A7;uchar ad_data;uchar seconde;uchar minite;uchar hour;uchar mstcnt=0;uchar temp1,temp2,temp;uchar t,set;uchar K;bit ON_OFF

19、=0;bit outflag;bit write=0;uchar code str0="- : : - "uchar code str1="SET: C SA: . C"void delay_LCM(uint);void initLCM( void);void lcd_wait(void);口定義/LCD 使能信號/adc 中斷方式接口/ISD1420 放音結(jié)束查詢標(biāo)志/ad 采樣值存儲/ 定義并初始化時鐘變量/ 溫度顯示變量void WriteCommandLCM(uchar WCLCM,uchar BusyC); /void WriteDataLCM

20、(uchar WDLCM);/void DisplayOneChar(uchar X,uchar Y,uchar DData) /子函數(shù)void DisplayListChar(uchar X,uchar Y,uchar code *DData);/ 串字符子函數(shù)void init_timer0(void);void displayfun1(void);void displayfun2(void);void displayfun3(void);void displayfun4(void);void keyscan(void );void set_adj(void);void inc_key(v

21、oid);void dec_key(void);void delay_18B20(unsigned int i);void Init_DS18B20(void) ;/LCD 延時子程序/LCD 初始化子程序/LCD 檢測忙子程序?qū)懼噶畹?ICM 子函數(shù)寫數(shù)據(jù)到 LCM子函數(shù)顯示指定坐標(biāo)的一個字符顯示指定坐標(biāo)的一/ 定時器初始化/ 鍵盤掃描子程序uchar ReadOneChar(void);void WriteOneChar(unsigned char dat);void ReadTemperature(void);void ad0809(void);void playalarm(void);

22、/* 延時 K*1ms,12.000mhz*/void delay_LCM(uint k)uint i,j;for(i=0;i<k;i+)for(j=0;j<60;j+);/*寫才旨令至ij LCM子函數(shù)*/void WriteCommandLCM(uchar WCLCM,uchar BusyC)if(BusyC)lcd_wait();DATAPORT=WCLCM;LCM_RS=0;/LCM_RW=0;LCM_EN=1;_nop_();選中指令寄存器/ 寫模式_nop_();_nop_();LCMEN=0;/*寫數(shù)據(jù)至ijLCM子函數(shù)*/void WriteDataLCM(ucha

23、r WDLCM)lcd_wait( );/DATAPORT=WDLCM;LCM_RS=1; /LCM_RW=0;/檢測忙信號選中數(shù)據(jù)寄存器寫模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;/*lcm部等待函數(shù) */void lcd_wait(void)DATAPORT=0xff;LCM_EN=1;LCM_RS=0;LCM_RW=1;_nop_();while(DATAPORT&BUSY) LCM_EN=0;_nop_();_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*LCM初始化子函數(shù)*/void ini

24、tLCM( )DATAPORT=0;delay_LCM(15);三次顯示模式設(shè)置,不檢測忙信號WriteCommandLCM(0x38,0); /delay_LCM(5);WriteCommandLCM(0x38,0);delay_LCM(5);WriteCommandLCM(0x38,0);delay_LCM(5);WriteCommandLCM(0x38,1);/8bitWriteCommandLCM(0x08,1); /WriteCommandLCM(0x01,1); /WriteCommandLCM(0x06,1); /數(shù)據(jù)傳送, 2 行顯示, 5*7 字型,檢測忙信號關(guān)閉顯示,檢測忙

25、信號清屏,檢測忙信號顯示光標(biāo)右移設(shè)置,檢測忙信號顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙信號WriteCommandLCM(0x0c,1); /*顯示指定坐標(biāo)的一個字符子函數(shù)*/void DisplayOneChar(uchar X,uchar Y,uchar DData)Y&=1;X&=15;if(Y)X|=0x40;/X|=0x80;/若 y 為 1 (顯示第二行) ,地址碼 +0X40指令碼為地址碼+0X80WriteCommandLCM(X,0);WriteDataLCM(DData);/* 顯示指定坐標(biāo)的一串字符子函數(shù)*/void DisplayListChar(uch

26、ar X,uchar Y,uchar code *DData)uchar ListLength=0;Y&=0x01;X&=0x0f;while(X<16)DisplayOneChar(X,Y,DDataListLength);ListLength+;X+;/*ds18b20延遲子函數(shù)(晶振12MHz ) */void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函數(shù)*/void Init_DS18B20(void)unsigned char x=0;DQ = 1;/DQ復(fù)位delay_18B20(8); /稍做延時DQ

27、 = 0;/單片機將DQ拉低delay_18B20(80); /DQ = 1;/delay_18B20(14);x=DQ;/delay_18B20(20);則初始化失敗精確延時大于 480us拉高總線稍做延時后如果 x=0 則初始化成功x=1/*ds18b20讀一個字節(jié)*/unsigned char ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i>0;i-)DQ = 0; /給脈沖信號dat>>=1;DQ = 1; /給脈沖信號if(DQ) dat|=0x80;delay_18B20(4);return(dat);/*d

28、s18b20寫一個字節(jié)*/void WriteOneChar(uchar dat) unsigned char i=0;for (i=8; i>0; i-) DQ = 0;DQ = dat&0x01; delay_18B20(5);DQ = 1; dat>>=1;/*讀取 ds18b20 當(dāng)前溫度 */void ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOne

29、Char(0x44); / 啟動溫度轉(zhuǎn)換delay_18B20(100);/ this message is wery importantInit_DS18B20();WriteOneChar(0xCC);WriteOneChar(0xBE); 是溫度delay_18B20(100);a=ReadOneChar();b=ReadOneChar();temp1=b<<4;temp1+=(a&0xf0)>>4;temp2=a&0x0f;temp=(b*256+a)>>4); / 跳過讀序號列號的操作/ 讀取溫度寄存器等(共可讀9 個寄存器) 前兩

30、個就/ 讀取溫度值低位/ 讀取溫度值高位當(dāng)前采集溫度值除16 得實際溫度值/*液晶顯示子函數(shù)1 正常顯示 */void displayfun1(void)WriteCommandLCM(0x0c,1); /顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙信號DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(3,0,hour/10+0x30);/ 液晶上顯示小時DisplayOneChar(4,0,hour%10+0x30);DisplayOneChar(6,0,minite/10+0x30);/ 液晶上顯示分Displa

31、yOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,seconde/10+0x30);/ 液晶上顯示秒DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(4,1,K/10+0x30);/ 液晶上顯示設(shè)定的溫度DisplayOneChar(5,1,K%10+0x30);DisplayOneChar(11,1,temp1/10+0x30); /DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);液晶上顯示測得的溫度i

32、f(ON_OFF=0)DisplayOneChar(14,0,0x4f);DisplayOneChar(15,0,0x46);else/ 若溫控標(biāo)志為0/ 液晶上顯示不控溫的標(biāo)志DisplayOneChar(14,0,0x4f);DisplayOneChar(15,0,0x4e); if(outflag=1)/液晶上顯示控溫的標(biāo)志DisplayOneChar(0,0,0x7c);elseDisplayOneChar(0,0,0xef);/*液晶顯示子函數(shù)2*/void displayfun2(void)WriteCommandLCM(0x0c,1); / 顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙

33、信號DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,seconde/10+0x30);DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(4,1,K/10+0x30);DisplayOneChar(5,1,K%10+0x30);DisplayOneChar(11,1,temp1/10+0x30);DisplayO

34、neChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);WriteCommandLCM(0x0f,1); / 顯示屏打開,光標(biāo)顯示,閃爍,檢測忙信號DisplayOneChar(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%10+0x30);/*液晶顯示子函數(shù) 3*/void displayfun3(void)WriteCommandLCM(0x0c,1); / 顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙信號DisplayListChar(0,0,str0);DisplayListChar(0

35、,1,str1);DisplayOneChar(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%10+0x30);DisplayOneChar(9,0,seconde/10+0x30);DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(4,1,K/10+0x30);DisplayOneChar(5,1,K%10+0x30);DisplayOneChar(11,1,temp1/10+0x30);DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,te

36、mp2/10+0x30);WriteCommandLCM(0x0f,1); / 顯示屏打開,光標(biāo)顯示,閃爍,檢測忙信號DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%10+0x30);/*液晶顯示子函數(shù)4 */void displayfun4(void) WriteCommandLCM(0x0c,1); /DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%

37、10+0x30);DisplayOneChar(6,0,minite/10+0x30);顯示屏打開,光標(biāo)不顯示,不閃爍,檢測忙信號DisplayOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,seconde/10+0x30);DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(11,1,temp1/10+0x30);DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);WriteCommandLCM(0x0f,1

38、); /DisplayOneChar(4,1,K/10+0x30);DisplayOneChar(5,1,K%10+0x30);/*void keyscan(void)uchar xx;顯示屏打開,光標(biāo)顯示,閃爍,檢測忙信號鍵盤掃描子函數(shù) */局部變量P1=0xff;if(P1!=0xff)delay_LCM(50);if(P1!=0xff)xx=P1;/ 根據(jù)按鍵狀態(tài),調(diào)用不同的子函數(shù)switch(xx) case 0xfe:set_adj();break;case 0xfd:inc_key();break;case 0xfb:dec_key(); break;case0xf7:delay_

39、LCM(150);ON_OFF=!ON_OFF;while(!BLUE_ALARM); break;default:break;/*設(shè)定工作模式子函數(shù) */void set_adj(void)delay_LCM(100);set+;if(set>=4)set=0;while(!RED_ALARM);/*按鍵加法子函數(shù)*/void inc_key(void)delay_LCM(150);switch(set)case 0:if(P1=0xf7)delay_LCM(150);ON_OFF=!ON_OFF; break;case 1:hour+; if(hour>=23)hour=23;

40、 break;case 2:minite+; if(minite>=59)minite=59;break;case 3:K+;if(K>=99)K=99;break;default:break;while(!WRITE_ALARM);/*按鍵減法子函數(shù)*/void dec_key(void)delay_LCM(150);switch(set)case 0:if(P1=0xf7)delay_LCM(150);ON_OFF=!ON_OFF; break;case 1:hour-; if(hour<=0)hour=0; break;case 2:minite-;if(minite&

41、lt;=0)minite=0;break;break;case 3:K-;if(K<=1)K=1;default:break;while(!GREEN_ALARM);/*24C02讀寫驅(qū)動程序*/void delay1(uchar x) uint i;for(i=0;i<x;i+);void flash() ; ; void x24c02_init() /24c02初始化子程序scl=1;flash();sda=1;flash();void start() /啟動 I2C 總線sda=1;flash();scl=1;flash();sda=0;flash();scl=0;flash

42、();void stop() /停止 I2C 總線sda=0;flash();scl=1;flash();sda=1;flash();void writex(uchar j) / 寫一個字節(jié)uchar i,temp;temp=j;for (i=0;i<8;i+)temp=temp<<1;scl=0;flash();sda=CY;flash();scl=1;flash();scl=0;flash();sda=1;flash();uchar readx() / 讀一個字節(jié)uchar i,j,k=0;scl=0;flash();sda=1;for (i=0;i<8;i+)fl

43、ash();scl=1;flash();if (sda=1) j=1;else j=0;k=(k<<1)|j;scl=0; flash();return(k);void clock() /I2C 總線時鐘uchar i=0;scl=1;flash();while (sda=1)&&(i<255)i+;scl=0;flash();/ 從 24c02 的地址 address 中讀取一個字節(jié)數(shù)據(jù)/uchar x24c02_read(uchar address)uchar i;start();writex(0xa0);clock();writex(address);clock();start();writex(0xa1);clock();i=readx();stop();delay1(10);return(i);/ 向 24c02 的 address 地址中寫入一字節(jié)數(shù)據(jù)info/void x24c02_write(uchar address,uchar info)EA=0;start

溫馨提示

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

評論

0/150

提交評論