單片機定時鬧鐘課程設計(共28頁)_第1頁
單片機定時鬧鐘課程設計(共28頁)_第2頁
單片機定時鬧鐘課程設計(共28頁)_第3頁
單片機定時鬧鐘課程設計(共28頁)_第4頁
單片機定時鬧鐘課程設計(共28頁)_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選優質文檔-傾情為你奉上單片機課程設計定時鬧鐘設計姓 名: 學 號: 專業班級: 10機電一班 指導老師: 朱鈺煜 所在院系: 工學院機械系 黃河科技學院課程設計任務書 工 學院 機械 系 機械設計制造及其自動化 專業 10 級 1 班學號 1 姓名 指導教師 朱鈺煜 題目: 基于單片機的定時鬧鐘 課程: 單片機課程設計 課程設計時間 2013年 10月28 日 至2013年11 月 10 日 共 2 周課程設計工作內容與基本要求(設計要求、設計任務、工作計劃、所需相關資料)(紙張不夠可加頁)1設計要求:基于單片機的定時鬧鐘創新設計: 時間到發出聲音。2. 設計任務與要求2.1系統硬件電路設

2、計根據該系統設計的功能要求選擇所用元器件,設計硬件電路。要求用Proteus繪制整個系統電路原理圖。2.2軟件設計根據該系統要求的功能進行軟件設計,繪制整個系統的軟件流程圖;根據流程圖編寫程序并匯編調試通過;列出軟件清單,軟件清單要求逐條加以注釋。2.3 Proteus仿真用Proteus對系統軟硬件進行仿真調試并通過。2.4 編寫設計說明書內容包括任務書、設計方案分析、硬件部分設計、軟件部分設計、調試結果整理分析、設計調試的心得體會等,字數不少于5000字;硬件部分設計要繪制整個系統電路原理圖,對各部分電路設計原理做出說明;軟件設計部分要(用visio2002畫圖軟件)繪制整個系統及各部分的

3、軟件流程圖,列出程序清單,逐條加以注釋,并注明各程序功能塊的功能。3工作計劃 專心-專注-專業序號設計內容所用時間1布置任務及調研天3制作與調試天4撰寫設計報告書2天合 計14天4主要參考資料單片機課程設計指導書 皮大能 北京理工大學出版社2012.78051單片機實踐與應用 吳金戎 清華大學出版社2003.8單片機技術基礎教程與實踐 夏路易 電子工業出版社2008.1單片機原理及應用張毅剛 高等教育出版社 2012.11基于Proteus的單片機系統設計與仿真實例 蔣輝平 機械工業出版社 2007.7 指導老師簽字: 日 期:目錄1. LCD電子鬧鐘的特點和功能介紹.12. 設計實現方案.2

4、 2.1原理.2 2.2 原理及工作過程說明.23. 硬件設計.4 3.1主控芯片AT89C51的設計.4 3.2 時鐘電路部分設計.4 3.3 LCD顯示電路部分.54. 軟件設計.7 4.1軟件設計概述.7 4.2 主函數的設計.7 4.3.1程序初始化.7 4.3.2鬧鐘的實現.8 4.3.3顯示程序.9附錄一 定時鬧鐘仿真電路圖.10附錄二 定時鬧鐘程序代碼.111、LCD電子鬧鐘的特點和功能介紹 時鐘是將小時、分鐘、秒鐘顯示于人的肉眼的計時裝置。而單片機模塊中最常見的正是數字鐘,數字鐘是一種用數字電路技術實現時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置

5、,具有更長的使用壽命,因此得到了廣泛的使用。而LCD電子定時鬧鐘是以單片機為基礎的數字電路實現對時、分、秒的數字顯示的數字計時裝置,它的計時周期為24小時,另外應有校時功能和一些顯示日期、鬧鐘等附加功能。一個基本的數字鐘電路主要由譯碼顯示器、“時”,“分”,“秒”,“星期”計數器、校時電路、報時電路和振蕩器組成。目前電子鐘廣泛用于各種私人和公眾場合,成為我們生活、工作和學習中不可缺少的好幫手。 由于時鐘的實用性和在人們生活中的重要性,所以嘗試設計以單片機為核心的數字時鐘是很有意義的。鐘表原先的報時功能已經原不能滿足人們日益增長的要求,現代的電子時鐘多帶有類似自動報警、按時自動打鈴、時間程序自動

