單片機與接口技術課程設計(LCD顯示的電子鐘、多功能多拓展)_第1頁
單片機與接口技術課程設計(LCD顯示的電子鐘、多功能多拓展)_第2頁
單片機與接口技術課程設計(LCD顯示的電子鐘、多功能多拓展)_第3頁
單片機與接口技術課程設計(LCD顯示的電子鐘、多功能多拓展)_第4頁
單片機與接口技術課程設計(LCD顯示的電子鐘、多功能多拓展)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機與接口技術課程設計報告課題名稱LCD顯示的電子鐘學院專業班級姓名學號時間摘 要單片機就是微控制器,是面向應用對象設計、突出控制功能的芯片。單片機接上晶振、復位電路和相應的接口電路,裝載軟件后就可以構成單片機應用系統。將它嵌入到形形色色的應用系統中,就構成了眾多產品、設備的智能化核心。本課程設計就是應用單片機強大的控制功能制作LCD智能電子鐘,該電子鐘包括三大功能:實時顯示年、月、日、時、分、秒;實時監測環境溫度(可根據需要啟動高溫報警功能);電子鬧鐘。本設計采用的是AT89C52單片機,該單片機采用的MCU51內核,因此具有很好的兼容性,內部帶有8KB的ROM,能夠存儲大量的程序。計時芯

2、片采用DALLAS公司的涓細充電時鐘芯片DS1302,該芯片通過簡單的串行通信與單片機進行通信,時鐘/日歷電路能夠實時提供年、月、日、時、分、秒信息,采用雙電源供電,當外部電源掉電時能夠利用后備電池準確計時。溫度檢測采用DALLAS公司的數字化溫度傳感器DS18B20,該芯片采用的是獨特的“一線總線”的方式與單片機進行通信,一線總線獨特而且經濟的特點,是用戶可以輕松的組建傳感器網絡,為測量系統的構建引入全新的概念。實時溫度采用一線總線的方式傳輸大大提高了信號的抗干擾性,分辨率可通過軟件設置,其小巧的體積為各種環境下測量溫度提供了方便。顯示器件采用通用型1602液晶,可顯示32個字符,如果使用數

3、碼管來做顯示器件需消耗大量的系統資源,因此采用低功耗的1602液晶,該液晶顯示方便,功能強大,完全能滿足數字萬年歷的顯示要求。通過此次課程設計能夠更加牢固的掌握單片機的應用技術,增強動手能力、硬件設計能力以及軟件設計能力。目 錄一、設計任務及要求41.設計任務42.設計要求43.設計元件4二、設計的基本方案及步驟41.設計方案42.設計步驟6三、系統硬件電路設計61、LCD液晶顯示模塊設計62、實時時間計算模塊設計63、實時環境溫度檢測模塊設計74、報警(鬧鈴)模塊設計85、設置模塊設計8四、系統軟件設計8五、系統硬件仿真運行情況圖11結束語:16參考文獻:16附錄一:電路原理圖17附錄二:源

4、程序代碼17一、設計任務及要求1.設計任務基于AT89C51單片機,制作一個LCD顯示的智能電子鐘。2.設計要求1)使用文字型LCD顯示當前日期和時間;2)顯示格式為:“年-月-日,時時:分分:秒秒”;3)用4個功能鍵操作來設置當前時間,功能鍵K1-K4功能如下;K1選擇設置年/月/日,時/分/秒;K2加1;K3減1;K4確認完成設置;4)程序執行后LCD顯示日歷和時間;5)增加萬年歷顯示“年月日”;6)增加鬧鈴功能,時間到則產生音樂聲;7)增加溫度傳感器顯示當前的溫度。3.設計元件:AT89C52單片機;LCD采用LM016L16*2字符型LCD液晶顯示器;采用定時器DS1302;溫度傳感器

5、DS18B20;四個開關; 一個1k排阻。二、設計的基本方案及步驟1.設計方案此系統以AT89C52單片機為控制核心,通過與DS1302和DS18B20通信獲取實時時間和實時環境溫度,并將得到的數據通過1602液晶顯示出來,同時通過相應的按鍵調整相應的值。因此本設計可分為以下模塊:顯示模塊、實時時間計算模塊、實時環境溫度采集模塊、報警模塊、設置模塊(時間設置模塊、最高溫度設置模塊、鬧鈴設置模塊)。圖1 總體設計框圖下面對各個模塊逐一進行分析:1)液晶顯示模塊1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等點陣型液晶模塊。它有若干個5x7或5x11點陣字符位組成,每個點

