基于51單片機的萬年歷設計[共31頁]
《基于51單片機的萬年歷設計[共31頁]》由會員分享,可在線閱讀,更多相關《基于51單片機的萬年歷設計[共31頁](31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 單片機課程設計 題 目 基于51單片機的萬年歷設計 學生姓名 專業(yè)班級 學 號 院 (系) 指導教師 完成時間 目錄 1課程設計的目的 1 2課程設計的任務與要求 1 2.1設計任務 1 2.2設計要求 1 3單片機發(fā)展概況 1 4設計原
2、理與功能說明 4 4.1設計思想 4 4.2總體電路圖 5 4.3時鐘模塊 6 4.4液晶顯示模塊 6 4.5按鍵模塊 7 5系統(tǒng)測試 7 5.1硬件測試 7 5.2軟件測試 8 6總結 8 參考文獻 10 附錄一:總體電路原理圖 11 附錄二:主程序 12 附錄三:元器件清單 27 附錄四:實物圖 28 1課程設計的目的 1.通過制作萬年歷,可以對單片機這門課程更好的認識。 2.理論與實踐結合,提高自己的動手能力。 3.學會與合作者更好的交流學習,共同進步和提高。 4.能夠增長查閱資料的能力,視野更加開闊。
3、 5.拓展其他學科的聯(lián)系,全面發(fā)展。 6.培養(yǎng)自我發(fā)現(xiàn)問題,解決問題的能力。 2課程設計的任務與要求 2.1設計任務 1.可以去學校圖書館或者網(wǎng)上,搜集整理相關的資料,做好前期理論準備,為以后設計電路,看懂電路圖做理論支持。 2.構想萬年歷電路圖,并且具有可行性,畫出電路圖。 3.列舉電路所需的電子元件,仔細對比所需的元件的參數(shù),通過去電子元件經(jīng)銷商或者網(wǎng)購購買。 2.2設計要求 1.顯示年、月、日、時、分、秒。 2.可通過鍵盤自動調(diào)整時間。 3.計時精度:月誤差小于20秒。 3單片機發(fā)展概況 單片機誕生于20世紀70年代末,它的發(fā)展史大致可分為三個階段:
4、 第一階段(1976-1978):初級單片機微處理階段。該時期的單片機具有 8 位CPU,并行 I/O 端口、8 位時序同步計數(shù)器,尋址范圍 4KB,但是沒有串行口。 第二階段(1978-1982):高性能單片機微機處理階段,該時期的單片機具有I/O 串行端口,有多級中斷處理系統(tǒng),15 位時序同步技術器,RAM、ROM 容量加大,尋址范圍可達 64KB。 第三階段(1982-至今)位單片機微處理改良型及 16 位單片機微處理階段民用電子產(chǎn)品、計算機系統(tǒng)中的部件控制器、智能儀器儀表、工業(yè)測控、網(wǎng)絡與通信的職能接口、軍工領域、辦公自動化、集散控制系統(tǒng)、并行多機處理系統(tǒng)和
5、局域網(wǎng)絡系統(tǒng)。 STC系列單片機是由STMicroelectronics 公司生產(chǎn),并有宏晶公司做大陸代理的。本設計使用STC89C52作為控制核心,其管腳兼容其他51系列的單片機,以下對STC89C52進行簡單講解。 STC89C52單片機包含中央處理器、程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)、定時/計數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線。采用40Pin封裝的雙列直接DIP結構,圖3.1是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用?,F(xiàn)在對各引腳功能說明如下
6、(圖3.2): (1)主電源引腳 Vcc :接+5V電源正端。 Vss :接+5V電源地端。 (2)輸入/輸出引腳 P.0~P0.7:P0口的8個引腳。在不接片外存儲器與不擴展I/O接口時,可作為準雙向輸入/輸出接口。在接有片外存儲器或擴展I/O接口時,P0口分時復用為低8位地址總線和雙向數(shù)據(jù)總線。 P1.0~P1.7:P1口的8個引腳??勺鳛闇孰p向I/O接口使用。對于52子系列,P1.0 與 P1.1還有第二種功能:P1.0 可用作定時器/計數(shù)器2的計數(shù)脈沖輸入端T2。P1.1可用作定時器/計數(shù)器2的外部控制端T2EX。 P2.0~P2.7:P2口的8個引腳。可作為準雙向I/O
7、接口;有接有片外存儲器或擴展I/O接口且尋址范圍超過256個字節(jié)時,P2口用作高8位地址總線。 P3.0~P3.7:P3口的8個引腳。除作為準雙向I/O接口使用外,還具有第二種功能 ,詳見圖3.2。 圖3.1 STC89C52單片機管腳圖 引腳 第二功能 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD(串行口輸入) TXD(串行口輸出) INT0(外部中斷0輸入) INT1(外部中斷1輸入) T0(定時器0的外部輸入) T1(定時器1的外部輸入) W
8、R(片外數(shù)據(jù)存儲器寫控制信號) RD(片外數(shù)據(jù)存儲器讀控制信號) 圖3.2 P3口第二功能表 4設計原理與功能說明 4.1設計思想 以STC89C52單片機為核心,外接單片機復位電路,單片機晶振電路,時鐘芯片DS1302,按鍵電路,液晶顯示電路,通過控制STC89C52單片機的接口來控制時鐘芯片DS1302模塊,按鍵電路,液晶顯示模塊,使液晶能顯示陽歷年、月、日、星期相應的農(nóng)歷時間?! ? 液晶顯示電路 DS1302時鐘電路 STC89C52 單片機 晶振電路 按鍵電路 復位電路 圖4-1 硬件系統(tǒng)設計框架 4.2總體電路
9、圖 圖4-2 總電路圖 4.3時鐘模塊 DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的RAM寄存器。 圖4-3 時鐘電路圖 4.4液晶顯示模塊 本系統(tǒng)選擇的LCD是AMPIRE12864的漢字圖形型液晶顯示模塊,可顯示漢字及圖形。單片機P1口作為數(shù)據(jù)輸出口,RS,R\W,E分別通過10K的上拉電阻連接到單
10、片機的P0.0,P0.1,P0.2。VDD接5V電源,VSS接地。VEE為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。R/W為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。E(或EN)端為使能(enable)端,下降沿使能。DB0-DB7為雙向數(shù)據(jù)總線,同時最高位DB7也是忙信號檢測位。BLA、BLK分別為顯示器背光燈的正、負極。 圖4-4 液晶顯示電路圖 4.5按鍵模塊 本系統(tǒng)使用5個button元
11、件分別設置為增加鍵、減小鍵、退出鍵、設置/OK鍵。4個按鍵與一個4個驅(qū)動電阻相連,作為整個按鍵控制功能系統(tǒng),以觸發(fā)AT89C52中斷為方式使用設置功能。 圖4-5 按鍵電路圖 5系統(tǒng)測試 5.1硬件測試 在調(diào)試硬件時遇到過很多問題,但只要細心、認真檢查這些問題都是可以避免的,主要問題及解決辦法現(xiàn)列如下: 認真檢查電路是否有短路的地方,線與線之間,管腳刺破鄰近的漆包線之間是否連接在一起,有的話要用刀劃開,或者重新焊接。 檢查完畢后接通電源后LCD1602沒有正確的顯示。在不通電狀態(tài)下用萬用表檢測電路是否正常連接,在檢查回路時發(fā)現(xiàn)有的點之間看似連接,但由于虛焊導致其并無電氣連接,
12、只能對焊腳進行在加工直到解決問題。 5.2軟件測試 由于本系統(tǒng)涉及到多個子程序,多個芯片的編程。首先必須對可編程芯片的控制字即其控制指令要熟記于心。其次,芯片很多都有時鐘輸入端,需要晶振支持。對芯片的讀寫都需要在相應的觸發(fā)沿到來時才能進行。由于DS18B20是串行通信數(shù)據(jù),只用一個口線傳輸,在處理采集的模擬信號時需要一定的時間,會對延時有較高要求。所以在調(diào)用溫度子程序時,先關閉定時器1中斷允許,在溫度子程序反回時再打開定時器1中斷允許。 6總結 在這幾天的單片機課程設計中,老師先給我們介紹各種電子原件,讓我們了解了各種原件的不同以及注意事項,這次課程不僅僅讓我們動了手動了腦,更讓我們體
13、會到了理論與實踐相結合的重要性,使我又不得不承認理論的重要,我們必須打好基礎。在實驗設計的過程中,讓我們體會到以前從來沒有過的動手能力,以及新穎的思維方式,讓我從中獲益非淺。實驗過程中,剛開始就參看電路指導書,畫出了多電路圖,進行了仿真,但是由于實驗元件選擇的不恰當,是的電燈不能依次閃爍,許但最后用萬用表才得以發(fā)現(xiàn)問題的所在,并在老師的指導下,終于完成了實驗設計,雖然道路艱難,但我們卻也樂在其中,既鍛煉了動手能力,有培養(yǎng)了動腦能力,更加利于我們在社會上工作。 經(jīng)過我們組員三天的不懈努力,終于成功完成了萬年歷的設計,完成了任務給出的所有要求,期間遇到了很多問題,相關資料的搜集、整理,編寫、調(diào)試
14、程序的時候所出現(xiàn)的錯誤,硬件電路的選擇、連接。例如:液晶屏時間顯示出現(xiàn)了錯誤即亂碼現(xiàn)象,我們通過查找書籍和上網(wǎng)搜索的形式知道了問題所在,與延時程序有關,修改了延時程序之后問題得到了解決。在畫原理圖的時候,剛開始每個原件是用線連接的,但是后來發(fā)現(xiàn)越連越多,越連越亂,可視性太差了,很容易連錯線,而且一旦出現(xiàn)錯誤,很難檢查出錯誤,所以我們換了一種更好的方法,對其進行標號處理,從而使得原理圖更加的簡潔、直觀,而且操作起來很方便。最終還是解決了這個難題,諸如此類的錯誤在本次設計中有不少,但是通過我們組員之間的通力合作與不懈努力終于克服了這些困難,本次實訓不僅鞏固了我們所學的知識,而且學到了很多課本之外的
15、東西,真正做到了學以致用,加強了邏輯思維能力,對我們大學生來說試一次很好的經(jīng)歷,同時也讓我們深刻體會到了團結合作的重要性,組員之間合理分工,更加高效、迅速。另外對于了解較少的知識,我們不要氣餒,我們可以通過上網(wǎng)查閱、到圖書館借書瀏覽等方式了解學習,一定要相信自己,要持之以恒,這次經(jīng)歷加強了我們分析問題、解決問題的能力,為我們以后的工作學習打下堅實的基礎。本次設計中同學之間明確分工,互相幫助,才有了本次設計的圓滿成功。 參考文獻 [1] 何立民. MCS-51單片機應用系統(tǒng)設計(系統(tǒng)配置與接口技術).北京:北京航空航天大學出版社,2003. [2] 周立功. 單
16、片機實驗與實踐教程(三).北京航空航天大學出版社,2006. [3] 譚浩強. C語言程序設計.北京:清華大學出版社,2006. [4] 付家才. 單片機實驗與實踐.北京:高等教育出版社,2006. [5]淡海英. 關于單片機控制的數(shù)字萬年歷設計[J]. 電子制作,2014. [6]魯廣英. 基于單片機電子萬年歷的設計與實現(xiàn)[J]. 硅谷,2010. 附錄一:總體電路原理圖 總體電路原理圖 附錄二:主程序 #includ
17、e"lcd.h" /******************************************************************************* * 函 數(shù) 名 : Lcd1602_Delay1ms * 函數(shù)功能 : 延時函數(shù),延時1ms * 輸 入 : c * 輸 出 : 無 * 說 名 : 該函數(shù)是在12MHZ晶振下,12分頻單片機的延時。 *******************************************************
18、************************/ void Lcd1602_Delay1ms(uint c) //誤差 0us { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 數(shù) 名 : LcdWr
19、iteCom * 函數(shù)功能 : 向LCD寫入一個字節(jié)的命令 * 輸 入 : com * 輸 出 : 無 *******************************************************************************/ #ifndef LCD1602_4PINS //當沒有定義這個LCD1602_4PINS時 void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0;
20、//選擇發(fā)送命令 LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定 LCD1602_E = 1; //寫入時序 Lcd1602_Delay1ms(5); //保持時間 LCD1602_E = 0; } #else void LcdWriteCom(uchar com) //寫入命令 { LCD1602_E = 0; //使能清零 LCD1602_RS = 0; //選擇寫入命令
21、 LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = com; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫入時序 Lcd1602_Delay1ms(5); LCD1602_E = 0; // Lcd1602_Delay1ms(1); LCD1602_DATAPINS = com << 4; //發(fā)送低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫入時序 Lcd1602
22、_Delay1ms(5); LCD1602_E = 0; } #endif /******************************************************************************* * 函 數(shù) 名 : LcdWriteData * 函數(shù)功能 : 向LCD寫入一個字節(jié)的數(shù)據(jù) * 輸 入 : dat * 輸 出 : 無 *********************************************************************
23、**********/ #ifndef LCD1602_4PINS void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //選擇輸入數(shù)據(jù) LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = dat; //寫入數(shù)據(jù) Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫入時序 Lcd1602_Delay1ms(5); //保持時間 LCD1602_E = 0;
24、} #else void LcdWriteData(uchar dat) //寫入數(shù)據(jù) { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //選擇寫入數(shù)據(jù) LCD1602_RW = 0; //選擇寫入 LCD1602_DATAPINS = dat; //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫入時序 Lcd1602_Delay1ms(5); LCD1602_E = 0; LCD1602_DATAP
25、INS = dat << 4; //寫入低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫入時序 Lcd1602_Delay1ms(5); LCD1602_E = 0; } #endif /******************************************************************************* * 函 數(shù) 名 : LcdInit() * 函數(shù)功能 : 初始化LCD屏 * 輸 入 : 無 * 輸 出 : 無 ****
26、***************************************************************************/ #ifndef LCD1602_4PINS void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38); //開顯示 LcdWriteCom(0x0c); //開顯示不顯示光標 LcdWriteCom(0x06); //寫一個指針加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //設置數(shù)據(jù)指針起點 }
27、 #else void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x32); //將8位總線轉為4位總線 LcdWriteCom(0x28); //在四位線下的初始化 LcdWriteCom(0x0c); //開顯示不顯示光標 LcdWriteCom(0x06); //寫一個指針加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //設置數(shù)據(jù)指針起點 } #endif /**********************************************
28、*********************************
* 實驗名 : 定時器實驗
* 使用的IO :
* 實驗效果 :1602顯示時鐘,按K3進入時鐘設置,按K1選擇設置的時分秒,按K2選擇
*選擇設置加1。
* 注意 :
*******************************************************************************/
#include
29、t K3=P3^5; sbit K2=P3^3; unsigned char Time; //用來計時間的值 void Delay1ms(unsigned int c); void TimerConfiguration(); void Int0Configuration(); unsigned char SetPlace; /******************************************************************************* * 函 數(shù) 名 : main * 函數(shù)功能 : 主
30、函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main(void) { unsigned char hour,minit,second; unsigned int i; TimerConfiguration(); Int0Configuration(); LcdInit(); hour=12; LcdWriteData(0+hour/10);
31、 LcdWriteData(0+hour%10); LcdWriteData(-); LcdWriteData(0+minit/10); LcdWriteData(0+minit%10); LcdWriteData(-); LcdWriteData(0+second/10); LcdWriteData(0+second%10); while(1) { if(TR0==0) { if(K1==0) //檢測按鍵K2是否按下 { Delay1ms(10); //消除抖動 if(K1==0) {
32、 SetPlace++; if(SetPlace>=3) SetPlace=0; } while((i<50)&&(K1==0)) //檢測按鍵是否松開 { Delay1ms(1); i++; } i=0; } if(K2==0) //檢測按鍵K3是否按下 { Delay1ms(10); //消除抖動 if(K2==0) { if(SetPlace==0) { second++;
33、 if(second>=60) second=0; } else if(SetPlace==1) { minit++; if(minit>=60) minit=0; } else { hour++; if(hour>=24) hour=0; } } while((i<50)&&(K2==0)) //檢測按鍵是否松開 { Delay1ms(1);
34、 i++; } i=0; } } if(Time>=20) //一秒鐘來到改變數(shù)值 { Time=0; second++; if(second==60) { second=0; minit++; if(minit==60) { minit=0; hour++; if(hour==24) { hour=0; } } } } //--顯示
35、時鐘--// LcdWriteCom(0x80); LcdWriteData(0+hour/10); LcdWriteData(0+hour%10); LcdWriteCom(0x83); LcdWriteData(0+minit/10); LcdWriteData(0+minit%10); LcdWriteCom(0x86); LcdWriteData(0+second/10); LcdWriteData(0+second%10); } } /*************************************
36、****************************************** * 函 數(shù) 名 : Delay1ms() * 函數(shù)功能 : 延時1ms * 輸 入 : c * 輸 出 : 無 *******************************************************************************/ void Delay1ms(unsigned int c) //誤差 0us { unsigned char a,b; for (; c>0;
37、 c--) { for(b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 數(shù) 名 : TimerConfiguration() * 函數(shù)功能 : 配置定時器值 * 輸 入 : 無 * 輸 出 : 無 ***********************
38、********************************************************/ void TimerConfiguration() { TMOD = 0x01; //選擇工作方式1 TH0 = 0x3C; //設置初始值 TL0 = 0x0B0; EA = 1; //打開總中斷 ET0 = 1; //打開定時器0中斷 TR0 = 1; //啟動定時器0 } /***************************************************
39、**************************** * 函 數(shù) 名 : Timer0() * 函數(shù)功能 : 定時器0中斷函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void Timer0() interrupt 1 { TH0 = 0x3C; //設置初始值 TL0 = 0x0B0; Time++; }
40、 /******************************************************************************* * 函 數(shù) 名 : Int0Configuration() * 函數(shù)功能 : 配置外部中斷0 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void Int0Configuration(
41、) { //設置INT0 IT0=1;//跳變沿出發(fā)方式(下降沿) EX0=1;//打開INT0的中斷允許。 EA=1;//打開總中斷 } /******************************************************************************* * 函 數(shù) 名 : Int0() interrupt 0 * 函數(shù)功能 : 外部中斷0的中斷函數(shù) * 輸 入 : 無 * 輸 出 : 無 *****************************
42、**************************************************/ void Int0() interrupt 0 { Delay1ms(10); if(K3==0) { TR0=~TR0; SetPlace=0; } 附錄三:元器件清單 名稱 規(guī)格 數(shù)量 單片機 STC89C52 1 液晶顯示屏 LCD1602 1 時鐘芯片 DS1302 1 開關按鈕 4 晶振管 12MHZ 1 晶振管 36MHZ 1 電阻 1KΩ 1 電容 22PF 2 電容 0.1μF 1 電容 10μF 1 電位器 1 附錄四:實物圖 28
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案