6、控制、定時廣播、自動起閉路燈、通斷動力設備、甚至各種定時電氣的自動啟用等功能,本設計中LCD電子時鐘采用LCD顯示時間和日期年月,直觀實用,而且可以方便的校調,附帶的萬年歷和定時功能也是很方便和實用的。2、設計實現方案 2.1原理 本LCD定時鬧鐘,是以單片機及外圍接口電路為核心硬件,輔以其他外圍硬件電路,用匯編語言設計的程序來實現的。根據C51單片機的外圍接口特點擴展相應的硬件電路,然后根據單片機的指令設計出數字鐘相應的軟件,再利用軟件執行一定的程序來實現數字鐘的功能。由于采用集成芯片性的單片機來制作電子鐘,這樣設計制作簡單而且功能多、精確度高,也可方便擴充其他功能,實現也十分簡單。本設計是

7、利用AT89C51單片機為主控芯片,由LCD、晶振、電阻、電容、發光二極管、開關、喇叭等元件組成硬件電路,通過編寫軟件程序來實現和控制的數字定時鬧鐘。如圖2.1所示。 圖2.12.2 原理及工作過程說明 (1)定時鬧鐘的基本功能如下 :(a)啟動仿真軟件,使用LCD液晶顯示器來顯示現在的時間 。(b)程序執行之后顯示“Time:00:00:00”; 時間顯示的秒開始變化,并且LED閃爍,表示開始已經計時。(c)由LED閃動來做秒計數表示。(d)當設定的鬧鐘時間到達后,鬧鈴開始發出“噠噠噠”的聲音。(2)按鍵功能如下 :按鍵K1設置現在的時間和時調整;按鍵K2顯示鬧鐘設置的時間和分調整;按鍵K3

8、設置鬧鈴的時間和設置完成;按鍵K4鬧鈴ON/OFF的狀態設置,設置為ON時連續三次發出“嘩”的一聲,設置為OFF發出“嘩”的一聲和鬧鐘時間到時,發出一陣聲響,按下本鍵可以停止聲響。(3)調整計時器時間如下 :按下K1鍵,然后按K1調整小時,K2調整分鐘,按下K3表示時間設置完成。(4)調整鬧鐘時間設置如下 : 按下K3開始鬧鐘設置,LCD下一行顯示“Alarm:00:00”按下K1設置小時,按一下K2設置分鐘,再次按下K3設置完成,并且設置時間消失,當再次按一下K2時“Alarm:00:00再次顯示并馬上消失。按一下K4關閉鬧鐘,再次按下打開鬧鐘。3、硬件設計 3.1 主控芯片AT89C51的

9、設計 在本LCD電子鬧鐘設計中就是采用利用我們熟悉的AT89C51單片機為主控芯片。AT89C51單片機由微處理器,存儲器,I/O口以及特殊功能寄存器SFR等部分構成。其存儲器在物理上設計成程序存儲器和數據存儲器兩個獨立的空間,片內程序存儲器的容量為4KB,片內數據存儲器為128個字節。89C51單片機有4個8位的并行I/O口:P0口,P1口,P2口和P3口。各個接口均由接口鎖存器,輸出驅動器,和輸入緩沖器組成。P1口是唯一的單功能口,僅能用作通用的數據輸入/輸出口。P3口是雙功能口除了具有數據輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。

10、在需要外部程序存儲器和數據存儲器擴展時,P0可作為分時復用的低8位地址/數據總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號. 3.2 時鐘電路部分設計 AT89C51系列的單片機的時鐘方式分為內部方式和外部方式。內部方式就是在單片機的XTAL1和XTAL2的兩引腳外接晶振,就夠成了自激振蕩器在單片機內部產生時鐘脈沖信號。外部時鐘方式是把外部已經有的時鐘信號引入到單片機內部。時鐘電路在計算機系統中起著非常重要的作用,是保證系統正常工作的基礎。在一個單片機應用系統中,時鐘有兩方面的含義:一是指為保障系統正常工作的基準振蕩定