6、陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用。1602的驅動電路帶有11條指令,可以很方便的控制液晶的實現效果,如:清屏、左移、右移、光標顯示。而且1602顯示的字符在下一條指令為到來之前不會改變,也就能夠維持顯示的字符,1602液晶占用的系統資源也少。故采用1602液晶組成此設計的顯示模塊。2)實時時間計算模塊DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節靜態RAM,采用SPI三線接口與CPU進行通信,并可采用突發方式一次傳送多個字節的時鐘信號和RAM數據。實時時鐘可提供秒、分、時、日、月和年,一

7、個月小于31天時可以自動調整,且具有閏年補償功能。工作電壓寬達2.55.5V。采用雙電源供電(主電源和備用電源),可設置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。利用單片機強大的控制功能就可實現實時計時的功能,而且消耗的系統資源少,程序簡單。3)實時環境溫度采集模塊DS18B20是美國DALLAS公司生產的數字溫度傳感器,采用單總線的接口方式與微處理器連接時僅需要一條口線即可實現微處理器與DS18B20 的雙向通訊。單總線具有經濟性好,抗干擾能力強,適合于惡劣環境的現場溫度測量,使用方便等優點,使用戶可輕松地組建傳感器網絡,為測量系統的構建引入全新概念。測量溫度范圍寬,測量精度

8、高,在使用中不需要任何外圍元件,支持多點組網功能。多個 DS18B20 可以并聯在惟一的單線上,實現多點測溫,供電方式靈活。DS18B20 可以通過內部寄生電路從數據線上獲取電源。因此,當數據線上的時序滿足一定的要求時,可以不接外部電源,從而使系統結構趨于更簡單,可靠性更高。因此非常適合本系統使用。4)報警(鬧鈴)模塊此模塊采用無源蜂鳴器實現,只要編寫相應的程序即可實現發出不同頻率的聲音。5)設置模塊因設置模塊只需編寫相應的程序外加相應的按鍵即可實現,實現方法較簡單,在此不再介紹。2.設計步驟1)首先根據設計要求,分析電子鐘的工作原理,然后查閱相關元件資料及文獻。如LCD液晶顯示器,DS18b

9、20溫度傳感器,DS1302時鐘芯片;2)針對實現的功能,利用proteus軟件來畫硬件圖;3)結合硬件圖,寫出相關硬件的的程序框圖,然后進行編寫程序。4)用keil軟件進行程序編譯,調試,然后再送給proteus仿真,實現各模塊硬件的仿真運行;5)最后將各個模塊的程序組合,調試,編譯,實現整體仿真。三、系統硬件電路設計系統硬件Proteus仿真原理圖(圖2):XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/

10、T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52234567891RP1RESPACK-8D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1LM016L30.0DQ2VCC3G

11、ND1U2DS18B20LS1SOUNDERRST5SCLK7I/O6X12X23VCC18VCC21U3DS1302X1CRYSTALVCCVCCk1k2k3k4選擇加1減1確定(溫度)(鬧鈴)(復位)offonVCCLCD1602液晶VCC圖2 系統硬件Proteus仿真原理圖1、LCD液晶顯示模塊設計LCD1602液晶與單片機的接口電路(圖3):圖3 LCD1602液晶與單片機的接口電路圖1)1602液晶功耗較小,可直接與單片機接口相接,電源直接與電源電路相接,使用單片機的P0口和P2口與1602進行通信。由于P0口為漏極,所以加個排阻,D0D7連接P0口,LCD的使能信號端接P2.7,

