




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄1 意義與要求11.1 實際意義11.2 技術要求12 設計內容及步驟12.1 方案設計12.2 詳細設計22.2.1 主要硬件介紹22.2.2 電路設計方法32.2.3 繪制流程圖62.2.4 程序設計72.3 調試和仿真73 結果分析84 課程設計心得體會9參考文獻10附錄11電加熱爐溫度控制系統(tǒng)設計1 意義與要求1.1 實際意義在現實生活當中,很多場合需要對溫度進行智能控制,日常生活中最常見的要算空調和冰箱了,他們都能根據環(huán)境實時情況,結合人為的設定,對溫度進行智能控制。工業(yè)生產中的電加熱爐溫度監(jiān)控系統(tǒng)和培養(yǎng)基的溫度監(jiān)控系統(tǒng)都是計算機控制系統(tǒng)的典型應用。通過這次課程設計,我們將自己動
2、手設計一個小型的計算機控制系統(tǒng),目的在于將理論結合實踐以加深我們對課本知識的理解。1.2 技術要求要求利用所學過的知識設計一個溫度控制系統(tǒng),并用軟件仿真。功能要求如下:(1)能夠利用溫度傳感器檢測環(huán)境中的實時溫度;(2)能對所要求的溫度進行設定;(3)將傳感器檢測到得實時溫度與設定值相比較,當環(huán)境中的溫度高于或低于所設定的溫度時,系統(tǒng)會自動做出相應的動作來改變這一狀況,使系統(tǒng)溫度始終保持在設定的溫度值。2 設計內容及步驟2.1 方案設計要想達到技術要求的內容,少不了以下幾種器件:單片機、溫度傳感器、LCD顯示屏、直流電動機等。其中單片機用作主控制器,控制其他器件的工作和處理數據;溫度傳感器用來
3、檢測環(huán)境中的實時溫度,并將檢測值送到單片機中進行數值對比;LCD顯示屏用來顯示溫度、時間的數字值;直流電動機用來表示電加熱爐的工作情況,轉動表示電加熱爐通電加熱,停止轉動表示電加熱爐斷電停止加熱。整體思路是這樣的:首先我們通過按鍵設定所需要的溫度值,然后利用溫度傳感器檢測電加熱爐的實時加熱溫度,并送至單片機與設定值進行比較。若檢測值小于設定值,則無任何動作,電加熱爐繼續(xù)導通加熱;若檢測值大于設定值,則單片機控制光電耦合器導通,繼電器動作,電加熱爐斷電停止加熱。一旦爐溫低于設定值,單片機又控制光電耦合器斷開,繼電器開關分離,電加熱爐開始導通加熱。這個過程中所設定的溫度值和傳感器檢測到得溫度值都要
4、在LCD顯示屏上顯示出來,以方便操作人員觀察。另外,還可以加上時鐘模塊,以方便計時。這個設計思路相對比較簡單,利用所學過的知識容易實現,加上光電耦合器用于隔離強電和弱電,比較安全,正好符合我們自動化專業(yè)用弱電控制強電的目的,正所謂學以致用。2.2 詳細設計 主要硬件介紹1單片機這里選用AT89C51單片機作為控制系統(tǒng)的處理器。AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器的低電壓、高性能CMOS 8位微處理器。2溫度傳感器溫度傳感器有很多種型號,這里我選用DS18B20溫度傳感器。數字溫度傳感器DS18B20具有獨特的單總線接口方式,支持多節(jié)點,使分布式溫度傳感器設計大為簡化。測溫時
5、無需任何外圍原件,可以通過數據線直接供電,具有超低功耗工作方式。測溫范圍為-55到+125攝氏度,可直接將溫度轉換值以16位二進制數字碼的方式串行輸出,因此特別適合單線多點溫度測量系統(tǒng)。由于傳輸的是串行數據,可以不需要放大器和A/D轉換器,因而這種測溫方式大大提高了各種溫度測控系統(tǒng)的可靠性,降低了成本,縮小了體積。3開關器件由于單片機與電動機之間需要用開關器件連接,并且前者用弱電控制,后者由強電控制,這就尤其需要注意安全問題。于是我想到了在課本中學過的高性能安全開關器件光電耦合器。光電耦合器是由一個發(fā)光器件和和一個光電轉換器件組成,這里所用的光電耦合器OPTOCOUPLER-NPN是由一個發(fā)光
6、二極管和一個光敏晶體管所組成。當發(fā)光二極管發(fā)光,就會使得光敏晶體管導通,繼電器通電動作,將開關吸合,電動機回路斷開。 電路設計方法1顯示部分電路顯示電路截圖如下圖所示。圖2.1 顯示部分電路圖這里我選用LCDLM016L液晶顯示屏作為系統(tǒng)的顯示器件,如圖所示,LCDLM016L采用標準的16腳接口,仿真時隱藏了背光正極和背光負極兩個引腳。它通過D0-D78位數據端來與單片機進行數據和指令傳輸,這里我們將它與單片機的P0口連接。在顯示屏上顯示的內容包括設定的溫度值SET、傳感器檢測到的環(huán)境溫度SA以及時鐘,這個時鐘是可以調整的,這樣方便工作人員在對系統(tǒng)進行操作時有一個時間概念。2溫度檢測電路溫度
7、傳感器與單片機的連接情況如下圖所示。圖2.2 溫度檢測電路圖溫度傳感器18B20將檢測到的環(huán)境實時溫度進行A/D轉換和放大,然后串行送入單片機P1.7口,便于單片機將此數值與設定的溫度值進行比較,然后先做出相應反應。在仿真時,我們只能通過按18B20上的加減按鈕來調節(jié)實時溫度,是一個模擬的過程。3鍵盤電路鍵盤電路如下圖所示。圖2.3 鍵盤電路圖這里減排設計得比較簡單,“MS”鍵是切換調整對象的,調整對象包括時、分、溫度設定值三項,“+”鍵是向上加調整對象的值,“”鍵是向下減調整對象的值,“ON/OFF”鍵是打開和關閉系統(tǒng)自動調節(jié)功能的開關鍵。4電氣開關及工作電路電器開關及工作電路如下圖所示。圖
8、2.4 電氣開關及工作電路圖如圖所示,光電耦合器1腳接電源,2腳接單片機P3.7腳。工作過程用以下三個階段來描述:(1)單片機將溫度傳感器送入的值與設定值進行比較,若送入值小于設定值,則P3.7腳保持高電平,這樣發(fā)光二極管不發(fā)光,光敏晶體管保持高阻態(tài),繼電器也不會工作,電動機和燈泡維持導通,相當于電爐繼續(xù)加熱,指示燈亮;(2)一旦送入值比設定值大,單片機將會控制P3.7腳變?yōu)榈碗娖剑l(fā)光二極管導通發(fā)光,光敏晶體管受光照影響導通,繼而繼電器工作,電磁鐵將單刀雙擲開關吸向左端,使電動機和燈泡同時停止工作,這就相當于電爐斷電,停止加熱;(3)電爐短路一段時間后,必然導致爐溫降低,而溫度傳感器DS18
9、B20在不間斷地檢測爐溫,當檢測值低于設定值后,單片機又控制P3.7腳恢復高電平,光電耦合器恢復高阻態(tài),繼電器斷電,單刀雙擲開關被彈回右端,電動機和燈泡又開始工作,這相當于電爐從新開始加熱。 繪制流程圖NNYY將P3.7口置1設定值<采集值?將P3.7口置0設定值>=采集值?送入單片機進行溫度值比較按鍵掃描、溫度采集時鐘定時器0初始化,DS18B20初始化延時500ms啟動初始化P1口,初始化24C02LCD初始化讀出24C02保存的數據賦于K開始 程序設計由于整個程序工程量比較大,我采用模塊化設計方法來設計這個程序。首先定義在后面將會用到的變量,不可能一次定義準確,所以邊定義邊補
10、充。然后編寫子函數,包括LCM初始化子函數、顯示指定坐標的一個字符子函數、ds18b20初始化函數、ds18b20延遲子函數、讀取ds18b20當前溫度子函數、液晶顯示子函數、鍵盤掃描子函數、設定工作模式子函數、按鍵加法子函數、按鍵減法子函數、24C02讀寫驅動程序、定時器t0中斷子函數等子程序,最后是主函數。2.3 調試和仿真在Keil軟件中編寫完程序后,編譯生成.Hex文件,單片機可以執(zhí)行.Hex文件。在Protues軟件中,給單片機加載所生成的.Hex文件,按下運行按鈕,系統(tǒng)開始仿真。系統(tǒng)仿真截圖如下圖所示。圖2.5系統(tǒng)仿真圖(一)上一張是當溫度采樣值小于設定值,電熱爐處于工作狀態(tài)時的仿
11、真截圖。以下這張是當溫度采樣值高于設定值后,系統(tǒng)自動做出反應,使電熱爐斷電停止工作的仿真截圖。圖2.6系統(tǒng)仿真圖(二)3 結果分析由以上仿真結果可以知道,此次的設計基本成功。當采樣溫度低于設定值的時候,系統(tǒng)不會對電熱爐做出相應動作,電熱爐保持加熱。一旦采樣溫度高于設定值,系統(tǒng)就會做出反應,使電加熱爐斷電停止加熱。當溫度降下來后,系統(tǒng)又會自動控制電加熱爐重新開始加熱。系統(tǒng)的反應速度也是十分精確的,會在很短的時間內作出相應動作。另外,由于在電路中加入了EPROM24C02,使得該系統(tǒng)具有掉電保護功能,來電后自動恢復正常工作。除此之外,該系統(tǒng)還有一個比較實用的小功能電子鐘,這樣的話工作人員可以利用它
12、準確掌握系統(tǒng)已經工作的時間,也就是說可以把它當做一個定時器來用。在安全保護方面,該系統(tǒng)也有相當不錯的表現,由于使用了光電耦合器和就電磁繼電器,將強電部分和弱電部分充分隔離,十分安全。綜合以上分析,該系統(tǒng)的設計十分成功。4 課程設計心得體會一個星期很快就過去了,計算機控制技術課程設計也告一段落。本次課程設計,我的題目是設計一個電加熱爐溫度控制系統(tǒng)。說到電加熱爐,我們都比較熟悉,在日常生活中我們經常用到,特別是冬天用它來煮火鍋。我們也會發(fā)現這樣一個問題,一般的電加熱爐是沒有溫度自動控制的,當溫度上升到我們需要的程度時,它仍然繼續(xù)加熱,這不僅會影響到加熱效果,還會造成電能的浪費。那么就有必要設計一種
13、能自動調節(jié)爐溫的系統(tǒng),把它應用到日常生活中,將會給人們帶來極大的方便。在設計的過程中,我也遇到一些麻煩,比如說怎樣來實現電動機回路的自動通斷調節(jié)、怎樣來實現時鐘的調整等等,這些問題都令我十分棘手。通過去圖書館查閱相關資料和上網搜索各硬件的原理以及應用,我最終都一一解決了這些問題。由于我們是三個同學做同一個題目,在設計過程中,我們遇到困難的時候也經常相互討論,相互請教,最終一起解決問題,在此也感謝我的“戰(zhàn)友”們??偟膩碚f,此次課程設計的過程比較輕松,從拿到問題到徹底解決問題,這是一個令人振奮并享受的過程。經過去圖書館大量的查閱書籍,我也學到了很多在課本上沒有的知識,收獲頗豐。這段過程讓我懂得了一
14、個道理,那就是學生要學的絕對不該僅僅是課本上的東西,有些東西只有走進圖書館,你才可能學習到。也只有這樣,我們才能成為一個見多識廣、淵博的人。 參考文獻1 于海生微型計算機控制技術清華大學出版社,20042 譚浩強C程序設計(第三版). 清華大學出版社,20063 戴焯. 傳感與檢測技術. 武漢理工大學出版社,20064 張毅剛. 單片機原理及應用. 高等教育出版社,20035 柯節(jié)成. 簡明電子元件器件手冊. 高等教育出版社,2005附錄系統(tǒng)的完整程序如下:/*電加熱爐溫度控制系統(tǒng)問題描述:當溫控開關打開時,若測得環(huán)境溫度大于設定溫度,則繼電器吸合,電加熱爐停止工作;若測得環(huán)境溫度小于設定溫度
15、,則繼電器釋放,電加熱爐繼續(xù)工作。*/#include<reg51.h>#include<intrins.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define BUSY 0x80 /lcd忙檢測標志 #define DATAPORT P0 /定義P0口為LCD通訊端口 #define PLAYE_ADDR XBYTE0XBFFF /語音報警地址 sbit RED_ALARM=P10; /紅色指示燈sbit WRITE_ALARM=P11; /白色指示燈
16、sbit GREEN_ALARM=P12; /綠色指示燈sbit BLUE_ALARM=P13;sbit P1_4=P14; /時鐘調整sbit P1_5=P15; /時鐘加sbit P1_6=P16; /時鐘減sbit DQ = P17; /定義ds18b20通信端口 sbit LCM_RS=P20; /數據/命令端sbit LCM_RW=P21; /讀/寫選擇端sbit LCM_EN=P22;sbit sda=P23; /IO口定義sbit scl=P24; /LCD使能信號sbit ad_busy=P32; /adc中斷方式接口sbit RECLED_EOC=P35; /ISD1420放
17、音結束查詢標志sbit OUT=P37;uchar ad_data; /ad采樣值存儲uchar seconde; /定義并初始化時鐘變量uchar minite;uchar hour;uchar mstcnt=0;uchar temp1,temp2,temp; /溫度顯示變量uchar t,set;uchar K;bit ON_OFF=0;bit outflag;bit write=0;uchar code str0="- : : - "uchar code str1="SET: C SA: . C"void delay_LCM(uint); /LCD
18、延時子程序void initLCM( void); /LCD初始化子程序void lcd_wait(void); /LCD檢測忙子程序void WriteCommandLCM(uchar WCLCM,uchar BusyC); /寫指令到ICM子函數void WriteDataLCM(uchar WDLCM); /寫數據到LCM子函數void DisplayOneChar(uchar X,uchar Y,uchar DData) /顯示指定坐標的一個字符子函數void DisplayListChar(uchar X,uchar Y,uchar code *DData);/顯示指定坐標的一串字符
19、子函數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(void);void dec_key(void);void delay_18B20(unsigned int i);void Init_DS18B20(void) ;uchar ReadOneChar(void);void W
20、riteOneChar(unsigned char dat);void ReadTemperature(void);void ad0809(void);void playalarm(void); /*延時K*1ms,12.000mhz*/void delay_LCM(uint k) uint i,j; for(i=0;i<k;i+) for(j=0;j<60;j+) ; /*寫指令到LCM子函數*/void WriteCommandLCM(uchar WCLCM,uchar BusyC) if(BusyC)lcd_wait();DATAPORT=WCLCM; LCM_RS=0; /
21、 選中指令寄存器 LCM_RW=0; / 寫模式 LCM_EN=1; _nop_(); _nop_();_nop_(); LCM_EN=0; /*寫數據到LCM子函數*/void WriteDataLCM(uchar WDLCM) lcd_wait( ); /檢測忙信號 DATAPORT=WDLCM; LCM_RS=1; / 選中數據寄存器 LCM_RW=0; / 寫模式 LCM_EN=1; _nop_();_nop_();_nop_(); LCM_EN=0;/*lcm內部等待函數*/void lcd_wait(void) DATAPORT=0xff; LCM_EN=1; LCM_RS=0;
22、LCM_RW=1; _nop_(); while(DATAPORT&BUSY) LCM_EN=0; _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); LCM_EN=0;/*LCM初始化子函數*/void initLCM( ) DATAPORT=0;delay_LCM(15);WriteCommandLCM(0x38,0); /三次顯示模式設置,不檢測忙信號 delay_LCM(5); WriteCommandLCM(0x38,0); delay_LCM(5); WriteCommandLCM(0x38,0); delay_LCM(5); Wri
23、teCommandLCM(0x38,1);/8bit數據傳送,2行顯示,5*7字型,檢測忙信號 WriteCommandLCM(0x08,1); /關閉顯示,檢測忙信號 WriteCommandLCM(0x01,1); /清屏,檢測忙信號 WriteCommandLCM(0x06,1); /顯示光標右移設置,檢測忙信號 WriteCommandLCM(0x0c,1); /顯示屏打開,光標不顯示,不閃爍,檢測忙信號/*顯示指定坐標的一個字符子函數*/void DisplayOneChar(uchar X,uchar Y,uchar DData) Y&=1; X&=15; if(Y
24、)X|=0x40; /若y為1(顯示第二行),地址碼+0X40 X|=0x80; /指令碼為地址碼+0X80 WriteCommandLCM(X,0); WriteDataLCM(DData);/*顯示指定坐標的一串字符子函數*/void DisplayListChar(uchar X,uchar Y,uchar code *DData) uchar ListLength=0; Y&=0x01; X&=0x0f; while(X<16) DisplayOneChar(X,Y,DDataListLength); ListLength+; X+; /*ds18b20延遲子函數
25、(晶振12MHz )*/ void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函數*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ復位 delay_18B20(8); /稍做延時 DQ = 0; /單片機將DQ拉低 delay_18B20(80); /精確延時 大于 480us DQ = 1; /拉高總線 delay_18B20(14); x=DQ; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay_18B20(20);/*ds18b20讀一個字節(jié)*/ u
26、nsigned 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);/*ds18b20寫一個字節(jié)*/ void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ
27、= 1; dat>>=1; /*讀取ds18b20當前溫度*/void ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉換delay_18B20(100); / this message is wery importantInit_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作WriteOneChar
28、(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度delay_18B20(100);a=ReadOneChar(); /讀取溫度值低位b=ReadOneChar(); /讀取溫度值高位temp1=b<<4;temp1+=(a&0xf0)>>4;temp2=a&0x0f;temp=(b*256+a)>>4); /當前采集溫度值除16得實際溫度值/*液晶顯示子函數1正常顯示*/void displayfun1(void)WriteCommandLCM(0x0c,1); /顯示屏打開,光標不顯示,不閃爍,檢測忙信號Display
29、ListChar(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);/液晶上顯示分DisplayOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,seconde/10+0x30); /液晶上顯示秒DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(4,1,K/
30、10+0x30); /液晶上顯示設定的溫度DisplayOneChar(5,1,K%10+0x30); DisplayOneChar(11,1,temp1/10+0x30); /液晶上顯示測得的溫度 DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);if(ON_OFF=0) /若溫控標志為0DisplayOneChar(14,0,0x4f); / 液晶上顯示不控溫的標志DisplayOneChar(15,0,0x46);elseDisplayOneChar(14,0,0x4f); / 液晶上顯示控溫的標志
31、DisplayOneChar(15,0,0x4e);if(outflag=1) DisplayOneChar(0,0,0x7c); elseDisplayOneChar(0,0,0xef);/*液晶顯示子函數2*/void displayfun2(void)WriteCommandLCM(0x0c,1); /顯示屏打開,光標不顯示,不閃爍,檢測忙信號DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%10+0x30);Di
32、splayOneChar(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,temp2/10+0x30); WriteCommandLCM(0x0f,1); /顯示屏打開,光標顯示,閃爍,檢測忙信號 DisplayOneChar
33、(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%10+0x30);/*液晶顯示子函數3*/void displayfun3(void)WriteCommandLCM(0x0c,1); /顯示屏打開,光標不顯示,不閃爍,檢測忙信號DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%10+0x30); DisplayOneChar(9,0,seconde/10+0x30);DisplayOneCh
34、ar(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,temp2/10+0x30); WriteCommandLCM(0x0f,1); /顯示屏打開,光標顯示,閃爍,檢測忙信號DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%
35、10+0x30);/*液晶顯示子函數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%10+0x30); DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,s
36、econde/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); /顯示屏打開,光標顯示,閃爍,檢測忙信號DisplayOneChar(4,1,K/10+0x30); DisplayOneChar(5,1,K%10+0x30);/*鍵盤掃描子函數*/void keyscan(void)ucha
37、r xx; /局部變量 P1=0xff;if(P1!=0xff) delay_LCM(50);if(P1!=0xff) xx=P1;switch(xx)/ 根據按鍵狀態(tài),調用不同的子函數 case 0xfe:set_adj(); break; case 0xfd:inc_key(); break; case 0xfb:dec_key(); break; case 0xf7:delay_LCM(150);ON_OFF=!ON_OFF;while(!BLUE_ALARM); break;default:break; /*設定工作模式子函數*/void set_adj(void)delay_LCM(
38、100);set+; if(set>=4)set=0;while(!RED_ALARM);/*按鍵加法子函數*/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; break;case 2:minite+; if(minite>=59)minite=59;break;case 3:K+;if(K>=99)K=99; break; default:break;
39、while(!WRITE_ALARM);/*按鍵減法子函數*/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<=0)minite=0;break;case 3:K-;if(K<=1)K=1; break; default:break;while(!GREEN_ALARM);/*24C02讀寫驅動程序*
40、/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();void stop() /停止I2C總線sda=0; flash(); scl=1; flash(); sda=1; flash();void writex(uchar j) /
41、寫一個字節(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+) flash(); scl=1; flash();if (sda=1) j=1;else j=0;k=(k<<1)|j;scl=0;flash(
42、); return(k);void clock() /I2C總線時鐘uchar i=0;scl=1; flash();while (sda=1)&&(i<255)i+;scl=0; flash();/從24c02的地址address中讀取一個字節(jié)數據/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é)數據info/void x24c02_write(uchar address,uchar info)EA=0;start(); writex(0xa0);clock(); writex(address
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CAPE 10103-2022混凝土物理力學性能試驗儀器設備管理規(guī)程
- 北京高壓考試題及答案
- css考試題模擬試題及答案
- 高??荚囶}型及答案
- 教材考試題型及答案
- 華為射頻面試題及答案
- 漢陽幼教面試題及答案
- 創(chuàng)作劇本面試題及答案
- 幼兒園畢業(yè)演講稿
- 小學五年級家長會家長發(fā)言稿模版
- 2025屆江蘇省蘇州市八校高三下學期三模聯考物理試卷(含解析)
- 分子氧氧化丙烯制環(huán)氧丙烷銅基催化劑的制備及性能研究
- 2024-2025學年青島版(五四學制)小學數學二年級下冊(全冊)知識點復習要點歸納
- 人教版五下-6.1 同分母分數加減法(教學課件)
- 2025年入團考試必考題目試題及答案
- 商標基礎知識試題及答案
- 中小學人工智能通識教育指南(2025年版)
- 職業(yè)技術學院裝配式建筑工程技術專業(yè)人才培養(yǎng)方案(2024版)
- 學校學生食品安全培訓課件
- 在線網課學習課堂《人工智能(北理 )》單元測試考核答案
- 6.8相遇問題(課件) 數學四年級下冊(共15張PPT)人教版
評論
0/150
提交評論