PIC單片機課程設(shè)計_第1頁
PIC單片機課程設(shè)計_第2頁
PIC單片機課程設(shè)計_第3頁
PIC單片機課程設(shè)計_第4頁
PIC單片機課程設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 PIC單片機課程設(shè)計報告 題 目: 溫度監(jiān)測與控制 學生姓名: 學 號: 指導教師: 年 月 日目 錄一.課程設(shè)計性質(zhì)與目的02二.課程設(shè)計任務(wù)和要求02三.課程設(shè)計具體步驟3.1 總體方案設(shè)計說明 033.2 硬件設(shè)計說明 033.3 軟件設(shè)計說明 06四.設(shè)計總結(jié)與體會 4.1設(shè)計結(jié)果 084.2問題及解決方法 084.2感想及體會 08五參考文獻 09六附錄 101. 課程設(shè)計性質(zhì)和目的: PIC單片機課程設(shè)計是電氣工程與自動化專業(yè)及相近專業(yè)的一門重要的專業(yè)實踐課,本課程在PIC單片機課程的基礎(chǔ)上,通過硬件設(shè)計與軟件編程與實際實驗板調(diào)試的實踐,進一步掌握PIC單片機的C程序語言的編寫與

2、調(diào)試,是畢業(yè)設(shè)計前的一次重要的實踐,為今后走上工作崗位打下堅實的單片機應(yīng)用基礎(chǔ)。具體來說,這次課程設(shè)計能讓我 擴展、加深對PIC單片機應(yīng)用的了解,包括中斷、定時器、PWM、顯示等功能模塊的應(yīng)用;接觸項目中C語言編程的邏輯,如何一步一步實現(xiàn)所想要的功能;通過分析選擇元件,學著查找相關(guān)元件資料;在后期,優(yōu)化程序,使之能滿足實際運行要求;最終完成該課程設(shè)計。二.課程設(shè)計任務(wù)和要求:我的課程設(shè)計題目是溫度監(jiān)測與控制,要求當溫度T超過電機啟動設(shè)定值(START_T)時,為了防止在臨界溫度值時的風扇頻繁啟/停,控制風扇的啟/停要有一定的回差值(DELTA_T),即當T=START_T時啟動風扇,當T(ST

3、ART_T-DELTA_T)時關(guān)閉風扇,并要求START_T和DELTA_T能由用戶設(shè)定。具體來說:1)利用LCD,顯示實時溫度,電機啟動溫度值及溫度控制回差值;2)能夠通過按鍵的設(shè)置增大或減小轉(zhuǎn)啟動溫度及回差溫度;3)通過LED亮滅實現(xiàn)預(yù)警;4)通過風扇(直流電機)實現(xiàn)散熱。三課程設(shè)計具體步驟:3.1 總體方案設(shè)計說明在實驗板上調(diào)試程序在PROTEUS上繪制硬件仿真圖編寫C程序,利用MPLAB經(jīng)行調(diào)試了解課設(shè)所需元件、模塊,實現(xiàn)功能流程 本課程設(shè)計利用TC74溫度傳感器采用溫度數(shù)據(jù),通過PIC16F877芯片IIC通信模塊傳送溫度數(shù)據(jù),經(jīng)BCD轉(zhuǎn)換,在LCD上顯示出來。并且該溫度值將與電機啟

4、動設(shè)定值對比,與電機啟動設(shè)定值和回差值的差進行對比,調(diào)控風扇的轉(zhuǎn)停,LED的閃滅。為了防止電機旋轉(zhuǎn)轉(zhuǎn)速過高,根據(jù)脈寬調(diào)制原理編寫相應(yīng)程序,利用單片機調(diào)整輸出PWM的高電平時間控制直流電機的轉(zhuǎn)速。3.2硬件設(shè)計說明整個系統(tǒng)硬件電路包括四個主要模塊:LCD顯示模塊、按鍵輸入模塊、微型直流電機PWM控制模塊。3.2.1LCD顯示模塊圖3.2.1課設(shè)板所用的 LCD 型號為YB1602A,接線如圖3.2.1 所示。圖中采用4 位數(shù)據(jù)線接線方式,是為了節(jié)省單片機的IO 口。從圖中可以知道,要使用該LCD 時,短路插P38、P22 的短路插(除RD7 外)均要插上。如要使用背光控制,可將P22 的短路插8

5、 插短接,如不用背光,該短路插不接。表1 為LCD YB1602A 的引腳功能說明。引腳名功能RS命令/數(shù)據(jù)選擇:1:數(shù)據(jù),0:命令R/W 讀/寫選擇:1:讀,0:寫E 數(shù)據(jù)使能:下降沿送入有效DB7DB0數(shù)據(jù)線,如用4位數(shù)據(jù),使用高4位表 1 LCD YB1602A 引腳功能表上電后要延時15ms 后,才能進行初始化,LCD 初始化過程詳見附錄。3.2.2按鍵輸入模塊采用課設(shè)板上44按鍵中的三個普通按鍵S1、S5、S9即可,三個按鍵對應(yīng)的功能見表2,接線如圖3.2.2所示,其中P45 須短接到地,P20 的13 短路插短接,用到RB0RB2共3個引腳,編程時利用RB0/INT 中斷與RB電平

