


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一、課程設計基本情況介紹1.1課程設計的基本目的與任務本課程設計旨在駕馭本專業學生理論指導實踐能力以及電子產品工程設計與開發能力。 本實踐課所要達到的主要目的是:1、通過本次課程設計,是對學生綜合能力的檢,提高學生綜合運用專業知識,強化單片機 應用系統設計與防震能力。2、 本次課程設計是在生產實習所完成的“單片機核心板+電子鐘模塊+MP3模塊+RFID模塊 +無線傳輸模塊+GPS模塊+脈搏傳感模塊”的基礎上設計該硬件系統的工作程序。1.2課程設計的基本內容1、在生產實習設計單片機硬件系統的基礎上,設計相應的應用軟件系統。2、在LCD1602上顯示學號程序設計。3、基于DS1302的實時時鐘軟件
2、設計。4、基于DS18B20的溫度測量軟件設計。5、基于TL1838A的紅外遙控解碼軟件設計。6、設計應用軟件系統框圖和流程圖,完成所設計軟件的調試。1.3課程設計的教學要求1、通過資料查閱及學習了解單片機應用系統的軟件設計方法及單片機編程、軟硬件聯機調 試技巧。2、獨立設計并編寫下列應用程序:(1)LCD1602學號顯示程序;(2)DS1302實時時鐘程序;(3)DS18B20溫度測量程序;(4)TL1838A紅外遙控解碼程序;3、獨立完成所設計程序與硬件系統的聯機仿真。二、整機系統框圖(硬件、軟件)該設計方案是以STC12C5A60S2單片機為核心,采用LCD液晶屏幕顯示模塊、實時時 鐘模
3、塊、溫度測量模塊、紅外遙控解碼等模塊所構建的系統,能在LCD1602液晶屏上顯示當前的日期(年、月、日)、時間(時、分、秒)數據、當前環境溫度值和紅外遙控解碼值。 用戶可通過遙控器或單片機核心板上的按鍵來進行日期和時間的設置。本系統設計大部分功能由軟件來實現,電路簡單明了,系統穩定性也得到大大提高。1、總體硬件設計框架圖:總粹哽件說計眶架田2、總體軟件設計框架圖/三、整機硬件電路原理圖(見 99SE圖)1、核心板電路原理圖2、蜂鳴器驅動電路3、按鍵電路4、單片機復位電路5、LCD1602液晶顯示電路6、電子鐘模塊接口電路四、軟件系統設計思想/五、系統軟件資源分配表(調試程序、工作程序)/六、顯
4、示學號的調試程序流程圖、程序源代碼1程序流程圖 /2、程序源代碼 #in clude<reg51.h> #in clude< intrin s.h> sbit RS=P3A7;* *LCD1602 *sbit RW=P3A6;sbit E=P2A7;sbit BF=P0A7;#defi ne LCD_Data P0/*函數聲明 */void Lcd_I nt(void);void hua nyin g_show(void);void don gtai_show(void);char stri ng1=" char stri ng2=" /*LIU J
5、ING"/LIU JING080104020013”;/080104020013函數功能主函*/void mai n() Lcdn t();/1602初始化while(1)hua nyin g_show();don gtai_show();-/*函數功能:延時1ms注:不同單片機不同晶振需要對此函數進行修改*/void Lcd_delay1ms()un sig ned char i,j;for(i=0;i<90;i+)for(j=0;j<33;j+);/*函數功能:延時若干毫秒入口參數:n*/void Lcd_delay (un sig ned int n)un sig
6、ned int i;for(i=0;i< n;i+)Lcd_delay1ms();/*函數功能:判斷液晶模塊的忙碌狀態返回值:resulto result=1,忙碌;result=0,不忙*/bit Lcd_BusyTest(void)bit result;RS=0;/根據規定,RS為低電平,RW為高電平時,可以讀狀態RW=1;E=1;/E=1,才允許讀寫_n op_(); / 空操作_n op_();_n op_();_n op_(); /空操作四個機器周期,給硬件反應時間result=BF; /將忙碌標志電平賦給resultE=0;retur n result;*函數功能:將模式設置
7、指令或顯示地址寫入液晶模塊入口參數:dictate*/void Lcd_WriteCom (un sig ned char dictate)while(Lcd_BusyTest()=1);忙就等待RS=0;根據規定,RS和RW同時為低電平時,可以寫入指令RW=0;E=0;E置低電平(寫指令時,就是讓 E從0到1發生正跳變,所以應先置"0"_n op_();_no p_(); II空操作兩個機器周期,給硬件反應時間LCD_Data=dictate;_n op_();_n op_();_n op_();_n op_(); II空操作四個機器周期,給硬件反應時間E=1;IIE置高
8、電平_n op_();_n op_();_n op_();_n op_(); II空操作四個機器周期,給硬件反應時間E=0; II當E由高電平跳變成低電平時,液晶模塊開始執行命令I*函數功能:指定字符顯示的實際地址入口參數:x注:此函數已經加上了0x80,故只需寫上實際地址就行*Ivoid Lcd_WriteAddress( un sig ned char x)Lcd_WriteCom(x|0x80); II顯示位置的確定方法規定為"80H+地址碼x"I*函數功能:將數據(字符的標準 ASCII碼)寫入液晶模塊入口參數:y (為字符常量)*Ivoid Lcd_WriteDa
9、ta( un sig ned char y)while(Lcd_BusyTest()=1);RS=1;/IRS為高電平,RW為低電平時,可以寫入數據RW=0;E=0;IIE置低電平(寫指令時,就是讓 E從0到1發生正跳變,所以應先置"0"LCD_Data=y; II將數據送入P0 口,即將數據寫入液晶模塊_n op_();_n op_();_n op_();_n op_(); II空操作四個機器周期,給硬件反應時間E=1;IIE置高電平_n op_();_n op_();_n op_();_n op_(); II空操作四個機器周期,給硬件反應時間E=0; II當E由高電平跳
10、變成低電平時,液晶模塊開始執行命令I*函數功能:對 LCD的顯示模式進行初始化設置*ivoid Lcd_I nt(void)Lcd_delay(15); II延時15ms,首次寫指令時應給 LCD 一段較長的反應時間 Lcd_WriteCom(0x38);II顯示模式設置:16*2顯示,5*7點陣,8位數據接口 Lcd_delay(5);II延時 5msLcd_WriteCom(0x38);Lcd_delay(5);Lcd_WriteCom(0x38); 3 次寫設置模式Lcd_delay(5);Lcd_WriteCom(OxOC); /顯示模式設置:顯示開,有光標,光標不閃爍Lcd_dela
11、y(5);Lcd_WriteCom(0x06);/顯示模式設置:光標右移,字符不移Lcd_delay(5);Lcd_WriteCom(0x01);清屏幕指令,將以前的顯示內容清除Lcd_delay(5); *函數功能:LCD 的顯示 *void hua nyin g_show(void)un sig ned int Lcd_i;Lcd_WriteCom(0x01);/清顯示:清屏幕指令Lcd_delay(1);Lcd_WriteAddress(OxOO);/設置顯示位置為第一行的第1個字Lcd_delay(1);for(Lcd=0;Lcd16;Lcd+) / 顯示字符 LIU JING Lcd
12、_WriteData(stri ng1Lcd_i);Lcd_delay(150); Lcd_WriteAddress(0x40);/設置顯示位置為第二行的第1個字for(Lcd=0;Lcd16;Lcd+) / 顯示字符 080104020013 Lcd_WriteData(stri ng2Lcd_i);Lcd_delay(150); Lcd_delay(1000);右側移位進來void don gtai_show(void)un sig ned int Lcd_i;Lcd_WriteCom(0x01);/清顯示:清屏幕指令Lcd_delay (2);Lcd_WriteAddress(0x10)
13、;設置顯示位置為最右側Lcd_delay (2);for(Lcd=0;Lcd16;Lcd+)/顯示字符 LIU JING Lcd_WriteData(stri ng1Lcd_i);Lcd_dela y( 2);Lcd_WriteAddress(0x50);設置顯示位置為最右側for(Lcd=0;Lcd16;Lcd+)/ 顯示字符 080104020013 Lcd_WriteData(stri ng2Lcd_i);Lcd_dela y( 2);for(Lcdl_i=0;Lcdl_i 16;Lcdl_i+) / 開始左移 Lcd_WriteCom(0x18); / 左移指令Lcd_delay(40
14、0); Lcd_delay(1000);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(400);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(400);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(400);Lcd_WriteCom(0x08);Lcd_delay(400);Lcd_WriteCom(0x0c);Lcd_delay(1);時鐘電路(DS1J0
15、2)主控電路STC12C5ASaS2程序旳流程圖、程序源代碼Lcd_deiaya 跆外遙控、實時時鐘、溫一)流程圖顯示驅動時*中也踣 (US13O2)豐控電喘1、實時時鐘模塊圖為電子時鐘設計框圖,系統由主控制爭 jSTC12C5A60S2、時鐘電路 DS1302、顯示 電路LCD1602及鍵掃描電路組成。DS1302從單片機中讀取個方面的內容:一間的調整,壽三是皿從721從單片機中讀取數電子萬年歷的程序主要包括0 3 數據進行計數,二是利用按鍵進行時 據驅動LED數碼管顯示時間。圖電子時鐘設計框圖STC12C5A60S2 單片機主要 I/O 口的分配, P1.4、P1.5、P1.6 分別接 D
16、S1302 的 SCLK , MCUIO,RST 端,P0 口接 LCD1602 八位數據口,P2.7、P3.6、P3.7分別接 LCD1602 的 E、 RW、RS端,P2.0-P2.3分別接按鍵K1-K4.下圖為電子時鐘程序設計流程圖。圖電子時鐘程序設計流程圖2、溫度測量模塊溫度測量程序主要包括主程序,讀出溫度子程序,溫度轉換子程序,計算溫度子程序,顯示數據子程序等。主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內測量一次被測溫度,其系統程序流程見圖所示。圖7.2.1溫度測量主程序流程圖3、紅外遙控解碼模塊(1)遙
17、控器發射端程序流程圖:匸戶序斤升女臺I±_-十氐電月打-口 MtS£ I W幷xr彳氐半I鬥工月氷沖違十蟻* IJfcfc -兀屁功臺旨巫呈序(二)程序源代碼時寸鐘顯示程序 */1、實時時鐘模塊/*DS13O2#in clude<reg51.h>#in clude< intrin s.h>#i nclude<LCD1602.h>#defi ne uint un sig ned int#defi ne uchar un sig ned char/DS1302時鐘控制總線/DS1302數據傳送總線/DS1302復位總線移位時的第0位移位時的第
18、7位/變量定義sbit SCLK=P1A4;sbit DATA_IO=P1A5;sbit RESET=P"6;sbit ACCO=ACCAO;sbit ACC7=ACCA7;uchar table116;uchar table216;uchar sec ond,minu te,hour,day, mon th,year; 定義秒分時日月年變量/*DS13O2寸寸鐘部分子程序 */向DS1302寫入一個字節的函數void Sen tByte(uchar byte)uchar i;ACC=byte;for(i=8;i>0;i-)/相當于匯編中的 RRC DATA_IO=ACCO;將
19、自己的最低位傳到時鐘的數據總線上SCLK=1;時鐘上升沿發送數據有效SCLK=0;清時鐘總線ACC=ACC>>1;/將累加器中的數據右移1位/從DS1302讀取一個字節函數uchar ReceiveByte(void) uchar i;for(i=8;i>0;i-) /相當于匯編中的 RRC ACC=ACC>>1;/將累加器中的數據右移1位ACC7=DATA_IO;/將數據線上的1位數據存入累加器中SCLK=1;/時鐘上升沿發送數據有效SCLK=0;/清時鐘總線return(ACC);/函數最終返回讀取的1字節數據/向DS1302的某個地址里寫入數據函數void
20、WriteClock(uchar Address,uchar Data)/Address:要寫入數據的 DS1302 地址;Data:要寫的數據RESET=0;復位引腳為低電平所有數據傳送中止SCLK=0;/清時鐘總線RESET=1;/復位引腳為高電平邏輯控制有效delay(10);Sen tByte(Address);/ 寫入地址命令Se ntByte(Data);/寫入1字節數據SCLK=1;/時鐘總線置高RESET=0;/邏輯操作完畢,清復位總線/讀取DS1302某地址的數據uchar ReadClock(uchar Address)/Address:要讀取數據的 DS1302 地址uc
21、har Data;/定義數據變量RESET=0;/復位引腳為低電平所有數據傳送終止SCLK=0;/清時鐘總線RESET=1;/復位引腳為高電平邏輯控制有效delay(1);SentByte(Address|0X01);寫入地址命令,讀取地址為寫入地址+1HData=ReceiveByte();/ 讀取 1 字節數據SCLK=1;/時鐘總線置高RESET=0;/邏輯操作完畢,清復位總線return(Data);/返回讀取的數據/時鐘芯片初始化函數void In it_Clock(void)uchar Second=ReadClock(0x81); 讀取秒數據if(Second&0x80)
22、/判斷時鐘芯片是否關閉 WriteClock(0x8e,0x00); 寫入允許WriteClock(0x8c,0x11); 一下寫入初始化時間11 年 11 月 25 日 15: 05: 00WriteClock(0x88,0x11);WriteClock(0x86,0x25);WriteClock(0x84,0x15);WriteClock(0x82,0x05);WriteClock(0x80,0x00);WriteClock(0x8e,0x80); 禁止寫入void Read_Date(void) uchar ReadValue;/ 定義變量ReadValue=ReadClock(0x81
23、);second=(ReadValue&0x70)>>4)*10 + (ReadV alue&0x0F); 將讀取的秒數據的 BCD 碼轉 換成十進制數據ReadValue=ReadClock(0x83);if (ReadV alue>0x60)ReadValue=ReadClock(0x83);minute=(ReadValue&0x70)>>4)*10+ (ReadValue&0x0F); 將讀取的分數據的BCD 碼轉換成十進制數據ReadValue=ReadClock(0x85);if (ReadV alue>0x24)
24、ReadValue=ReadClock(0x85);hour=(ReadValue&0x70)>>4)*10+ (ReadValue&0x0F); /將讀取的時數據的BCD 碼轉換成十進制數據ReadValue=ReadClock(0x87);day=(ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); / 將讀取的日數據的BCD 碼轉換成十進制數據ReadValue=ReadClock(0x89);month=(ReadValue&0x70)>>4)*10 + (ReadV alue
25、&0x0F); / 將讀取的月數據的 BCD 碼轉 換成十進制數據ReadValue=ReadClock(0x8d);year=(ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F);/將讀取的年數據的BCD 碼轉換成十進制數據table1O='D'table11='a'table12='t'table13='a'table14=':'table15='2'table16='O'table17=0x30+year/10
26、;table18=0x30+year%10;table19='-'table110=0x30+mo nth/10;table111=0x30+mo nth%10;table112='-'table113=0x30+day/10;table114=0x30+day%10;table115=''table20=''table21=''table22=''table23=''table24=0x30+hour/10;table25=0x30+hour%10;table2 6=':&
27、#39;table27=0x30+mi nute/10;table28=0x30+mi nu te%10;table29=':'table210=0x30+seco nd/10;table211=0x30+seco nd%10;table212=''table213=''table214=''table215=''/時鐘顯示函數void show_Data()ui nt i;1個字1個字Lcd_WriteAddress(OxOO);/設置顯示位置為第一行的第for(i=0;i<16;i+)/ 顯示字符 Lcd
28、_WriteData(table1i);delay(10); Lcd_WriteAddress(0x40);/設置顯示位置為第二行的第for(i=0;i<16;i+)/ 顯示字符 Lcd_WriteData(table2i);delay(10); void mai n() Lcd_I nt();/1602 初始化hua nyin g_show(); Lcd_WriteCom(0x01);Init_Clock();/將 1302 初始化while(1) Read_Date(); show_Data(); -2、溫度測量模塊/*DS18B29溫度顯示程序*/#in clude<reg5
29、1.h> #in clude< intrin s.h> #i nclude<LCD1602.H> #defi ne uchar un sig ned char#defi ne uint un sig ned intsbit DQ=P1A7;/DS18B20 與單片機連接口un sig ned char a,b;uint tvalue;/ 溫度值uchar disdata12;void delay_18B20(unsigned int i)/ 延時 1 微秒 while(i-);_nop_();_nop_(); 亠void delay1ms(uint m)/ 延時
30、m 毫秒 while(m-)delay_18B20(1000);void DS18B20rst()/*ds18b20 復位 */ DQ = 1;/DQ 復位delay_18B20(10);/ 延時DQ = 0;/DQ 拉低delay_18B20(600);DQ = 1;/ 拉高_n op_();_n op_();while(DQ);_n op_();_n op_();while(DQ);_n op_();uchar DS18B20rd()/* 讀數據 */ un sig ned char i;un sig ned char dat;DQ = 1;for (i=8;i>0;i-)dat&g
31、t;>=1;DQ = 0; /給脈沖信號_n op_();_n op_();_n op_();_n op_();DQ = 1; /給脈沖信號delay_18B2 0(5);if(DQ) dat|=0x80; delay_18B20(50); return(dat);void DS18B20wr(uchar wdata)/* 寫數據 */ un sig ned char d;int i;DQ = 1;for (i=8; i>0; i-) d=wdata&0 x01; wdata>>=1;if(d)DQ = 0; delay_18B20(2); DQ=1;delay
32、_18B20(60); else DQ=0;delay_18B20(60);DQ=1;_n op_();_nop_(); read_temp()/*讀取溫度值并轉換*/*/*/*/DS18B20rst();DS18B20wr(0xcc);*跳過讀序列號DS18B20wr(0x44);*啟動溫度轉換 delay1ms(30);DS18B20rst();DS18B20wr(0xcc);*跳過讀序列號DS18B20wr(0xbe);* 讀取溫度 */ a=DS18B20rd();b=DS18B20rd();tvalue=b;tvalue=tvalue<<8; tvalue=tvalue|
33、a; if(tvalue&0x8000) tvalue=tvalue+1;tvalue=tvalue*(0.625); return(tvalue);void DS18B20disp() 溫度值顯示 uint i;disdataO=T; disdata1='e'disdata2='m:disdata3='p:disdata4='t:disdata5=':'disdata6=(int)tvalue/1000+0x30; 百位數disdata7=(int)(tvalue%1000)/100+0x30; 十位數disdata8=(int)(tvalue%100)/10+0x30; 個位數 disdata9='.'disdata10=(int)tvalue%10+0x30; 小數位 disdata11=C;Lcd_WriteAddress(0x40);/設置顯示位置為第二行的第1個字for(i=0;i<12;i+)/ 顯示字符 Lcd_WriteData(disdatai);deiay(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幫扶支教活動方案
- 小班元旦閱讀節活動方案
- 小學虎年迎新年活動方案
- 小組獎勵活動方案
- 工廠勞動活動方案
- 山村兒童夏令營活動方案
- 工會唱歌比賽活動方案
- 市場模擬團建活動方案
- 小零食新年活動方案
- 工會職工春晚活動方案
- 比亞迪宋PLUS EV說明書
- 2023-2024學年江蘇省張家港市小學語文五年級期末自測模擬考試題詳細參考答案解析
- 2023名校人教版數學青島市第三十九中學分班考試模擬試卷
- 中國糖尿病患者的白內障圍手術期防治策略專家共識(2020年)
- 安全施工作業票(樣板)
- 蘇教版必修1《離子反應》優秀課件
- 復合樹脂粘接修復術的基本操作步驟
- 第九單元第1課時《數與代數》示范公開課教案【人教小學數學五年級下冊】
- 教學設計 同分母分數加減法教案“百校聯賽”一等獎
- GB/T 29256.3-2012紡織品機織物結構分析方法第3部分:織物中紗線織縮的測定
- GB/T 12241-2021安全閥一般要求
評論
0/150
提交評論