12、數據/命令端(H/L)接P2.6,讀/寫選擇端(H/L)接P2.5。2)1602相應功能特性介紹:(1)+5V電壓,對比度可調;(2)內含復位電路;(3)提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能;(4)有80字節顯示數據存儲器DDRAM;(5)內建有160個5x7點陣的字型字符發生器CGROM;(6)8個可由用戶自定義的5x7的字符發生器CGRAM;2、實時時間計算模塊設計DS1302與單片機的接口電路(圖4):圖4 DS1302與單片機的接口電路各引腳的功能為:1Vcc2:5V電源(當Vcc2Vcc1+0.2V時,由Vcc2向DS1302供電,當Vcc2 Vcc1時

13、,由Vcc1向DS1302供電。);2、3X1、X2 是外接晶振腳(32.768KHZ的晶振);4地(GND);6I/O:數據輸入輸出口;5CE/RST:復位腳;7SCLK:串行時鐘輸入;8Vcc1:備用電池端。3、實時環境溫度檢測模塊設計DS18B20與單片機的接口電路(圖5):圖5 DS18B20與單片機的接口電路數據DQ端接在P3.3口。DS18B20通過單總線實現與單片機的通信,每個DS18B20都有一個唯一的序列號,可以方便的實現組網檢測,以9 位數字量的形式反映器件的溫度值。DS18B20 通過一個單線接口發送或接收信息,因此在中央微處理器和DS18B20 之間僅需一條連接線(加上

14、地線)。用于讀寫和溫度轉換的電源可以從數據線本身獲得,無需外部電源。所以多只DS1820 可以同時連在一根單線總線上,這樣就可以把溫度傳感器放在許多不同的地方。這一特性在HVAC 環境控制、探測建筑物、儀器或機器的溫度以及過程監測和控制等方面非常有用。4、報警(鬧鈴)模塊設計蜂鳴器與單片機的接口電路(圖6):圖6蜂鳴器與單片機的接口電路圖報警(鬧鈴)模塊采用單片機輸出一定頻率的方波從而使蜂鳴器發出聲音。5、設置模塊設計各按鍵與單片機的接口電路(圖7):圖7各按鍵與單片機的接口電路設置模塊采用四個按鍵k1、k2、k3、k4與P14、P15、P16、P17相接組成獨立按鍵。四、系統軟件設計軟件設計

15、是本設計的關鍵,軟件程序編寫的好壞直接影響著系統運行情況的良好。因為此系統的程序涉及的模塊較多,所以程序編寫也采用模塊化設計。C語言具有編寫靈活、移植方便、便于模塊化設計的特點,所以此系統的軟件采用C51語言編寫。1.程序總流程圖(圖8):圖8 程序總流程圖2.子程序流程圖:1)LCD液晶顯示(圖9):圖9 LCD液晶顯示流程圖2)報警(鬧鈴)(圖10):圖10 報警(鬧鈴)流程圖3)實時環境溫度檢測(圖11):圖11 實時環境溫度檢測流程圖4)設置(圖12):圖12 設置流程圖五、系統硬件仿真運行情況圖 圖13 開始運行LCD顯示情況1.顯示實時時間(圖14):圖14 實時時間顯示圖2.顯示

16、當前溫度(圖15):圖15 當前溫度顯示圖3.時間設置(圖16):圖16 時間設置圖4.鬧鈴設置:1)OFF狀態:圖17 鬧鈴OFF狀態圖2)ON狀態:圖18 鬧鈴ON狀態圖3)鬧鈴時間到,鬧鈴響:圖19 鬧鈴時間到,響鈴圖5.最高報警溫度設置:1)OFF狀態:圖20 超溫報警OFF狀態圖 2)ON狀態:圖21 超溫報警ON狀態圖3)檢測溫度:圖22 測溫圖4)超溫報警,蜂鳴器響:圖23 超溫報警圖結束語:在這短短兩周轉瞬即逝的課程設計實訓期間,很大程度上提高了我們自主學習和思考的能力,從中我們受益匪淺,同時,鞏固了我們這學期以來所學的單片機原理與接口技術這門課程,讓我們找到了求知的樂趣,明白

17、了帶我們的的老師們的良苦用心和殷切希望。本次課程設計中所涉及的大部分知識,在課本上是沒有的,而是在已有知識的基礎上,通過到圖書館查閱相關資料和網上資源,經過反復思考,經融合而得出的。本次課程設計實訓切實體現了將課本所學知識運用到實際生活中的價值所在!參考文獻:【1】吳亦鋒、陳德為,單片機原理與接口技術M, 北京:電子工業出版社,2010.【2】王小建、胡長勝,單片機設計與應用M,北京:清華大學出版社,2010.8.【3】凌志浩、張建正,AT89C52單片機原理與接口技術M,北京:高等教育出版社,2011.3.【4】朱清慧,Proteus顯示控制系統設計與實例M,北京:清華大學出版社,2011.