6、變化中斷進行按鍵處理。圖3.2.2按鍵功能S1(SET)進入調(diào)整模式,或者退出調(diào)整模式S5(INC)每按一次,則數(shù)值增1S6(DEC)每按一次,則數(shù)值減1表 2 按鍵功能表3.2.3微型直流電機PWM控制模塊圖3.3.3本模塊的接線圖如圖3.3.3所示,利用單片機輸出的PWM波形控制T3的通斷,對VCC電壓進行斬波,通過改變PWM占空比從而改變直流電機的電樞電壓,從而改變電機轉(zhuǎn)速。為了防止T3斷開時電機產(chǎn)生的過電流使板上器件燒毀,在電機兩端反并聯(lián)了二極管D4。本設(shè)計采用CCP1模塊即通過RC2輸出1kHz的PWM波控制電機轉(zhuǎn)速,P26需將2用短路插短接。3.2.4 TC74溫度傳感器模塊溫度傳

7、感器TC74是Microchip公司的一款I(lǐng)IC接口的數(shù)字式溫度傳感器。其測溫范圍為-40125,在2585之間的誤差為-2+2,在0125之間的誤差為-3+3。它有兩種分裝,如下圖: 220V電源單片機PIC16F877 pwmRBIICLED燈變壓器硬件框圖:直流電機 按鍵中斷溫度檢測TC74液晶顯示控制3.3 軟件設(shè)計說明3.3.1主程序框圖開始:初始化溫度的讀取顯示 進入修改設(shè)置狀態(tài)KEY.FLAG=1? y5秒內(nèi)有操作? n y n 電機運轉(zhuǎn)、LED閃亮溫度值超過電機啟動值? n y 溫度值超過電機啟動值與回差值的差? nLED燈滅,電機不啟動 y 是 LED長亮 n 3.3.2各部

8、分功能實現(xiàn) 3.3.2.1按鍵功能程序流程圖本設(shè)計用了3個按鍵,一個是接于RB0/INT的按鍵,它利用INT中斷功能,為功能設(shè)置鍵;另兩個是接與RB1、RB2的按鍵,它們利用RB電平變化中斷,為+1和-1鍵。因此程序要用到INT中斷與RB電平變化中斷。為了方便編程,定義了結(jié)構(gòu)體類型STRU變量KEY:l KEY的成員SET為3位,保存按鍵SET的次數(shù),次數(shù)只能在02間循環(huán),但結(jié)構(gòu)體預(yù)留了3位,最大可至7,便于程序功能擴展;l 成員INC=1表明有INC按鍵按下,但未處理,處理后令其等于0,就不會重復(fù)處理了;l 成員DEC=1表明有DEC按鍵按下,其他操作與成員INC相同;l 成員FLAG=1表

9、明有按鍵需要處理,成員CHANGE=1表明顯示需要刷新。在按鍵的處理中,中斷程序中只是設(shè)置了標志位,處理按鍵均在主程序中進行,一旦有有效按鍵按下(先按SET后按INC或DEC),啟動TMR1進行延時計時時,超過5秒內(nèi)無按鍵,程序自動退出按鍵狀態(tài),因此每次有效按鍵時,TMR1的中斷次數(shù)計數(shù)值T1N均清零。 3.3.2.2PWM輸出程序設(shè)計本設(shè)計采用CCP1模塊從RC2引腳輸出1kHz(即周期為1000)的PWM波,預(yù)分頻比用1:16,晶振為8MHz,則 1000=(PR2+1)40.12516 PR2=124 假設(shè)高電平時間為則由CCPR1L及CCP1CON的5、4兩位共10位的X值為,時間單位

10、為。而占空比 改變PWM的高電平時間,只需對CCPR1L和CCP1CON的5、4兩位重新賦值即可。 3.3.2.3 溫度采樣顯示程序設(shè)計LCD液晶顯示及IIC初始化,單片機通過IIC通信向TC74發(fā)送地址,地址在字節(jié)的高7位,最低位為0表示為寫,接著單片機向TC74發(fā)送第二個數(shù)據(jù),即讀溫度命令字RTR(0b);然后再重新開始,單片機再向TC74發(fā)送地址,但此時最低位為1,表示接下來要讀TC74的溫度值。最后單片機接受TC74發(fā)出的溫度值。經(jīng)過BCD轉(zhuǎn)碼后,將該溫度值顯示在LCD液晶屏上。4、結(jié)論4.1 設(shè)計結(jié)果本次課程設(shè)計能夠滿足題目要求,實現(xiàn)溫度監(jiān)測與控制,能夠根據(jù)用戶設(shè)置的設(shè)定值啟動風扇降

