單片機課設(shè)完整的_第1頁
單片機課設(shè)完整的_第2頁
單片機課設(shè)完整的_第3頁
單片機課設(shè)完整的_第4頁
單片機課設(shè)完整的_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、福州大學(xué)至誠學(xué)院 單片機原理及應(yīng)用課程設(shè)計題 目: 搶答器 姓 名: 金鑫 學(xué) 號: 210992115 系 別: 電氣工程與自動化系 專 業(yè): 電氣工程及其自動化 年 級: 2009 起訖日期 : 2011.12.12 2011.12.23 指導(dǎo)教師: 張麗萍 目 錄第1章 課程設(shè)計目的,題目和目標(biāo)以及設(shè)計方案11.1 課程設(shè)計目的11.2 課程設(shè)計題目和實現(xiàn)目標(biāo)11.3 設(shè)計方案11.3.1 設(shè)計思路 21.3.2 器件功能說明2 AT89C5121.3.4 振蕩器特性5第2章 Proteus仿真原理圖.6第3章 程序流程圖7第4章 程序代碼 8第5章 調(diào)試總結(jié)和心得體會18參考文獻 20

2、第1章 課程設(shè)計目的,題目和目標(biāo)以及設(shè)計方案1.1 課程設(shè)計目的單片機原理及應(yīng)用課程設(shè)計是與單片機原理及應(yīng)用課程相配套的實踐教學(xué)環(huán)節(jié)。單片機原理及應(yīng)用是一門實踐性很強的專業(yè)基礎(chǔ)課,通過課程設(shè)計,達到進一步理解單片機的硬件、軟件和綜合應(yīng)用方面的知識,培養(yǎng)實踐能力和綜合應(yīng)用能力,開拓學(xué)習(xí)積極性、主動性,學(xué)會靈活運用已經(jīng)學(xué)過的知識,并能不斷接受新的知識。培養(yǎng)大膽發(fā)明創(chuàng)造的設(shè)計理念,為今后就業(yè)打下良好的基礎(chǔ)。通過課程設(shè)計,掌握以下知識和技能:1、單片機應(yīng)用系統(tǒng)的總體方案的設(shè)計;2、單片機應(yīng)用系統(tǒng)的硬件設(shè)計;3、單片機應(yīng)用系統(tǒng)的軟件程序設(shè)計;4、單片機開發(fā)系統(tǒng)的應(yīng)用和調(diào)試能力。1.2 課程設(shè)計題目和實現(xiàn)

3、目標(biāo)課程設(shè)計題目:用串行AD芯片PCF8591T對正弦波、三角波、方波進行采樣。實現(xiàn)目標(biāo):(1) 能輸出3種波形的瞬時值、峰值、平均值。(2) 精度為0.01V(3) 所采樣的值能在LCD1602上顯示;(4) 幅值可以在05V任意調(diào)節(jié);(5) 頻率可以在01KHz任意調(diào)節(jié);(6) 根據(jù)開發(fā)板原理圖接線,并且上電可以運行。1.3 設(shè)計方案主要由四個模塊組成:(1)控制模塊:使用STC89C52作為主控制器。(2)液晶顯示模塊:使用雙行16*2顯示的LCD1602做顯示模塊;(3)AD采樣模塊:使用8位逐次逼近AD轉(zhuǎn)換器PCF8591T芯片。PCF8591T芯片性價比很高,可達到精度8位的精度,

4、即最小分辨率可達0.01V,幅值采樣范圍為(0,+5)V,工作電壓范圍為(+2,+6)V。(4)鍵盤模塊:選用3個獨立按鈕作為3種波形的切換。1.3.1 設(shè)計思路設(shè)計思路:首先確定課程設(shè)計的目標(biāo)是設(shè)計一個鍵盤控制波形模式,由單片機和AD轉(zhuǎn)換器及其它相關(guān)部件共同實現(xiàn)。根據(jù)所要實現(xiàn)的功能,先在proteus軟件上仿真。根據(jù)所選用的硬件可以將整個軟件設(shè)計分為若干子程序,有初始化、查詢時間、發(fā)送指令、讀取數(shù)據(jù)、顯示電壓等構(gòu)成,可以將以上子程序分別設(shè)計,實現(xiàn)各自的功能,再在子程序中調(diào)用,就可以實現(xiàn)預(yù)期的目標(biāo),在protues軟件里畫出相應(yīng)的電路圖,將編寫好的程序?qū)氲杰浖镞M行仿真,對仿真中波形發(fā)生器設(shè)