18、5.附錄一:電路原理圖附圖1附錄二:源程序代碼#include#includeunsigned char code displaywelcome= Welcome To My Lcd Timer;/歡迎界面unsigned char code displaywish= Happy Every Day _; /歡迎界面unsigned char code overtemperature=OVERTEMPERATURE!;unsigned char code digit=0123456789; /數字代碼unsigned char mode,TH,TL,TN,TD,length,tempswitc

19、h,Maxtemp=40,amode,alarmmode,minutes,hours,minutea,seconds,houra=12;sbit SCLK=P10;/DS1302時鐘輸入sbit DATE=P11;/DS1302數據輸入sbit REST=P12;/DS1302復位端口sbit SET=P14;/DS1302設置模式選擇位sbit ADD=P15;/增加sbit RED=P16;/減小sbit CANL=P17; /確定void delay1ms(int i)/1毫秒延時 int j,k; while(i-) for(j=76;j1;j-); for(k=29;k1;k-);

20、void delaynus(unsigned char n) /延時若干微秒 unsigned char i; for(i=0;i0;i-) _nop_(); void baojing(unsigned char n) unsigned char x,i; while(n-) for(i=0;i5;i+) for(x=0;x200;x+) beep=beep; dely500(); for(i=0;i3;i+) for(x=0;x200;x+) beep=beep; dely500(); dely500(); /*DS1302模塊*/ void Write1302(unsigned char

21、date)/向1302寫數據 unsigned char i;SCLK=0;delaynus(2);for(i=0;i=1; void WriteSet1302(unsigned char cmd,unsigned char date) /根據相應的命令輸入相應的數據 REST=0;SCLK=0;REST=1;Write1302(cmd);delaynus(5);Write1302(date);SCLK=1;REST=0; unsigned char Read1302(void)/讀取1302數據 unsigned char i,date;delaynus(2);for(i=0;i=1;if(

22、DATE=1)date|=0x80;SCLK=1;delaynus(2);SCLK=0;delaynus(2);return date; unsigned char ReadSet1302(unsigned char cmd)/根據命令讀取1302相應的值unsigned char date;REST=0;SCLK=0;REST=1;Write1302(cmd);delaynus(2);date=Read1302();SCLK=1;REST=0;return date;void IntDS1302(void) /DS1302初始化 unsigned char flag; flag= ReadS

23、et1302(0x81);if(flag&0x80) /判斷時鐘芯片是否關閉 WriteSet1302(0x8E,0x00); /根據寫狀態寄存器命令字,寫入不保護指令 WriteSet1302(0x80,(0/10)4|(0%10); /根據寫秒寄存器命令字,寫入秒的初始值WriteSet1302(0x82,(0/10)4|(0%10); /根據寫分寄存器命令字,寫入分的初始值WriteSet1302(0x84,(0/10)4|(0%10); /根據寫小時寄存器命令字,寫入小時的初始值WriteSet1302(0x86,(0/10)4|(0%10); /根據寫日寄存器命令字,寫入日的初始值W

24、riteSet1302(0x88,(0/10)4|(0%10); /根據寫月寄存器命令字,寫入月的初始值WriteSet1302(0x8c,(10/10)4)*10+(value&0x0f);display_Second(seconds);value=ReadSet1302(0x83);minutes=(value&0x70)4)*10+(value&0x0f);display_Minute(minutes);value=ReadSet1302(0x85);hours=(value&0x70)4)*10+(value&0x0f);display_Hour(hours);value=ReadSe

25、t1302(0x87);day=(value&0x70)4)*10+(value&0x0f);display_Day(day);value=ReadSet1302(0x89);month=(value&0x70)4)*10+(value&0x0f);display_Month(month);value=ReadSet1302(0x8D);year=(value&0xf0)4)*10+(value&0x0f);display_Year(year);void displaystar(void) /顯示歡迎界面unsigned char i,j;Write_Address(0x0f);while(d

26、isplaywelcomei!=0)Write_Date(displaywelcomei);i+;delay1ms(1);i=0;Write_Address(0x4f);while(displaywishi!=0)Write_Date(displaywishi);i+;delay1ms(1);j=40;while(j-)Write_com(0x18);/循環左移delay1ms(700); Write_com(0x01);delay1ms(10);void gbdisplay(unsigned char address) /時間調整時光標閃爍Write_Address(address);del

27、ay1ms(5);Write_com(0x0f);delay1ms(5); void displaymaxt(unsigned char x) /顯示最大溫度unsigned char i,j,k;Write_com(0x0c);delay1ms(2);Write_Address(0x44);i=x/100;j=x/10;k=x%10;Write_Date(digiti);Write_Date(digitj);Write_Date(digitk);/*時間調整部分*/void hourset(void)/調時unsigned char timevalue,hour;delay1ms(500);

28、/防止多次觸發WriteSet1302(0x8e,0x00);/將寫保護去掉,確保能正常將調整后的數值寫入DS1302timevalue=ReadSet1302(0x85); /讀取此時的數值hour=(timevalue&0x70)4)*10+(timevalue&0x0f);while(1)if(ADD=0)delay1ms(50);if(ADD=0)hour+;delay1ms(300);while(ADD=0);if(RED=0)delay1ms(50);if(RED=0)hour-;delay1ms(300);if(hour=0) hour=23;while(RED=0);timev

29、alue=(hour)/10)=24) hour=0;delay1ms(5);if(CANL=0) mode=0;Write_com(0x0c);break;if(SET=0) break;WriteSet1302(0x8e,0x80);void minuteset(void) /調分unsigned char timevalue,minute;delay1ms(500);WriteSet1302(0x8e,0x00);timevalue=ReadSet1302(0x83);minute=(timevalue&0x70)4)*10+(timevalue&0x0f);while(1)if(ADD

30、=0)delay1ms(10);if(ADD=0)minute+;if(minute=60) timevalue=0;while(ADD=0);if(RED=0)delay1ms(10);if(RED=0)minute-;delay1ms(300);if(minute=0) minute=59;while(RED=0);timevalue=(minute/10)=60) minute=0;delay1ms(5);if(CANL=0) mode=0;Write_com(0x0c);break;if(SET=0) break;WriteSet1302(0x8e,0x80);void seconds