11、溫,并通過燈光信號變化預(yù)警。4.2 問題及解決方法1) 第一個碰到的問題編譯是有不少錯誤,只能一個一個解決,不僅需要看書,還需要和同學多交流,比如,書上IIC_SEND程序中STAT_RW在MPLAB里一直報錯,后來改成RW就可以了;2) 是LCD液晶屏無法顯示數(shù)據(jù)。有PROTEUS上接線的錯誤,線腳直接接在LCD的針腳上,程序中初始化定義出錯,未能理解LCD_WRITE及LCD_WRITE_4的不同,后來通過在項目中設(shè)置LED檢測,從主程序開頭逐句排查,了解程序運行卡在哪里,逐一解決,實現(xiàn)正常顯示;3) 溫度顯示T=000,先排除顯示模塊出現(xiàn)問題的可能,屏蔽按鍵中斷功能,反復(fù)檢查IIC初始化

12、,及IIC主動接收、主動發(fā)送程序,發(fā)現(xiàn)在IIC端口加IIC調(diào)試器觀察IIC通信是否正常工作;4) 按鍵失靈,按鍵沒有反應(yīng),解決辦法是檢查相關(guān)程序,著重檢查端口設(shè)置;5) 剛開始對電機何時運行,LED的閃滅情況有些混亂,解決辦法是,把功能設(shè)定用文字寫下來,再根據(jù)文字編寫程序;6) 實際燒寫發(fā)現(xiàn)LCD顯示異常,按鍵沒有反應(yīng),又重新梳理程序,更改了按鍵程序邏輯;7) 實際電機運轉(zhuǎn)時,電機轉(zhuǎn)速忽大忽小,無法穩(wěn)定。這種情況可能是由于程序里對PWM的高電平時間調(diào)整得過于頻繁,或者是由于調(diào)整的幅度過大,可在相應(yīng)程序段插入一段延時,或者將PWM高電平時間調(diào)整的幅度減小。4.3 感想及體會1) 確定課題后,就確

13、定了要用到哪些元件、芯片及PIC16F887的哪幾個功能模塊,所以,必須對這些有個比較深的了解和認識,這樣在編寫程序時能減少錯誤,構(gòu)思出程序流程圖,再根據(jù)流程圖寫確定主函數(shù)框架,確定子程序,這樣程序編寫起來才不會亂,也有助于檢查時迅速找到相應(yīng)的程序段;2) 觀察實驗板實際電路,根據(jù)實驗板確定使用哪些端口,之后再進行相應(yīng)程序編寫;3) 程序的編寫,需分模塊寫,子程序化設(shè)計做到細致認真,特別是端口地址設(shè)置,編譯出現(xiàn)錯誤耐心解決,在編譯成功后,而仿真運行發(fā)生故障時,一個一個檢查相應(yīng)模塊程序運行是否正常,并且對硬件設(shè)計也要多加留心,有時是硬件接線的問題;4) 實時保存,留有備份,以防萬一,對出現(xiàn)問題的

14、程序段可反復(fù)推敲;5) 程序基本構(gòu)架完畢和調(diào)試成功后,對程序可進行必要的刪減和優(yōu)化,使其更加簡練。還可以添加一些附加功能,使系統(tǒng)設(shè)計更完善和人性化。 通過這次課程設(shè)計使我對PIC單片機有了更深的了解,積累了一些設(shè)計經(jīng)驗,懂得了理論與實際相結(jié)合是很重要的,嚴謹和細心才能把程序做好做漂亮。不同的課題使我在做課設(shè)的過程中更加獨立,掌握到更多知識。雖然只是一個小小的題目,但是卻有很豐富的內(nèi)容,比如還可以加入電機測試模塊,對電機進行調(diào)速,這都是我接下來要實現(xiàn)的目標。參考書目:1 PIC16系列單片機C程序設(shè)計與PROTEUS仿真江和,北京航空航天大學出版社,20102 福州大學PIC單片機課程設(shè)計指導書

15、江和,鮑光海,2012年3月附錄#include_CONFIG(0x3771);/引腳定義#define LCD_RS RD4 /LCD寄存器選擇 數(shù)據(jù)H/指令L#define LCD_RW RD5 /LCD讀H/L寫控制線#define LCD_E RD6 /LCD E 時鐘#define LED RA5 /LED#define FS RC2 /電機#define KEY_DEC RB2#define KEY_INC RB1/常數(shù)定義#define TC74_ADD 0b#define COM 0#define DAT 1#define LINE1 0b#define LINE2 0b#de

