

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 單片機課程設計報告</b></p><p> 課題名稱: 電子萬年歷的設計 </p><p> 姓 名: </p><p> 學 號: </p><p> 班 級:
2、 </p><p> 指導老師: </p><p><b> 摘要</b></p><p> 隨著科技的快速發(fā)展,時間的流逝,至從觀太陽、擺鐘到現在電子鐘,人類不斷研究,不斷創(chuàng)新紀錄。美國DALLAS公司推出的具有涓細電流充電能的低功耗實時時鐘電路DS1302。它可以對年、月、日、周日、時、分
3、、秒進行計時,還具有閏年補償等多種功能,而且DS1302的使用壽命長,誤差小。對于數字電子萬年歷采用直觀的數字顯示,可以同時顯示年、月、日、周日、時、分、秒和溫度等信息,還具有時間校準等功能。該電路采用AT89S52單片機作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。</p><p> 綜上所述此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢
4、,具有廣闊的市場前景。</p><p> 本設計是基于51系列的單片機進行的電子萬年歷設計,可以顯示年月日時分秒及周信息,具有可調整日期和時間功能。在設計的同時對單片機的理論基礎和外圍擴展知識進行了比較全面準備。在硬件與軟件設計時,沒有良好的基礎知識和實踐經驗會受到很大限制,每項功能實現時需要那種硬件,程序該如何編寫,算法如何實現等,沒有一定的基礎就不可能很好的實現。</p><p>&
5、lt;b> 具體實現功能:</b></p><p> 顯示年月日時分秒及星期信息</p><p> 具有可調整日期和時間功能</p><p><b> 與即時時間同步</b></p><p><b> 目 錄</b></p><p><b&
6、gt; 1 方案論證3</b></p><p> 1.1 單片機芯片的選擇方案和論證3</p><p> 1.2 顯示模塊選擇方案和論證3</p><p> 1.3 時鐘芯片的選擇方案和論證3</p><p> 1.4 電路設計最終方案決定4</p><p> 2 系統的硬件設計與實現
7、4</p><p> 2.1 電路設計框圖4</p><p> 2.2 系統硬件概述4</p><p> 2.3 主要單元電路的設計5</p><p> 2.3.1 單片機主控制模塊的設計5</p><p> 2.3.2 時鐘電路模塊的設計5</p><p> 2.3.3
8、 電路原理及說明6</p><p> 3 系統的軟件設計8</p><p> 3.1 程序流程框圖8</p><p> 4 測試與結果分析10</p><p> 4.1 硬件測試10</p><p> 4.2 軟件測試10</p><p> 4.3 測試結果分析與結論1
9、0</p><p> 4.3.1 測試結果分析10</p><p> 4.3.2 測試結論10</p><p> 5 Proteus軟件仿真11</p><p> 5.1Proteus 仿真電路圖11</p><p> 5.2仿真結果11</p><p> 6課程設計總結與
10、體會11</p><p><b> 參考文獻12</b></p><p><b> 附錄12</b></p><p><b> 1 方案論證</b></p><p> 1.1 單片機芯片的選擇方案和論證</p><p><b>
11、 方案一: </b></p><p> 采用89C51芯片作為硬件核心,采用Flash ROM,內部具有4KB ROM 存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機完全兼容,但是運用于電路設計中時由于不具備ISP在線編程技術, 當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,對芯片的多次拔插會對芯片造成一定的損壞。</p><p>&
12、lt;b> 方案二:</b></p><p> 采用AT89S52,片內ROM全都采用Flash ROM;能以3V的超底壓工作;同時也與MCS-51系列單片機完全該芯片內部存儲器為8KB ROM 存儲空間,同樣具有89C51的功能,且具有在線編程可擦除技術,當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,不需要對芯片多次拔插,所以不會對芯片造成損壞,所以選擇采用AT
13、89S52作為主控制系統。</p><p> 1.2 顯示模塊選擇方案和論證</p><p><b> 方案一:</b></p><p> 采用LED數碼管動態(tài)掃描,LED數碼管價格適中,對于顯示數字合適,采用動態(tài)掃描法與單片機連接時,雖然占用的單片機口線少,但連線還需要花費一點時間,所以也不用此種作為顯示。</p><
14、;p><b> 方案二:</b></p><p> 采用點陣式數碼管顯示,點陣式數碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數字顯得太浪費,且價格也相對較高,所以也不用此種作為顯示。</p><p><b> 方案三:</b></p><p> 采用LCD液晶顯示屏,液晶顯示屏的顯示
15、功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見,并且我做的最小系統上帶一個TS1620-1,和AT89S52已經接好,省了很多麻煩,所以在此設計中采用LCD液晶顯示屏。</p><p> 1.3 時鐘芯片的選擇方案和論證</p><p><b> 方案一:</b></p><p> 直接采用單片機定時計數器提供秒信號,使用程序實現年、
16、月、日、星期、時、分、秒計數。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現的時間誤差較大,所以不采用此方案。</p><p><b> 方案二:</b></p><p> 采用DS1302時鐘芯片實現時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年進行計數,而且精度高,位的RAM做為數據暫存區(qū),工作電壓2.5V~5.5V范圍
17、內,2.5V時耗電小于300nA。</p><p> 1.4 電路設計最終方案決定</p><p> 綜上各方案所述,對此次作品的方案選定: 采用AT89S52作為主控制系統; DS1302提供時鐘;LCD液晶顯示屏作為顯示。</p><p> 2 系統的硬件設計與實現</p><p> 2.1 電路設計框圖</p>&
18、lt;p><b> 圖1系統原理圖</b></p><p> 2.2 系統硬件概述</p><p> 本電路是由AT89S52單片機為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V
19、。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數據。DS1302內部有一個31*8的用于臨時性存放數據的RAM寄存器??僧a生年、月、日、周日、時、分、秒,具有使用壽命長,精度高和低功耗等特點,同時具有掉電自動保存功能;溫度的采集由DS18B20構成;顯示部份由LCD液晶顯示屏顯示。</p><p> 2.3 主要單元電路的設計</p><p>
20、2.3.1 單片機主控制模塊的設計</p><p> AT89S52單片機為40引腳雙列直插芯片,有四個I/O口P0,P1,P2,P3, MCS-51單片機共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨立地作輸出或輸入。</p><p> 單片機的最小系統如下圖所示,18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調電容的一端,在片內它是振蕩器倒相放大器的
21、輸入,XTAL2接外部晶振和微調電容的另一端,在片內它是振蕩器倒相放大器的輸出。第9引腳為復位輸入端,接上電容,電阻及開關后夠上電復位電路,20引腳為接地端,40引腳為電源端。 如圖2 所示:</p><p><b> 圖2 主控制系統 </b></p><p> 2.3.2 時鐘電路模塊的設計</p><p> 圖.3示出DS1302
22、的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允
23、許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數據的傳送手段。當RST為高電平時,所有的數據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RSTS置為低電平,則會終止此次數據傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電動行時,在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK 為低電平時,才能將RST置為高電平,I/O為串行數據輸入端(雙向)。SCLK始終是輸入端。</p><p&
24、gt; 圖3 DS1302的引腳圖</p><p> 2.3.3 電路原理及說明</p><p> (1) 時鐘芯片DS1302的工作原理:</p><p> DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖4所示。DS1302的控制字的位7必須置1,若為0則不能把對D
25、S1302進行讀寫數據。對于位6,若對程序進行讀/寫時RAM=1,對時間進行讀/寫時,CK=0,位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表.2為DS1302的日歷、時間寄存器內容:“CH”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當該位為0時,時鐘開始運行?!癢P”是寫保護位,在任何的對時鐘和RAM的寫操
26、作之前,WP必須為0。當“WP”為1時,寫保護位防止對任一寄存器的寫操作。</p><p> (2) DS1302的控制字節(jié):</p><p> DS1302控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數據寫入DS1302中,位6如果0,則表示存取日歷時鐘數據,為1表示存取RAM數據;位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀
27、操作,控制字節(jié)總是從最低位開始輸出</p><p> (3) 數據輸入輸出(I/O)</p><p> 在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位0位到高位7。</p><p> (4) DS1302的寄存
28、器</p><p> DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數據位為BCD碼形式。</p><p> 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內容。 DS1302與RAM相關的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個
29、8位的字節(jié),其命令控制字為C0H~FDH,其中奇數為讀操作,偶數為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。 </p><p> 2.3.4 顯示模塊的設計</p><p> 如圖.4為LCD顯示模塊,和最小系統上的連線一樣,無需修改。</p><p> 圖4 LCD液晶顯示
30、屏顯示模塊</p><p><b> 3 系統的軟件設計</b></p><p> 3.1 程序流程框圖</p><p><b> 圖5主程序流程圖</b></p><p> 圖6 時間調整程序流程圖</p><p><b> 4 測試與結果分析</
31、b></p><p><b> 4.1 硬件測試</b></p><p> 電子萬年歷的電路系統較大,對于焊接方面更是不可輕視,龐大的電路系統中只要出于一處的錯誤,則會對檢測造成很大的不便,而且電路的交線較多,對于各種鋒利的引腳要注意處理,否則會刺被帶有包皮的導線,則會對電路造成短路現象。</p><p> 在本成電子萬年歷的設計調
32、試中遇到了很多的問題。回想這些問題只要認真多思考都是可以避免的,以下為主要的問題:</p><p> (1)LCD液晶顯示屏顯示部分已經連在最小系統上,節(jié)省了不少時間和精力。</p><p> ?。?)對萬年歷修改時間或日期時,有時LCD液晶顯示屏被屏蔽掉,造成不亮現象。</p><p> 解決:根據儀器的測試,發(fā)現電路的驅動能力不足,最后在DS1302時鐘芯片
33、的/CS、SCLK、RET端接入5.1K的上拉電阻后,電路的驅動能力才能滿足,即可解決不亮現象。</p><p><b> 4.2 軟件測試</b></p><p> 電子成年歷是多功能的數字型,可以看當前日期,時間。電子成年歷功能很多,所以對于它的程序也較為復雜,所以在編寫程序和調試時出現了相對較多的問題。最后經過多次的模塊子程序的修改,一步一步的完成,最終解決
34、了軟件。在軟件的調試過程中遇到的主要問題是:</p><p> 燒入程序后,LCD液晶顯示屏顯示亮度不好。</p><p> 解決:一遍旋轉10K歐的滑動變阻器,一遍觀看LCD顯示屏,知道看到合適的亮度為止。</p><p> 4.3 測試結果分析與結論</p><p> 4.3.1 測試結果分析</p><p&g
35、t; 1.在測試中遇到LCD液晶顯示屏為不顯示時,首先使用試測儀對電路進行測試,觀察是否存在漏焊,虛焊,或者元件損壞,滑動變阻器器沒有調好:查看燒寫的程序是否正確無誤,對程序進行認真修改。</p><p> 4.3.2 測試結論</p><p> 經過多次的反復測試與分析,可以對電路的原理及功能更加熟悉,同時提高了設計能力與及對電路的分析能力。同時在軟件的編程方面得到更到的提高,對編
36、程能力得到加強,同時對所學的知識得到很大的提高與鞏固。</p><p> 5 Proteus軟件仿真</p><p> 5.1Proteus 仿真電路圖</p><p> 圖7 Proteus仿真電路圖</p><p><b> 5.2仿真結果</b></p><p><b>
37、 運行后LED顯示:</b></p><p> 6課程設計總結與體會</p><p> 制作這次課程設計一切都是從零開始,從最簡單的畫流程圖起步,這次課程設計可以圓滿完成,跟單片機課程里面的課外作業(yè)是離不開的。這次課程設計從開始到制作成功前后超過了一個星期。當電子萬年歷可以成功實現時,那種激動和喜悅只有自己可以體會。</p><p> 在整個設計
38、過程中,充分發(fā)揮人的主觀能動性,自主學習,學到了許多沒學到的知識。較好的完成了設計,達到了預期的目的,完了最初的設想。對電路的設計、布局要先有一個好的構思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時遇到了很多的問題,經過靜下心來思考,和同學討論,理清了思路,反而得心應手。在此次設計中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我的耐心,做什么事都在有耐心。此次課程設計中學到了很多很多東西,這是最重
39、要的??傊舜握n設使我的能力得到了全方位的提高,使得我的操作能力和專業(yè)技能都有了很大的提高。</p><p> 在做課程設計的日子里得到了xx老師的悉心指導和同學的幫助,在此向他們致以誠摯的謝意。感謝提供相關技術幫助的老師和同學,你們的支持和鼓勵使我對這次的設計完成有了信心和動力,我在此深表謝意。</p><p><b> 參考文獻</b></p>
40、<p> [1]劉勇 編 數字電路 電子工業(yè)出版社 2004</p><p> [2]陳正振 編 電子電路設計與制作 廣西交通職業(yè)技術學院信息工程系 2007</p><p> [3]楊子文 編 單片機原理及應用 西安電子科技大學出版社 2006</p><p> [4]王法能 編 單片機原理及應用 科學出版社 2004</p>&
41、lt;p><b> 附錄 </b></p><p><b> 系統程序</b></p><p> #include <reg51.h></p><p> #include <LCD1602.C></p><p> #include <DS18B20.C&
42、gt;</p><p> #include <DS1302.C></p><p> #include <SERIAL.C></p><p> sbit KEY=P2^6; //定義日期和時間轉換按鍵</p><p> sbit KEY1=P3^2;</p><p>
43、sbit KEY2=P3^3;</p><p> sbit KEY3=P3^4;</p><p> sbit KEY4=P3^5;</p><p> void delay10(void)</p><p><b> {</b></p><p> unsigned char i,j;<
44、/p><p> for(i=0;i<255;i++)</p><p> for(j=0;j<200;j++);</p><p><b> }</b></p><p> unsigned char conver(unsigned char a,unsigned char b,unsigned char c)
45、</p><p><b> {</b></p><p> if((a&0x0f)==0x0a) a=a+6;</p><p> if(a==b) a=c;</p><p><b> return a;</b></p><p><b> }<
46、;/b></p><p><b> main() </b></p><p><b> {</b></p><p> bit flag_1=1;</p><p> bit flag_2=1;</p><p> bit flag_3=1;</p>
47、<p> bit flag_4=1; </p><p> char a; </p><p> unsigned char j[8],choose=0x01;</p><p> init_serialcomm();//初始化串行口</p><p> LCD_initial(); //初始化LCD</p&g
48、t;<p> LCD_prints("Temperature: C") ; //顯示"Temperature: C"</p><p><b> while(1)</b></p><p><b> {</b></p><p> send_char_com
49、(0x31);</p><p> a=Read_Temperature(); //讀取DS18B20的溫度</p><p> LCD_set_position(0xc); //定位LCD到指定位置</p><p> if(a<0) //處理溫度正負</p><p><b> {</b>
50、</p><p> a = (-1)*a; // 取補</p><p> LCD_printc(0x2D);</p><p><b> }</b></p><p><b> else </b></p><p><b> { </b></
51、p><p> LCD_printc(0x2B);</p><p><b> }</b></p><p> LCD_printc(a/10+0x30); //顯示溫度高位</p><p> LCD_printc(a%10+0x30); //顯示溫度低位</p><p> LCD_set
52、_position(0x40);</p><p> if(KEY==0) //按鍵--處理時間和日期的輪換</p><p><b> {</b></p><p> delay10();</p><p> if(KEY==1)</p><p> delay10();</p&g
53、t;<p> flag_1=~flag_1; </p><p><b> }</b></p><p> if(KEY1==0) //按鍵1--處理設定時間和返回</p><p><b> {</b></p><p> delay10();</p>&
54、lt;p> if(KEY1==1)</p><p> delay10();</p><p> flag_2=~flag_2; </p><p><b> }</b></p><p> if(KEY2==0) //按鍵2--處理選擇設定時間</p><p><b&g
55、t; { </b></p><p> delay10();</p><p> if(KEY2==1)</p><p> delay10();</p><p><b> choose++;</b></p><p> if(choose==8)</p><p
56、> choose=0x01;</p><p><b> }</b></p><p> if(KEY3==0) //按鍵3--處理設定時間和返回</p><p> {delay10();</p><p> if(KEY3==1)</p><p> delay10();
57、 </p><p> switch(choose)</p><p><b> {</b></p><p> case 1:j[6]++; j[6]=conver(j[6],0xa0,0x00);break;//年</p><p> case 2:j[5]++; j[5]=conver(j[5],0x07,0x
58、00);break;//周</p><p> case 3:j[4]++;j[4]=conver(j[4],0x13,0x01);break;//月</p><p> case 4:j[3]++;j[3]=conver(j[3],0x32,0x01);break;//日</p><p> case 5:j[2]++;j[2]=conver(j[2]
59、,0x24,0x00);break;//時</p><p> case 6:j[1]++;j[1]=conver(j[1],0x60,0x00);break;//分</p><p> case 7:j[0]++;j[0]=conver(j[0],0x60,0x00);break;//秒</p><p><b> }</b><
60、;/p><p><b> }</b></p><p> if(flag_2==1)</p><p> read_serial(j); //讀取DS1302的時間</p><p><b> else </b></p><p> write_date_time(j)
61、;</p><p> if(flag_1==1)</p><p><b> {</b></p><p> LCD_prints("Time: ") ;</p><p> LCD_printc((j[2]>>4&0x07)+0x30); //時</p><
62、p> LCD_printc((j[2]&0x0f)+0x30);</p><p> LCD_printc(0x3A); //":"號</p><p> LCD_printc((j[1]>>4&0x07)+0x30); //分</p><p> LCD_printc((j[1]&0x0f)
63、+0x30);</p><p> LCD_printc(0x3A); //":"號</p><p> LCD_printc((j[0]>>4&0x07)+0x30); //秒</p><p> LCD_printc((j[0]&0x0f)+0x30);</p><p> LCD_pr
64、intc(0x20); //空格</p><p> LCD_printc(0x20); //空格</p><p><b> }</b></p><p><b> else</b></p><p><b> { </b></p><p>
65、; LCD_prints("Date: ") ;</p><p> LCD_printc((j[6]>>4&0x0f)+0x30); //年</p><p> LCD_printc((j[6]&0x0f)+0x30);</p><p> LCD_printc(0x2D); //"-&quo
66、t;號</p><p> LCD_printc((j[4]>>4&0x01)+0x30);//月</p><p> LCD_printc((j[4]&0x0f)+0x30);</p><p> LCD_printc(0x2D); //"-"號</p><p> LCD_printc(
67、(j[3]>>4&0x03)+0x30);//日</p><p> LCD_printc((j[3]&0x0f)+0x30);</p><p> LCD_printc(0x2D); //"-"號</p><p> LCD_printc((j[5]>>4&0x07)+0x30); //星期
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論