11、時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統工作的快慢;二是指系統的標準定時時鐘,即定時時間。本LCD電子鬧鐘設計是采用內部時鐘方式,用一個12MHz晶振和兩個30Pf瓷片電容組成,為單片機提供標準時鐘,其中兩個瓷片電容起微調作用.其電路圖見圖3.1。圖3.1 而之所以采用高性能的振蕩電路,因為:1.單片機電子鐘的計時脈沖基準是由外部晶振的頻率經過12分頻后提供,采用內部的定時/計數器來實現計時功能。所以,外接晶振頻率精確度直接影響電子鐘計時的準確性。 2.單片機電 子鐘利用內部定時/計數器溢出產生中斷(12M晶振一般為50ms)再乘以相應的倍率來實現秒、分、時的轉換。大家

12、都知道從定時/計數器產生中斷請求到響 應中斷需要3-8個機器周期,定時中斷子程序中的數據入棧和重裝定時/計數器的初值還需要占用數個機器周期,還有從中斷入口轉到中斷子程序也要占用一定的 機器周期。 3.3 LCD顯示電路部分 為了獲得更好的效果本設計并沒有采用常見的LED,而是采用了型號為1602的 LCD。LCD有LED數碼顯示更好的更的直觀效果,也更加經久耐用。液晶顯示模塊體積小功耗低、顯示內容豐富,現在字符型液晶顯示模塊已經是單片機應用設計中最常用的信息顯示器件之一了。本LCD是2行16列液晶 可顯示2行16列英文字符,有8位數據總線D0-D7,RS,R/W,EN三個控制端口(共14線),

13、工作電壓為5V。沒背光,和常用的1602B功能和引腳一樣(除了調背光的二個線腳). 該模塊也可只用D4-D7作為四位數據分兩次傳送。這樣的話可以節省MCU的I/O口資源。引腳說明,見表3.1。VDD:電源正極,4.55.5V,通常使用5V電壓;VL:LCD對比度調節端,電壓調節范圍為05V。接正電源時對比度最弱,接地電源時對比度最高,但對比度過高時會產生“鬼影”,因此通常使用一個10K的電位器來調整對比度或者直接串接一個電阻到地;RS:MCU寫入數據或者指令選擇端。MCU要寫入指令時,使RS為低電平;MCU要寫入數據時,使RS為高電平;R/W:讀寫控制端。R/W為高電平時,讀取數據;R/W為低

14、電平時,寫入數據;E:LCD模塊使能信號控制端。寫數據時,需要下降沿觸發模塊。D0D7:8位數據總線,三態雙向。如果MCU的I/O口資源緊張的話,該模塊也可以只使用4位數據線D4D7接口傳送數據。本充電器就是采用4位數據傳送方式;BLA: LED背光正極。需要背光時,BLA串接一個限流電阻接VDD,BLK接地,實測該模塊的背光電流為50mA左右;BLK: LED背光地端.表3.1 LCD顯示屏引腳說明編號符號引腳說明編號符號引腳說明1VCC電源地9D2雙向數據口2VDD電源正極10D3雙向數據口3VL對比度調節11D4雙向數據口4RS數據/命令選擇12D5雙向數據口5R/W讀/寫選擇13D6雙

15、向數據口6E模塊使能端14D7雙向數據口7D0雙向數據口15BLK背光源地8D1雙向數據口16BLA背光源正極4、軟件設計 4.1 軟件設計概述這里用匯編的單片機程序構成了本LCD電子鬧鐘的軟件系統。該程序實現時間及定時(時間以0點0分0秒為基準計算,鬧鈴定時以0時0分為基準計算)的顯示,有外中斷0和五個開關實現校時,鬧鐘功能。其中程序的晶振頻率為12MHz,最小計時單位為1/20秒。主芯片p0.1-p0.7輸出數據到LCD數據總線,p3.0-2.2輸出LCD控制信號,P2.1輸出聲音信號,.P1.0-P1.3輸入外部控制信號,整個軟件系統也是根據這個關系連接成一個完整的系統。 4.2 主函數