5、置不同頻率和幅值,看是否達到了設(shè)計的要求,若仿真成功,就按照電路圖進行開發(fā)板實物連接。 采用一個AD轉(zhuǎn)換器PCF8591T和單片機控制,可以通過液晶顯示屏直接讀取被采樣的瞬時值,在通過比較取得最大值(即幅值),1.3.2 器件功能說明AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可 擦除只讀存儲器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多 功能8位CPU和閃爍存儲器組合在

6、單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機 為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度傳感器,具有3引腳TO92小體積封裝形式;溫度測量范圍為55125,可編程為9位12位A/D轉(zhuǎn)換精度,測溫分辨率可達0.0625。 主機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:初始化、ROM操作指令、存儲器操作指令。必須先啟動DS18B20開始轉(zhuǎn)換,再讀出溫度轉(zhuǎn)換值。本程序僅掛接一個芯片,使用默認(rèn)的12位轉(zhuǎn)換精度,外接供電電源,讀取的溫度值高位字節(jié)送WDMSB單元,低位字

7、節(jié)送WDLSB單元,再按照溫度值字節(jié)的表示格式及其符號位,經(jīng)過簡單的變換即可得到實際溫度值。按鍵掃描子程序?qū)?shù)字溫度計的K1K3鍵進行掃描,得到鍵值完成相應(yīng)操作。按下K1鍵設(shè)定溫度報警值,調(diào)整TH的設(shè)定值,再次按下K1鍵調(diào)整TH的設(shè)定值,K2鍵減少溫度值,K3鍵增加溫度值。設(shè)定過程中可以通過按鍵K2,K3來決定是增還是減調(diào)整,按下K1鍵將設(shè)定的溫度報警值寫入DS18B20。設(shè)定完畢,將溫度報警值寫入DS18B20的E2ROM中保存,每次開機時自動從DS18B20中讀出溫度報警值。當(dāng)實測溫度超過設(shè)定溫度限制范圍時,發(fā)出聲光報警信號,喇叭發(fā)出鳴響,LED燈關(guān)閃爍。1.3.3 AT89C51AT89

8、C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機為很多嵌入式控制系

9、統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖1-2所示。圖1-2 AT89C51單片機管腳結(jié)構(gòu)圖VCC:供電電壓。 GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時

10、,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口

11、管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89C51的一些特殊功能口,如下表所示: 口管腳 備選功能 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷0) P3.3 /INT1(外部中斷1) P3.4 T0(記時器0外部輸入) P3.5 T1(記時器1外部輸入) P3.6 /WR(外部數(shù)據(jù)存儲器寫選通) P3.7 /RD(外部數(shù)據(jù)存儲器讀選通) P3口同時為閃爍編程和編

12、程校驗接收一些控制信號。 RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無

13、效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。 /EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。 1.3.4 振蕩器特性XTAL1和XTAL2分別為反向放大器的

14、輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。第2章 Proteus仿真原理圖第3章 程序流程圖開 始初始化DS18B20讀取EEPROM中的報警溫度判斷SET?測 溫 溫判斷溫度是否超標(biāo)報 警設(shè)定報警溫度是否否是第4章 程序代碼4.1程序代碼#include #include DS18B20.h #define uint unsigned int#define uchar unsigned char #d

15、efine SET P3_1 #define DEC P3_2 #define ADD P3_3 #define BEEP P2_7 bit shanshuo_st; bit beep_st; sbit DIAN = P07; uchar x=0; signed char m; uchar n; uchar set_st=0; signed char shangxian=28; signed char xiaxian=10; unchar code LEDData=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff;void Delay

16、(uint num)while( -num );void InitTimer(void)TMOD=0x1;TH0=0x3c;TL0=0xb0; void timer0(void) interrupt 1TH0=0x3c;TL0=0xb0;x+;void int0(void) interrupt 0EX0=0; if(DEC=0)Delay(2000);while(!DEC);if(set_st=1)shangxian-;if(shangxianxiaxian)shangxian=xiaxian;else if(set_st=2)xiaxian-;if(xiaxian99)shangxian=9