31、et(void) /秒歸零unsigned char second;delay1ms(500);WriteSet1302(0x8e,0x00);while(1)if(ADD=0)delay1ms(10);if(ADD=0)second=0;WriteSet1302(0x80,0x00);while(ADD=0);delay1ms(1);display_Second(second);Write_Address(0x4f);delay1ms(5);if(CANL=0) mode=0;Write_com(0x0c);break;if(SET=0) break;WriteSet1302(0x8e,0x

32、80);void yearset(void)/調年unsigned char datevalue,year;delay1ms(500);WriteSet1302(0x8e,0x00);datevalue=ReadSet1302(0x8d);year=(datevalue&0x70)4)*10+(datevalue&0x0f);while(1)if(ADD=0)delay1ms(10);if(ADD=0)year+;while(ADD=0);if(RED=0)delay1ms(10);if(RED=0)year-;delay1ms(300);while(RED=0);datevalue=(yea

33、r/10)4)*10+(datevalue&0x0f);while(1)if(ADD=0)delay1ms(10);if(ADD=0)month+;if(month12) month=1;while(ADD=0);if(RED=0)delay1ms(10);if(RED=0)month-;delay1ms(300);if(month=0) month=12;while(RED=0);datevalue=(month/10)4)*10+(datevalue&0x0f);while(1)if(ADD=0)delay1ms(10);if(ADD=0)day+;if(day31) day=1;while(ADD=0);if(RED=0)delay1ms(10);if(RED=0)day-;delay1ms(300);if(day=0) day=31;while(RED=0);datevalue=(day/10)23) value=0;while(ADD=0);if(RED=0)delay1ms(20);if(RED=0)value-;if(value=0) value=23;while(RED=0);houra=value;dis

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論