16、的設計本LCD電子鬧鐘的的主程序流程圖如圖4.1所示: 圖4.1 4.3.1 程序初始化 在系統開始上電時,需要.首先初始化液晶:void TimeInit()write_com(0x01); /初始化1602液晶write_com(0x80); /設置現實初始坐標for(num=0;num<9;num+) /顯示年月日write_date(tablenum); delay(5);write_com(0x80+0x40+6); /寫出時間顯示部分的兩個冒號write_date(':');delay(5);write_com(0x80+0x40+9);write_date(

17、':');delay(5);write_sfm(4,shi); /分別送去液晶顯示write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);write_sfm(10,miao);write_com(0x80+0x40+10) 4.3.2 鬧鐘的實現 鬧鐘功能的實現涉及到兩個方面:鬧鈴時間設定和是否鬧鈴判別與相應處理。鬧鈴時間設定模塊的設計可參照時間設定模塊,這里著重闡述鬧鈴判別與處理模塊的設計問題。鬧鈴判別與.鬧鈴處理的關鍵在于判別何時要進行鬧鈴。當時十位、時個位、分十位、分個位中任一位發生改變(進位)時,就必

18、須進行鬧鈴判別。程序設計思想如圖4.2。 圖4.2 4.3.3 顯示程序顯示程序包括時鐘顯示和定時顯示程序。具體程序見附錄。液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表4.1是TC1602EL液晶模塊的內部顯示地址。表4.112345678910111213141516000102030405060708090A0B0C0D0E0F404142434445464748494A4B4C4D4E4F 附錄1 定時鬧鐘仿真電路圖 附錄2 定時鬧鐘的控制程序代碼#incl

19、ude<reg52.h>#define uint unsigned int#define uchar unsigned charsbit key1=P10; sbit key2=P11;sbit key3=P12;sbit key4=P13;sbit lcden=P22; sbit lcdrs=P20;sbit lcdrw=P21;sbit jdq=P23;sbit led=P24; sbit sound=P25;int a,b,i,min,hour,minge,minshi,hourge,hourshi,amin,ahour,aminge,aminshi,ahourge,ahou

20、rshi,sec,secshi,secge;/unsigned char code x=0xFF,0xC7,0x83,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF;/unsigned char code z=0xFF,0xE3,0xC1,0x80,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x7F,0xFF,0xFF;uchar code table1='0','1','2','3','4&#

21、39;,'5','6','7','8','9'uchar code table2="Time:00:00:00 "uchar code Alarm_1="Alarm:00:00 "uchar code nul=" "uchar num1,num2;bit flag=0;void delay(unsigned int xms)/延時程序uint i,j; for(i=xms;i>0;i-) for(j=124;j>0;j-);void write

22、_com(uchar com) /LCD命令控制,寫指令函數delay(5) ;lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar date) /LCD數據控制,寫數據函數delay(5);lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;void time()/設置時間函數 while(1)if(key1=0) delay(10);if(key1=0)if(hour=23) /"時"設置hour=0;elsehour+;hourge=

23、hour%10;hourshi=hour/10;write_com(0x0f);delay(2);write_com(0x80+6);write_data(table1hourge); /"時"個位寫入LCD第二行第6位delay(5);write_com(0x80+5);delay(2);write_data(table1hourshi); /"時"十位寫入LCD第二行第5位while(!key1);/delay(1);if(key2=0) delay(10);if(key2=0)if(min=59)/"分"設置min=0;else

24、min+;minge=min%10;minshi=min/10;write_com(0x0f);write_com(0x80+9);write_data(table1minge); /"分"個位寫入LCD第二行第9位delay(1);write_com(0x80+8);write_data(table1minshi); /"分"十位寫入LCD第二行第8位delay(1);while(!key2); if(key3=0) delay(10);if(key3=0)write_com(0x0c); /整體顯示,關光標,不閃爍TR1=1; /定時計數器1啟動wh