16、fine RTR 0b#define ST_POSITION LINE2+5#define DT_POSITION LINE2+13/函數(shù)聲明void CSH();void LCD_CSH(void);void LCD_WRITE(char,char);void LCD_WRITE_4(char,char);void DISP_MENU(void);void DISP_T(signed char);void DISP_ST_DT(void);void BCD(unsigned int);void DELAY_I(unsigned int);void DELAY_US(char);void DE

17、LAY(unsigned int);void IIC_SEND(char);void IIC_CSH(void);signed char READ_T(void);void interrupt ISR(void);char AA17= WKDJ ;_EEPROM_DATA(50,3,255,255,255,255,255,255);char BW,SW,GW;char T1N,START_T,DELTA_T;/定義結(jié)構(gòu)體類型STRU的變量KEYstruct STRUunsigned SET:3;unsigned INC:1;unsigned DEC:1;unsigned FLAG:1;unsi

18、gned CHANGE:1;KEY;void main(void)char ST_OLD,DT_OLD;signed char R5;unsigned int i;CSH();LCD_WRITE(0b,COM);DELAY(2);DISP_MENU();DELAY(50);LCD_WRITE(0b,COM);DELAY(2);DISP_T(R5);DISP_ST_DT();while(1)R5=READ_T();/讀溫度傳感器的溫度值 DISP_T(R5);/顯示溫度值 LED=1; if (R5=(START_T-DELTA_T) LED=0; if (R5=START_T) TRISC2=

19、0;PR2=124;CCPR1L=0x32;CCP1CON=0b;T2CON=0b;LED=1;i=0;while(KEY.FLAG=0)DELAY(1);i+;if(i100)LED=0;if(i200)break; ST_OLD=START_T;DT_OLD=DELTA_T;while (KEY.FLAG=1)LED=0;NOP();CCP1CON=0b;FS=0;if (KEY.SET=1)/進入修改LCD_WRITE(ST_POSITION,COM);else if (KEY.SET=2)LCD_WRITE(DT_POSITION,COM);LCD_WRITE(0b,COM);/字符閃

20、if (KEY.SET=1)if (KEY.INC=1)KEY.INC=0;DELAY(3);START_T+;if (START_T=100)START_T=100;else if (KEY.DEC=1)KEY.DEC=0;DELAY(3);START_T-;if (START_T=20)DELTA_T=20;else if(KEY.DEC=1)KEY.DEC=0;DELAY(3);DELTA_T-;if (DELTA_T4;LCD_WRITE_4(R2,FLAG);R2=R1&0x0F;LCD_WRITE_4(R2,FLAG);DELAY_US(10);/IIC發(fā)送數(shù)R并等待發(fā)送完成,收到

21、從機的應(yīng)答信號void IIC_SEND(char R)SSPBUF=R;/發(fā)送while(RW=1);/在主控模式下判斷發(fā)送是否完成while(SSPIF=0);/等待發(fā)送完成while(ACKSTAT=1);/等待從機發(fā)送信號應(yīng)答/IIC初始化void IIC_CSH(void)TRISC&=0b;SSPCON=0b;/同步串口使能,主控方式SMP=0;/使能告訴模式(400kHz)的壓擺率控制SSPADD=4;/主控模式為波特率值,每位時間T=(SSPADD+1)/Tcy=5uS/讀TC74的溫度值signed char READ_T(void)signed char R1;/INTCO

22、N=0b;/關(guān)閉GIE、PEIE中斷SEN=1;/開始條件while(SEN=1);/檢測開始條件是否完成IIC_SEND(TC74_ADD1);/送地址(寫)IIC_SEND(RTR);/寫RTR指令(寫)RSEN=1;/重新開始條件while(RSEN=1);/等待IIC_SEND(TC74_ADD1)+1);/發(fā)送TC74地址(讀)RCEN=1;/接收使能while(RCEN=1);/等待R1=SSPBUF;/接收數(shù)據(jù)PEN=1;/停止位while(PEN=1);return(R1);/void DISP_MENU(void)char i;LCD_WRITE(0b,COM);LCD_WR

23、ITE(LINE1,COM); /回到行首for(i=0;i=0)BCD(R1);else R2=(R1)+1;BCD(R2);LCD_WRITE(LINE1+5,COM);LCD_WRITE(T,DAT);LCD_WRITE(=,DAT);if(R1=0)LCD_WRITE(BW+0x30,DAT);LCD_WRITE(SW+0x30,DAT);LCD_WRITE(GW+0x30,DAT);LCD_WRITE(0xDF,DAT);LCD_WRITE(C,DAT);/延時(n)msvoid DELAY(unsigned int n)unsigned int j;char k;for(j=0;j0;k-) NOP();/延時(n)ms,中斷專用void DELAY_I(unsigned int n)unsigned int j;char k;for(j=0;j0;k-

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論