17、9;else if(set_st=2)xiaxian+;if(xiaxianshangxian)xiaxian=shangxian; void check_wendu(void)uint a,b,c;c=ReadTemperature()-5; a=c/100; b=c/10-a*10; m=c/10; n=c-a*100-b*10; if(m99)m=99;n=9; Disp_init() P0 = 0xbf; P2 = 0xf7; Delay(200); P2 = 0xfb; Delay(200); P2 = 0xfd; Delay(200); P2 = 0xfe; Delay(200);

18、 P2 = 0xff; Disp_Temperature() P0 =0xc6; P2 =0x77;Delay(200);P2= 0x7f;P0 =LEDDatan; P2 =0x7b;Delay(200);P2 =0x7f;P0 =LEDDatam%10; DIAN = 0; P2 = 0x7d;Delay(200);P2 = 0x7f;P0 =LEDDatam/10; P2 = 0x7e;Delay(200);P2 =0x7f; Disp_alarm(uchar baojing)P0 =0xc6; P2 =0x77; Delay(200);P2 = 0x7f;P0 =LEDDatabaoj

19、ing%10; P2 =0x7b;Delay(200);P2 = 0x7f;P0 =LEDDatabaojing/10; P2 =0x7d;Delay(200);P2 = 0x7f;if(set_st=1)P0 =0x89; else if(set_st=2)P0 =0xc7; P2 =0x7e;Delay(200);P2 =0x7f; void Alarm() if(x=10)beep_st=beep_st;x=0; if(m=shangxian&beep_st=1)|(mxiaxian&beep_st=1)BEEP=1;P0=0x00; else BEEP=0;P0=0xff; /*voi

20、d Alarm(uchar t)uchar i,j;for(i=0;i50;i+)BEEP=BEEP;for(j=0;jt;j+); BEEP=1; void main(void) uint z;BEEP=0; InitTimer(); EA=1; TR0=1; ET0=1; IT0=1; IT1=1; check_wendu(); check_wendu(); for(z=0;z2)set_st=0; if(set_st=0) EX0=0; EX1=0; check_wendu(); Disp_Temperature();BEEP=0; Alarm() ; else if(set_st=1)

21、 BEEP=0; EX0=1; EX1=1; if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(shangxian); else if(set_st=2) BEEP=0; EX0=1; EX1=1; if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(xiaxian); /*END*/#include #define DQ P1_0 void Delay_DS18B20(int num)while(num-) ;void Init_DS18B

22、20(void)unsigned char x=0;DQ = 1; Delay_DS18B20(8); DQ = 0; Delay_DS18B20(80);DQ = 1; Delay_DS18B20(14);x = DQ; Delay_DS18B20(20);unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; dat=1;DQ = 1; if(DQ)dat|=0x80;Delay_DS18B20(4);return(dat);void WriteOneChar

23、(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat=1;unsigned int ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0x44); Init_DS18B20();WriteOneChar(0xCC); WriteOn

24、eChar(0xBE); a=ReadOneChar(); b=ReadOneChar(); t=b;t=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; return(t);/*END*/*/#include #define DQ P1_0 void Delay_DS18B20(int num)while(num-) ;void Init_DS18B20(void)unsigned char x=0;DQ = 1; Delay_DS18B20(8); DQ = 0; Delay_DS18B20(80); DQ = 1; Delay_DS18B20(14);x = DQ; D

25、elay_DS18B20(20);unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; dat=1;DQ = 1; if(DQ)dat|=0x80;Delay_DS18B20(4);return(dat);void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat=1;unsigned

26、 int ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0x44); Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0xBE); a=ReadOneChar(); b=ReadOneChar(); t=b;t=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; return(t);/*END*/ 第5章 調(diào)試總結(jié)與心得體會5.1調(diào)試總結(jié)(1)檢查版各器件、引線的焊接是否正確;(2)確保芯片的電源穩(wěn)定和電壓符合要求;芯片如外接晶振,要確保時鐘輸入正確;復(fù)位信號要確保存在、存在時間長短,及系統(tǒng)多個復(fù)位信號的先后順序;要保證芯片的工作參數(shù)和外圍配置電路設(shè)置正確。(3)對輸出部分進行檢查,可編寫測試程序,檢查數(shù)碼管的顯示是否正常,有無閃爍和拖尾現(xiàn)象。若有,則可以調(diào)節(jié)延時程序,改變每個數(shù)碼管顯示時間,直至無異?,F(xiàn)象。(4)分別調(diào)節(jié)按鍵使溫度調(diào)高和調(diào)低,觀察數(shù)碼管顯示的數(shù)

溫馨提示

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

評論

0/150

提交評論