25、ile(!key3);break; /key3松開時,顯示時間"時""分"位均已設置完畢 void alarm()/設置鬧鐘時間函數 while(1)if(key1=0) delay(10);if(key1=0)if(ahour=23)/鬧鐘"時"設置ahour=0;elseahour+;ahourge=ahour%10;ahourshi=ahour/10;write_com(0x0f);/delay(2);write_com(0x80+0x40+8);write_data(':');write_com(0x80+0x

26、40+7);write_data(table1ahourge);delay(1);write_com(0x80+0x40+6);/delay(2);write_data(table1ahourshi);delay(1);while(!key1);if(key2=0) /鬧鐘"分"設置 delay(10);if(key2=0)if(amin=59)amin=0;elseamin+;aminge=amin%10;aminshi=amin/10;write_com(0x0f);/delay(2);write_com(0x80+0x40+10);write_data(table1a

27、minge);delay(1);write_com(0x80+0x40+9);/delay(2);write_data(table1aminshi);delay(1);while(!key2); if(key3=0) flag=flag; delay(10);if(key3=0)write_com(0x0c);write_com(0x80+0x40);for(i=0;i<11;i+)write_data(nuli);while(!key3);break; /設置結束,此時LCD第二行無數據顯示,只有第一行有時間顯示 void keyscan()/鍵盤掃描 if(key1=0) delay

28、(10);if(key1=0)while(!key1); /key1鍵松開后執行下一行程序time(); /調用time()函數,即時間設置 else if(key2=0) delay(10);if(key2=0)while(!key2)ahourge=ahour%10;ahourshi=ahour/10;write_com(0x80+0x40+7);write_data(table1ahourge);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1ahourshi);aminge=amin%10;aminshi=amin/1

29、0;write_com(0x80+0x40+10);write_data(table1aminge);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1aminshi);write_com(0x80+0x40);for(i=0;i<11;+i)write_data(Alarm_1i); /顯示鬧鐘設置的時間write_com(0x80+0x40);for(i=0;i<11;i+)write_data(nuli); /key2松開后,LCD只有第一行顯示時間,鬧鐘設置時間不顯示 else if(key3=0) dela

30、y(10);if(key3=0)while(!key3); /表示鬧鐘時間設置退出 ahourge=ahour%10;ahourshi=ahour/10;write_com(0x80+0x40+7);write_data(table1ahourge);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1ahourshi);aminge=amin%10;aminshi=amin/10;write_com(0x80+0x40+10);write_data(table1aminge);delay(5);write_com(0x80+0x

31、40+9);delay(2);write_data(table1aminshi);write_com(0x80+0x40);for(i=0;i<11;+i)write_data(Alarm_1i);/顯示鬧鐘設置時間alarm(); /調用鬧鐘時間設置函數 else if(key4=0)/以下進行鬧鈴開關的設置 delay(5);if(key4=0) while(!key4);a=a+1;if(a%2=0) /鬧鐘"on"for(b=0;b<6;b+)sound=sound; /蜂鳴器發出3次"嘩"的響聲delay(200);sound=1;

32、else if(a%2=1) /鬧鐘"off"sound=0; /蜂鳴器發出1次"嘩"的響聲delay(300);sound=1;delay(300); sound=1; void lcd_init() /LCD初始化函數lcden=0;lcdrw=0;write_com(0x38); /設置8位格式,2行,5×7write_com(0x0c); /整體顯示,關光標,不閃爍write_com(0x06); /設定輸入方式,增量不轉移write_com(0x01); /清除屏幕顯示delay(2);write_com(0x80);for(i=0;i<16;i+)write_data(table2i); /寫入顯示時間數據delay(1);void judge()if(sec=60)min+;sec=0;if(min=60)hour+;min=0;if(hour=24)hour=0;void init()/AT89C51初始化函數key1=1;key2=1;key3=1;key4=1;sec=0;a=0;sound=1;amin=-1; /

溫馨提示

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

評論

0/150

提交評論