版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、課程設(shè)計基本情況介紹1.1課程設(shè)計的基本目的與任務(wù)本課程設(shè)計旨在駕馭本專業(yè)學(xué)生理論指導(dǎo)實踐能力以及電子產(chǎn)品工程設(shè)計與開發(fā)能力。本實踐課所要達(dá)到的主要目的是:1、通過本次課程設(shè)計,是對學(xué)生綜合能力的檢,提高學(xué)生綜合運用專業(yè)知識,強化單片機應(yīng)用系統(tǒng)設(shè)計與防震能力。2、本次課程設(shè)計是在生產(chǎn)實習(xí)所完成的單片機核心板+電子鐘模塊+MP3模塊+RFID模塊+無線傳輸模塊+GPS模塊+脈搏傳感模塊”的基礎(chǔ)上設(shè)計該硬件系統(tǒng)的工作程序。1.2課程設(shè)計的基本內(nèi)容1、在生產(chǎn)實習(xí)設(shè)計單片機硬件系統(tǒng)的基礎(chǔ)上,設(shè)計相應(yīng)的應(yīng)用軟件系統(tǒng)。2、在LCD1602上顯示學(xué)號程序設(shè)計。3、基于DS1302的實時時鐘軟件設(shè)計。4、
2、基于DS18B20的溫度測量軟件設(shè)計。5、基于TL1838A的紅外遙控解碼軟件設(shè)計。6、設(shè)計應(yīng)用軟件系統(tǒng)框圖和流程圖,完成所設(shè)計軟件的調(diào)試。1.3課程設(shè)計的教學(xué)要求1、通過資料查閱及學(xué)習(xí)了解單片機應(yīng)用系統(tǒng)的軟件設(shè)計方法及單片機編程、軟硬件聯(lián)機調(diào)試技巧。2、獨立設(shè)計并編寫下列應(yīng)用程序:(1)LCD1602學(xué)號顯示程序;(2)DS1302實時時鐘程序;(3)DS18B20溫度測量程序;(4)TL1838A紅外遙控解碼程序;3、獨立完成所設(shè)計程序與硬件系統(tǒng)的聯(lián)機仿真。二、整機系統(tǒng)框圖(硬件、軟件)該設(shè)計方案是以STC12C5A60S2單片機為核心,采用LCD液晶屏幕顯示模塊、實時時鐘模塊、溫度測量模
3、塊、紅外遙控解碼等模塊所構(gòu)建的系統(tǒng),能在LCD1602液晶屏上顯示當(dāng)前的日期(年、月、日)、時間(時、分、秒)數(shù)據(jù)、當(dāng)前環(huán)境溫度值和紅外遙控解碼值。用戶可通過遙控器或單片機核心板上的按鍵來進(jìn)行日期和時間的設(shè)置。本系統(tǒng)設(shè)計大部分功能由軟件來實現(xiàn),電路簡單明了,系統(tǒng)穩(wěn)定性也得到大大提高。1、總體硬件設(shè)計框架圖:總體硬件設(shè)計框架圖2、總體軟件設(shè)計框架圖/三、整機硬件電路原理圖(見99SE圖)1、核心板電路原理圖2、蜂鳴器驅(qū)動電路3、按鍵電路4、單片機復(fù)位電路5、LCD1602液晶顯示電路6、電子鐘模塊接口電路四、軟件系統(tǒng)設(shè)計思想/五、系統(tǒng)軟件資源分配表(調(diào)試程序、工作程序)/六、顯示學(xué)號的調(diào)試程序流
4、程圖、程序源代碼1、程序流程圖/2、程序源代碼/*LCD1602*/#include#includesbitRS=P3A7;sbitRW=P3A6;sbitE=P2A7;sbitBF=P0A7;#defineLCD_DataP0/*函數(shù)聲明*/voidLcd_Int(void);voidhuanying_show(void);voiddongtai_show(void);LIUJING;/LIUJING080104020013;/080104020013函數(shù)功能:主函數(shù)*/charstring1=charstring2=/*voidmain()/1602初始化(Lcd_Int();while(
5、1)(huanying_show();dongtai_show();一/*函數(shù)功能:延時1ms注:不同單片機不同晶振需要對此函數(shù)進(jìn)行修改*/voidLcd_delay1ms()(unsignedchari,j;for(i=0;i90;i+)for(j=0;j33;j+);/*函數(shù)功能:延時若干毫秒入口參數(shù):n*/voidLcd_delay(unsignedintn)(unsignedinti;for(i=0;in;i+)Lcd_delay1ms();/*函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:resultoresult=1,忙碌;result=0,不忙*/bitLcd_BusyTest(voi
6、d)(bitresult;RS=0;RW=1;E=1;_nop_();/_nop_();_nop_();_nop_();/根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)/E=1,才允許讀寫空操作空操作四個機器周期,給硬件反應(yīng)時間result=BF;/將忙碌標(biāo)志電平賦給resultE=0;returnresult;/*函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):dictate*/*voidLcd_WriteCom(unsignedchardictate)(while(Lcd_BusyTest()=1);忙就等待RS=0;根據(jù)規(guī)定,RS和RW同時為低電平時,可以寫入指令RW=0;E
7、=0;/E置低電平(寫指令時,就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0_nop_();_nop_();/空操作兩個機器周期,給硬件反應(yīng)時間LCD_Data=dictate;_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應(yīng)時間E=1;/E置高電平_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應(yīng)時間E=0;/當(dāng)E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令/*函數(shù)功能:指定字符顯示的實際地址入口參數(shù):x注:此函數(shù)已經(jīng)加上了0x80,故只需寫上實際地址就行*/*voidLcd_WriteAddress(u
8、nsignedcharx)(Lcd_WriteCom(x|0x80);/顯示位置的確定方法規(guī)定為80H+地址碼x/*函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊入口參數(shù):y(為字符常量)*/voidLcd_WriteData(unsignedchary)(while(Lcd_BusyTest()=1);RS=1;/RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)RW=0;E=0;/E置低電平(寫指令時,就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0LCD_Data=y;/將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給
9、硬件反應(yīng)時間E=1;/E置高電平_nop_();_nop_();_nop_();_nop_();/空操作四個機器周期,給硬件反應(yīng)時間E=0;/當(dāng)E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令/*函數(shù)功能:對lcd的顯示模式進(jìn)行初始化設(shè)置*/voidLcd_Int(void)(Lcd_delay(15);延時15ms,首次寫指令時應(yīng)給LCD一段較長的反應(yīng)時間Lcd_WriteCom(0x38);/顯示模式設(shè)置:16*2顯示,5*7點陣,8位數(shù)據(jù)接口Lcd_delay(5);/延時5msLcd_WriteCom(0x38);Lcd_delay(5);Lcd_delay(5);Lcd_WriteCo
10、m(0x0C);/Lcd_delay(5);Lcd_WriteCom(0x06);Lcd_WriteCom(0x38);/3次寫設(shè)置模式顯示模式設(shè)置:顯示開,有光標(biāo),光標(biāo)不閃爍/顯示模式設(shè)置:光標(biāo)右移,字符不移Lcd_delay(5);Lcd_WriteCom(0x01);清屏幕指令,將以前的顯示內(nèi)容清除Lcd_delay(5);/*函數(shù)功能:LCD的顯示*/voidhuanying_show(void)unsignedintLcd_i;Lcd_WriteCom(0x01);清顯示:清屏幕指令Lcd_delay(1);Lcd_WriteAddress(0x00);/設(shè)置顯示位置為第一行的第1個
11、字Lcd_delay(1);for(Lcd_i=0;Lcd_i16;Lcd_i+)/顯示字符LIUJINGLcd_WriteData(string1Lcd_i);Lcd_delay(150);Lcd_WriteAddress(0x40);/設(shè)置顯示位置為第二行的第1個字for(Lcd_i=0;Lcd_i16;Lcd_i+)/顯示字符080104020013Lcd_WriteData(string2Lcd_i);Lcd_delay(150);Lcd_delay(1000);/右側(cè)移位進(jìn)來voiddongtai_show(void)unsignedintLcd_i;Lcd_WriteCom(0x0
12、1);清顯示:清屏幕指令Lcd_delay(2);Lcd_WriteAddress(0x10);/設(shè)置顯示位置為最右側(cè)Lcd_delay(2);for(Lcd_i=0;Lcd_i16;Lcd_i+)/顯示字符LIUJINGLcd_WriteData(string1Lcd_i);Lcd_delay(2);Lcd_WriteAddress(0x50);/設(shè)置顯示位置為最右側(cè)for(Lcd_i=0;Lcd_i16;Lcd_i+)/顯示字符080104020013Lcd_WriteData(string2Lcd_i);Lcd_delay(2);for(Lcd_i=0;Lcd_i程序源代碼顯示動仁控Wc
13、DfiTC12C5A60S2時鐘電路DS1302、顯示取數(shù)據(jù)驅(qū)動LED數(shù)碼管顯示時間圖7.1.1電子時鐘設(shè)計框圖STC12C5A60S2單片機主要I/O口的分配,P1.4、P1.5、P1.6分別接DS1302的SCLK,MCUIO,RST端,P0口接LCD1602八位數(shù)據(jù)口,P2.7、P3.6、P3.7分別接LCD1602的E、RW、RS端,P2.0-P2.3分別接按鍵K1-K4.下圖7.1.2為電子時鐘程序設(shè)計流程圖。開始卜復(fù)位端產(chǎn)生個高電平4變重初始化4*寫入DS1如2地址”使DS1302沒有寫保護(hù)顯示驅(qū)動程序初I始化.延時一段時間夏位湍產(chǎn)生個高電平4地,址增加.寫DS13M地址。菸時一段
14、時瓦k晝寸;驅(qū)動程是讀向該地址寫教據(jù)*地址噌加-驅(qū)動LCD髭示4數(shù)據(jù)是否圖7.1.2電子時鐘程序設(shè)計流程圖2、溫度測量模塊溫度測量程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換子程序,計算溫度子程序,顯示數(shù)據(jù)子程序等。主程序的主要功能是負(fù)責(zé)溫度的實時顯示、讀出并處理DS18B20的測量的當(dāng)前溫度值,溫度測量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其系統(tǒng)程序流程見圖7.2.1所示O調(diào)用顯示NY溫算出值計讀度度專業(yè)學(xué)習(xí)資料圖7.2.1溫度測量主程序流程圖圖7.2.2讀溫度流程圖3、紅外遙控解碼模塊(1)遙控器發(fā)射端程序流程圖掃描鍵號轉(zhuǎn)至相應(yīng)的發(fā)射程序(2)遙控器接收端程序流程圖L氏氐申,
15、盼沖E十蜘5C屯MfNR永ffZ一7Y*蝦個歧一襯點公乖矛呈,!二|中質(zhì)返回|(二)程序源代碼時鐘顯示程序*/1、實時時鐘模塊/*DS1302#include#include#include#defineuintunsignedint#defineucharunsignedchar/變量定義sbitSCLK=P1A4;sbitDATA_IO=P1A5;sbitRESE=P1A6;sbitACC0=ACCA0;sbitACC7=ACCA7;uchartable116;uchartable216;ucharsecond,minute,hour,day,month,year;/*DS1302時鐘部分
16、子程序/向DS1302寫入一個字節(jié)的函數(shù)/DS1302/DS1302/DS1302時鐘控制總線數(shù)據(jù)傳送總線復(fù)位總線/移位時的第/移位時的第定義秒分時日月年變量*/voidSentByte(ucharbyte)(uchari;ACC=byte;for(i=8;i0;i-)/相當(dāng)于匯編中的RRC(DATA_IO=ACC0;/將自己的最低位傳到時鐘的數(shù)據(jù)總線上SCLK=1;/時鐘上升沿發(fā)送數(shù)據(jù)有效SCLK=0;/清時鐘總線ACC=ACC1;/將累加器中的數(shù)據(jù)右移1位/從DS1302讀取一個字節(jié)函數(shù)ucharReceiveByte(void)(uchari;for(i=8;i0;i-)/相當(dāng)于匯編中的
17、RRC(ACC=ACC1;/將累加器中的數(shù)據(jù)右移1位ACC7=DATA_IO;/將數(shù)據(jù)線上的1位數(shù)據(jù)存入累加器中SCLK=1;/時鐘上升沿發(fā)送數(shù)據(jù)有效SCLK=0;/清時鐘總線return(ACC);/函數(shù)最終返回讀取的1字節(jié)數(shù)據(jù)/向DS1302的某個地址里寫入數(shù)據(jù)函數(shù)voidWriteClock(ucharAddress,ucharData)/Address:要寫入數(shù)據(jù)的DS1302地址;Data:要寫的數(shù)據(jù)(RESET=0;/復(fù)位引腳為低電平所有數(shù)據(jù)傳送中止SCLK=0;/清時鐘總線RESET=1;/復(fù)位引腳為高電平邏輯控制有效delay(10);SentByte(Address);/寫入
18、地址命令SentByte(Data);/寫入1字節(jié)數(shù)據(jù)SCLK=1;/時鐘總線置高RESET=0;/邏輯操作完畢,清復(fù)位總線/讀取DS1302某地址的數(shù)據(jù)ucharReadClock(ucharAddress)/Address:要讀取數(shù)據(jù)的DS1302地址(ucharData;/定義數(shù)據(jù)變量RESET=0;/復(fù)位引腳為低電平所有數(shù)據(jù)傳送終止SCLK=0;/清時鐘總線RESET=1;/復(fù)位引腳為高電平邏輯控制有效delay(1);SentByte(Address|0X01);/寫入地址命令,讀取地址為寫入地址+1HData=ReceiveByte();/讀取1字節(jié)數(shù)據(jù)SCLK=1;/時鐘總線置高
19、RESET=0;/邏輯操作完畢,清復(fù)位總線return(Data);/返回讀取的數(shù)據(jù)/時鐘芯片初始化函數(shù)voidInit_Clock(void)(ucharSecond=ReadClock(0x81);/讀取秒數(shù)據(jù)if(Second&0x80)/判斷時鐘芯片是否關(guān)閉(WriteClock(0x8e,0x00);/寫入允許WriteClock(0x8c,0x11);/一下寫入初始化時間11年11月25日15:05:00WriteClock(0x88,0x11);WriteClock(0x86,0x25);WriteClock(0x84,0x15);WriteClock(0x82,0x05);Wr
20、iteClock(0x80,0x00);WriteClock(0x8e,0x80);/禁止寫入voidRead_Date(void)(ucharReadValue;/定義變量ReadValue=ReadClock(0x81);second=(ReadValue&0x70)4)*10+(ReadValue&0x0F);/碼轉(zhuǎn)換成十進(jìn)制數(shù)據(jù)ReadValue=ReadClock(0x83);if(ReadValue0x60)ReadValue=ReadClock(0x83);minute=(ReadValue&0x70)4)*10+(ReadValue&0x0F);/碼轉(zhuǎn)換成十進(jìn)制數(shù)據(jù)ReadVa
21、lue=ReadClock(0x85);if(ReadValue0x24)ReadValue=ReadClock(0x85);hour=(ReadValue&0x70)4)*10+(ReadValue&0x0F);/ReadValue=ReadClock(0x87);day=(ReadValue&0x70)4)*10+(ReadValue&0x0F);/ReadValue=ReadClock(0x89);month=(ReadValue&0x70)4)*10+(ReadValue&0x0F);/碼轉(zhuǎn)換成十進(jìn)制數(shù)據(jù)ReadValue=ReadClock(0x8d);year=(ReadValue
22、&0xf0)4)*10+(ReadValue&0x0F);碼轉(zhuǎn)換成十進(jìn)制數(shù)據(jù)將讀取的秒數(shù)據(jù)的BCD將讀取的分?jǐn)?shù)據(jù)的BCD將讀取的時數(shù)據(jù)的BCD碼將讀取的日數(shù)據(jù)的BCD碼將讀取的月數(shù)據(jù)的BCD/將讀取的年數(shù)據(jù)的BCDtable10=D;table11=a;table12=t;table13=a;table14=:;table15=2;table16=0;table17=0x30+year/10;table18=0x30+year%10;table19=-;table110=0x30+month/10;table111=0x30+month%10;table112=-;table113=0x30+
23、day/10;table114=0x30+day%10;table115=;table20=;table21=;table22=;table23=;table24=0x30+hour/10;table25=0x30+hour%10;table26=:;table27=0x30+minute/10;table28=0x30+minute%10;table29=:;table210=0x30+second/10;table211=0x30+second%10;table212=;table213=;table214=;table215=;/時鐘顯示函數(shù)voidshow_Data()(uinti;L
24、cd_WriteAddress(0x00);/設(shè)置顯示位置為第一行的第1個字for(i=0;i16;i+)/顯示字符(Lcd_WriteData(table1i);delay(10);Lcd_WriteAddress(0x40);/設(shè)置顯示位置為第二行的第1個字for(i=0;i16;i+)/顯示字符(Lcd_WriteData(table2i);delay(10);voidmain()(Lcd_Int();/1602初始化huanying_show();Lcd_WriteCom(0x01);Init_Clock();/將1302初始化while(1)(Read_Date();show_Dat
25、a();一2、溫度測量模塊/*DS18B29溫度顯示程序*/#include#include#include#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1A7;/DS18B20與單片機連接口unsignedchara,b;uinttvalue;/溫度值uchardisdata12;voiddelay_18B20(unsignedinti)/延時1微秒(while(i-);_nop_();_nop_();-voiddelay1ms(uintm)/延時m毫秒(while(m-)delay_18B20(1000);voidDS18B20
26、rst()/*ds18b20復(fù)位*/(DQ=1;/DQ復(fù)位delay_18B20(10);/延時DQ=0;/DQ拉低delay_18B20(600);DQ=1;/拉高_(dá)nop_();_nop_();while(DQ);_nop_();_nop_();while(DQ);_nop_();ucharDS18B20rd()/*讀數(shù)據(jù)*/(unsignedchari;unsignedchardat;DQ=1;for(i=8;i0;i-)(dat=1;DQ=0;/給脈沖信號_nop_();_nop_();_nop_();_nop_();DQ=1;/給脈沖信號delay_18B20(5);if(DQ)(d
27、at|=0x80;delay_18B20(50);return(dat);voidDS18B20wr(ucharwdata)/*寫數(shù)據(jù)*/(unsignedchard;inti;DQ=1;for(i=8;i0;i-)(d=wdata&0x01;wdata=1;if(d)(DQ=0;delay_18B20(2);DQ=1;delay_18B20(60);else(DQ=0;delay_18B20(60);DQ=1;_nop_();_nop_();read_temp()/*讀取溫度值并轉(zhuǎn)換*/(DS18B20rst();DS18B20wr(0xcc);/*DS18B20wr(0x44);/*del
28、ay1ms(30);DS18B20rst();DS18B20wr(0xcc);/*DS18B20wr(0xbe);/*a=DS18B20rd();b=DS18B20rd();tvalue=b;tvalue=tvalue8;tvalue=tvalue|a;if(tvalue&0x8000)tvalue=tvalue+1;tvalue=tvalue*(0.625);return(tvalue);voidDS18B20disp()/溫度值顯示(uinti;disdata0=T;disdata1=e;跳過讀序列號啟動溫度轉(zhuǎn)換跳過讀序列號讀取溫度*/*/*/*/disdata2=m;disdata3=p
29、;disdata4=t;disdata5=:;disdata6=(int)tvalue/1000+0x30;/百位數(shù)disdata7=(int)(tvalue%1000)/100+0x30;/十位數(shù)disdata8=(int)(tvalue%100)/10+0x30;/個位數(shù)disdata9=.;disdata10=(int)tvalue%10+0x30;/小數(shù)位disdata11=C;Lcd_WriteAddress(0x40);/設(shè)置顯示位置為第二行的第1個字for(i=0;i12;i+)/顯示字符Lcd_WriteData(disdatai);delay(100);voidinitLCD()Lcd
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度廠房裝修工程設(shè)計與施工監(jiān)理合同4篇
- 2025年度廠房租賃安全協(xié)議書(智能管理系統(tǒng)適用)4篇
- 2024版貨品物流服務(wù)協(xié)議
- 2025年度新型建材2024grc線條裝飾線條供應(yīng)協(xié)議3篇
- 工程建設(shè)國家標(biāo)準(zhǔn)《大體積混凝土溫度測控技術(shù)規(guī)范》條文說明
- 2025年度人工智能教育平臺開發(fā)與應(yīng)用合同9篇
- 專屬2024財務(wù)代表協(xié)議條款版B版
- 個人房產(chǎn)抵押借款協(xié)議標(biāo)準(zhǔn)格式版
- 2024虛擬現(xiàn)實產(chǎn)品開發(fā)與銷售合同
- 2024版單身公寓租賃合同附圖書閱覽室使用協(xié)議3篇
- 保潔服務(wù)崗位檢查考核評分標(biāo)準(zhǔn)
- 稱量與天平培訓(xùn)試題及答案
- 超全的超濾與納濾概述、基本理論和應(yīng)用
- 2020年醫(yī)師定期考核試題與答案(公衛(wèi)專業(yè))
- 2022年中國育齡女性生殖健康研究報告
- 各種靜脈置管固定方法
- 消防報審驗收程序及表格
- 教育金規(guī)劃ppt課件
- 呼吸機波形分析及臨床應(yīng)用
- 常用緊固件選用指南
- 私人借款協(xié)議書新編整理版示范文本
評論
0/150
提交評論