版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)論文</b></p><p> 課題: 基于AT89C52多功能數(shù) </p><p> 字鐘的設計與仿真 </p><p> 專 業(yè) </p><p> 學生姓名 </p><p>
2、 班 級 </p><p> 學 號 </p><p> 指導教師 </p><p> 完成日期 </p><p><b> 摘 要</b></p><p> 時鐘,自
3、從它發(fā)明的那天起,就成為人類的朋友,但隨著時間的推移,科學技術的不斷發(fā)展,人們對時間計量的精度要求越來越高,應用越來越廣。怎樣讓時鐘更好的為人民服務,怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們不斷設計出新型的時鐘?,F(xiàn)今,高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英鐘都采用了石英技術,因此走時精度高,穩(wěn)定性好,使用方便,不需要經常調校,數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用LED 顯示器代替指針顯示進而顯示
4、時間,減小了計時誤差,這種表具有時、分、秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。本文利用單片機實現(xiàn)數(shù)字時鐘計時功能的主要內容,其中AT89C52 是核心元件,同時采用數(shù)碼管動態(tài)顯示“時”、“分”、“秒”的現(xiàn)代計時裝置。與傳統(tǒng)機械表相比,它具有走時精確、顯示直觀等特點。它的計時周期為24 小時,顯滿刻度為“23時59 分59秒”。</p><p><b> Abstract</b
5、></p><p> Clock, since it invented the day to become the friend of mankind, but as time goes on, science and technology The continuous development of the precision measurement of time people have become
6、increasingly demanding, more and more widely. How to make the clock better Serve the people, how to make our old friend rejuvenated it? This requires that people continue to design a new type of clock. </p><p&
7、gt; Today, the majority of high-precision timing tools are used in crystal oscillator, the electronic clock, quartz clock Have used quartz technology, so take the time and high precision, good stability, easy to use, do
8、es not require frequent calibration, digital </p><p> Time clock integrated circuit, the decoding instead of mechanical transmission, display with LED display instead of a pointer and then were Show time, r
9、educe the timing error, this table has hours, minutes and seconds time display function, also can be hours and minutes Proof-reading, the flexibility of a good chip select. In this paper, single chip digital clock timing
10、 function of the main elements, which </p><p> AT89C52 is a core component, while using digital dynamic display "when", "sub", "second" of the modern fashion dollars Home. Comp
11、ared with the traditional mechanical watch, it has the exact travel time, visual display and so on. Its time period is 24 hours, Full scale was "23:59:59."</p><p><b> 目 錄</b></p>
12、;<p><b> 摘 要I</b></p><p> AbstractII</p><p><b> 目 錄III</b></p><p><b> 第一章緒論1</b></p><p><b> 1.1設計目的1</b&
13、gt;</p><p><b> 1.2設計步驟1</b></p><p><b> 1.3設計指標1</b></p><p> 第二章總體方案2</p><p><b> 2.1摘要2</b></p><p> 2.2方案的選擇2
14、</p><p><b> 2.3方案比較3</b></p><p> 2.4方案二設計基本原理4</p><p> 第三章 硬件設計6</p><p> 3.1元器件選擇6</p><p> 3.2總設計連接圖11</p><p> 第四章軟件設計
15、12</p><p> 4.1主要流程圖及程序12</p><p> 4.2軟件的主要模塊16</p><p> 4.3總體流程圖17</p><p> 第五章 系統(tǒng)的調試18</p><p> 5.1調試主要思路、方法、步驟18</p><p> 5.2Keil調試2
16、1</p><p> 5.3Keil hex文件生成22</p><p><b> 致謝23</b></p><p><b> 總結心得24</b></p><p><b> 參考資料25</b></p><p><b>
17、 附錄ⅰ26</b></p><p><b> 電原理圖26</b></p><p><b> 仿真效果圖27</b></p><p><b> 源程序28</b></p><p><b> 第一章緒論</b></p&g
18、t;<p><b> 1.1設計目的</b></p><p> 1)鞏固和加強“模擬電子技術”,“數(shù)字電子技術”課程的理論知識;</p><p> 2)掌握電子電路一般的設計方法,并了解電子產品研制開發(fā)過程;</p><p> 3)基本掌握電子電路安裝和調試的方法;</p><p> 4)培養(yǎng)獨立
19、分析問題和解決問題的能力以及創(chuàng)新能力和創(chuàng)新思維。 分析問題和解決問題的能力以及創(chuàng)新能力和創(chuàng)新思維。</p><p><b> 1.2設計步驟</b></p><p> 1)分析題目,尋找相關資料;</p><p><b> 2)策劃設計方案;</b></p><p> 3)設計電路,編寫源程
20、序;</p><p> 4)對程序和原理進行仿真;</p><p> ?。?)在keil軟件中對源程序進行編譯,生成.hex文件;</p><p> ?。?)在proteus軟件中畫出電路圖,單片機中添加上一步的.hex文件;</p><p><b> ?。?)運行并調試;</b></p><p&g
21、t;<b> 1.3設計指標</b></p><p> 芯片:AT89C52</p><p> 按鍵:共四個key1~key4</p><p> 數(shù)碼顯示器:LED0-LED7共8個</p><p> key1:當key1鍵按下時處于停止狀態(tài),同時按key2實現(xiàn)秒加加,一次加一,再按一下key1就可以實現(xiàn)調分,
22、再按key2實現(xiàn)分加加,按第三次key1實現(xiàn)時加加。在按一下key1時間正常走動。key3可以實現(xiàn)鬧鐘調試 ,按一下整個界面跳為00-00-00,在按key2實現(xiàn)鬧鐘的秒加加,在按key3實現(xiàn)鬧鐘分調狀態(tài),按下key2實現(xiàn)分加加,在按下key2實現(xiàn)鬧鐘調時,key2鬧時加加,在按key3時鐘又到正常工作狀態(tài)。Key4實現(xiàn)打開鬧鐘的關閉模式。</p><p><b> 第二章總體方案</b&g
23、t;</p><p><b> 2.1摘要</b></p><p> 數(shù)字鐘是一種用數(shù)字電路技術實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命。已成為人們日常生活中不可缺少的必需品,已得人們到廣泛的使用。</p><p><b> 2.2方案的選擇</b><
24、/p><p><b> 1)時鐘模塊方案</b></p><p> 方案一: 用基本門電路來實現(xiàn)數(shù)字鐘</p><p> 一個基本的數(shù)字鐘電路主要由譯碼顯示器、“時”,“分”,“秒”計數(shù)器、校時電路、報時電路和振蕩器組成。干電路系統(tǒng)由秒信號發(fā)生器、“時、分、秒”計數(shù)器、譯碼器及顯示器、校時電路、整點報時電路組成。秒信號產生器是整個系統(tǒng)的時基信
25、號,它直接決定計時系統(tǒng)的精度,一般用石英晶體振蕩器加分頻器來實現(xiàn)。將標準秒信號送入“秒計數(shù)器”,“秒計數(shù)器”采用60進制計數(shù)器,每累計60秒發(fā)現(xiàn)胡一個“分脈沖”信號,該信號將作為“分計數(shù)器”的時鐘脈沖。“分計數(shù)器”也采用60進制計數(shù)器,每累計60分鐘,發(fā)出一個“時脈沖”信號,該信號將被送到“時計數(shù)器”?!皶r計數(shù)器”采用24進制計時器,可實現(xiàn)對一天24小時的累計。譯碼顯示電路將“時”、“分”、“秒”計數(shù)器的輸出狀態(tài)送入七段顯示譯碼器譯碼,
26、通過六位LED七段顯示器顯示出來。整點報時電路時根據(jù)計時系統(tǒng)的輸出狀態(tài)產生一脈沖信號,然后去觸發(fā)一音頻發(fā)生器實現(xiàn)報時。校時電路時用來對“時”、“分”、“秒”顯示數(shù)字進行校對調整的。</p><p> 方案二: 單片機編程 用軟硬件結合方式實現(xiàn)數(shù)字鐘</p><p> 基于單片機技術原理,以單片機芯片AT89C52作為核心控制器,通過硬件電路的制作以及軟件程序的編制,利用單片機的控制
27、作用通過LED數(shù)碼管直接顯示時、分、秒,并能對其分別進行甚至、修改。</p><p><b> 2.3方案比較</b></p><p> 方案一門電路搭建數(shù)字鐘:</p><p> 與機械化時鐘相比較具有較高的準確性。但相對于單片機略顯劣勢。</p><p> 門電路搭建較于偏向復雜,相對于第二種方案,故障系數(shù)大
28、大增大。不利于調試。</p><p> 多元化的電路搭建,硬件多,大大增加了材料的消耗,從而增加了生產的成本。</p><p> 古板的搭建,不適合小規(guī)模的改動,不利于調試與仿真。</p><p> 對于處于信息時代的我們,滿足不了人們多功能的需求。</p><p> 方案二軟硬件相結合的方式:</p><p>
29、; 集成度高,體積小、有較高的可靠性。單片機把各功能部件集成在一個芯片上,內部采用總體結構,減少了各芯片之間的連接,大大提高了單片機的可靠性與抗干擾能力。</p><p> 其體積小,對于強磁場環(huán)境易于采取屏蔽措施,適合在惡劣環(huán)境下工作。節(jié)約成本。</p><p> 控制功能強。為了滿足工業(yè)控制的要求,一般單片機的指令系統(tǒng)均有及其豐富的轉移指令、I/O口得邏輯操作以及處理功能。單片機
30、的邏輯控制功能及運行速度均高于同一檔次的微機。</p><p> 低功耗、低電壓,便于生產便攜式產品。</p><p> 通過軟件編程實現(xiàn),時間更加精準。便于調試。</p><p> 綜合方案一方案二優(yōu)缺點,方案一更適合設計要求,所以選擇方案一。</p><p> 2.4方案二設計基本原理</p><p>
31、基本設計基于單片機技術原理,以單片機芯片AT89C52作為核心控制器,通過硬件電路的制作以及軟件的編程,設計制作出一個多功能數(shù)字鐘系統(tǒng)。單片機擴展的LED數(shù)碼管用來顯示時、分、秒計數(shù)單元中的值。整個設計包括兩大部分:硬件部分和軟件部分,以單片機為核心,配以一定的外圍電路和軟件。硬件是整個系統(tǒng)的基礎,軟件部分則要合理、充分的支持和使用系統(tǒng)的硬件,從而完成系統(tǒng)所要完成的任務。</p><p> 該時鐘系統(tǒng)主要有主控
32、模塊、計時模塊、鍵盤控制模塊、顯示模塊組成。</p><p><b> 1)主控方案</b></p><p> 選用MCS-51系列主流芯片AT89C52,內部帶有8KB的Flash ROM,無需外擴程序存儲器。由于數(shù)字鐘沒有大量運算和暫存數(shù)據(jù),片內256 B的ROM可以滿足設計需求,無需外擴片外ROM。</p><p><b>
33、 此外考慮到以下情況</b></p><p> 開發(fā)方便,具有良好的開發(fā)工具、開發(fā)環(huán)境和軟硬件技術的支持。</p><p> 市場貨源(包括外部擴展器件)在較長時間內供應充足。 </p><p><b> 2)計時方案</b></p><p> (1)采用實時時鐘芯片。它的計時周期為24小時,顯示滿
34、刻度為23時59分59秒,另外有校時功能。秒信號產生器是整個系統(tǒng)的時基信號,它直接決定計時系統(tǒng)的精度,一般用石英晶體振蕩器加分頻器來實現(xiàn)。將標準秒信號送入“秒計數(shù)器”,“秒計數(shù)器”采用60進制計數(shù)器,每累計60秒發(fā)出一個“分脈沖”信號,該信號將作為“分計數(shù)器”的時鐘脈沖?!胺钟嫈?shù)器”也采用60進制計數(shù)器,每累計60分鐘,發(fā)出一個“時脈沖”信號,該信號將被送到“時計數(shù)器”。“時計數(shù)器”采用24進制計時器,可實現(xiàn)對一天24小時的累計。
35、</p><p> ?。?)軟件控制。利用AT89C51內部計數(shù)器進行中斷定時,配合軟件延時實現(xiàn)時、分、秒的計時。</p><p><b> 3) 按鍵方案</b></p><p> 采用獨立式按鍵電路每個鍵單獨占有一根I/O接口線,每個I/O口的工作狀態(tài)互不影響,此類鍵盤采用端口直接掃描方式。但是當按鍵較多時占用單片機的I/O數(shù)目較多。&
36、lt;/p><p><b> 4) 顯示方案</b></p><p> 利用單片機并行端口I/O端口,實現(xiàn)多個數(shù)碼管LED顯示。LED數(shù)碼管是利用二極管發(fā)光顯示數(shù)字和字母,具有亮度大、接口設計比較容易,價格相對較便宜等優(yōu)點。該方案直接使用單片機并行口作為顯示接口,無須外擴接口芯片,但占用資源較多,且動態(tài)顯示方式需占用CPU時間。在非實時測控或單片機具有足夠并行口資源的
37、情況下可以采用。</p><p><b> 5)總體控制方案</b></p><p> 按鍵:共四個key1~key4</p><p> 當key1鍵按下時處于停止狀態(tài),同時按key2實現(xiàn)秒加加,一次加一,再按一下key1就可以實現(xiàn)調分,再按key2實現(xiàn)分加加,按第三次key1實現(xiàn)時加加。在按一下key1時間正常走動。key3可以實現(xiàn)鬧
38、鐘調試 ,按一下整個界面跳為00-00-00,在按key2實現(xiàn)鬧鐘的秒加加,在按key3實現(xiàn)鬧鐘分調狀態(tài),按下key2實現(xiàn)分加加,在按下key2實現(xiàn)鬧鐘調時,key2鬧時加加,在按key3時鐘又到正常工作狀態(tài)。Key4實現(xiàn)打開鬧鐘的關閉模式。</p><p> 6)系統(tǒng)所能實現(xiàn)的功能</p><p> 時間為24小時一個周期</p><p> 7段數(shù)碼管顯示時
39、、分、秒。</p><p> 有校時功能,可以分別對時及分及秒進行單獨校時,使其校正到標準時間。</p><p> 可調鬧,整點報時功能。</p><p><b> 第三章 硬件設計</b></p><p><b> 3.1元器件選擇</b></p><p> 1)
40、單片機AT89C52</p><p> AT89C52是一個低電壓,高性能CMOS 8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統(tǒng),片內置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業(yè)中有著廣泛的應用。</p>&l
41、t;p> AT89C52的芯片有四個IO口,分別是P0 ,P1, P2, P3。P0口:P0 口是開漏雙向口可以寫為1 使其狀態(tài)為懸浮用作高阻輸入P0 也可以在訪問外部程序存儲器時作地址的低字節(jié)在訪問外部數(shù)據(jù)儲器時作數(shù)據(jù)總線此時通過內部強上拉輸出1。因為p0口沒有上拉電阻,所以外接的時候要接上拉電阻。</p><p> P1與P2口:兩個口的功能差不多,都是IO口。</p><p&g
42、t; P3口:P3口有第二功能,第一功能和P2口一樣有IO輸入輸出的功能第二功能為</p><p> RxD(p3.0) 串行輸入口</p><p> TxD(P3.1) 串行輸出口</p><p> INT0(P3.2) 外部中斷0</p><p> INT1(P3.3) 外部中斷</p><p> T0
43、(P3.4) 定時器0 外部輸入</p><p> T1(P3.5) 定時器1 外部輸入</p><p> WR(P3.6) 外部數(shù)據(jù)存儲器寫信號</p><p> RD(P3.7) 外部數(shù)據(jù)存儲器讀信號</p><p> 這就是P3口的第二功能敘述。</p><p> XTAL1與XTAL2的功能:分別是晶
44、振的輸入與輸出。</p><p> REST:復位 當晶振在運行中只要復位管腳出現(xiàn)2 個機器周期高電平即可復位內部有擴散電阻連接到Vss 僅需要外接一個電容到Vcc 即可實現(xiàn)上電復位。</p><p> 89c52還具有定時、計數(shù)的功能。我這里主要用到定時功能所以我先介紹一下定時功能。定時有兩種狀態(tài),定時器0、定時器1。</p><p> AT89C52 共有
45、6個中斷向量:兩個外中斷(INT0 和INT1),3個定時器中斷(定時器0、1、2)和串行口中斷。所有這些中斷源可通過分別設置專用寄存器IE 的置位或清0來控制每一個中斷的允許或禁止。IE 也有一個總禁止位EA,它能控制所有中斷的允許或禁止。程序員不應將“1”寫入這些位,它們是將來AT89 系 列產品作為擴展用的。 定時器2 的中斷是由T2CON 中的TF2 和EXF2 邏輯或產生的,當轉向中斷服務程序時,這些標志位不能被硬件清
46、除,事實上,服務程序需確定是TF2 或EXF2 產生中斷,而由軟件清除中斷標志位。定時器0和定時器1的標志位TF0和TF1在定時器溢出那個機器周期的S5P2狀態(tài)置位,而會在下一個機器周期才查詢到該中斷標志。然而,定時器2的標志位TF2在定時器溢出的那個機器周期的S2P2 狀態(tài)置位,并在同一個機器周期內查詢到該標志。</p><p> 2)7段led數(shù)碼管</p><p> 下圖為7段l
47、ed數(shù)碼管的共陽的,位碼接高電平,段碼接低電平是后亮,多位七段LED數(shù)碼顯示器結構 利用人的視覺延遲的特點,采用掃描的方式驅動多位七段LED數(shù)碼管,節(jié)省驅動電路,降低功耗。 保證一定的掃描循環(huán)。</p><p><b> LED數(shù)碼管驅動:</b></p><p> LED數(shù)碼管要正常顯示,就要用驅動電路來驅動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字,因此根據(jù)LE
48、D數(shù)碼管的驅動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。 </p><p><b> 靜態(tài)顯示驅動</b></p><p> 靜態(tài)驅動也稱直流驅動。靜態(tài)驅動是指每個數(shù)碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態(tài)驅動的優(yōu)點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅動5個數(shù)碼管靜態(tài)顯示則需要5
49、5;8=40根I/O端口來驅動,要知道一個89S51單片機可用的I/O端口才32個呢:),實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。 </p><p><b> 動態(tài)顯示驅動</b></p><p> LED數(shù)碼管動態(tài)顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態(tài)驅動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,d
50、p"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅動。在輪流顯示過程中,每位數(shù)碼
51、管的點亮時間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應,盡管實際上各位數(shù)碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。</p><p> 3) 74LS245驅動</p><p> 74LS245是我們常用的芯片,用來驅動led或者其他的設備,它是8路同相
52、三態(tài)雙向總線收發(fā)器,可雙向傳輸數(shù)據(jù)。</p><p> 74LS245還具有雙向三態(tài)功能,既可以輸出,也可以輸入數(shù)據(jù)。</p><p> 當8051單片機的P0口總線負載達到或超過P0最大負載能力時,必須接入74LS245等總線驅動器。</p><p> 當片選端/CE低電平有效時,DIR=“0”,信號由 B 向 A 傳輸;(接收)</p>&l
53、t;p> DIR=“1”,信號由 A 向 B 傳輸;(發(fā)送)當/CE為高電平時,A、B均為高阻態(tài)。</p><p> 由于P2口始終輸出地址的高8位,接口時74LS245的三態(tài)控制端/1G和/2G接地,P2口與驅動器輸入線對應相連。P0口與74LS245輸入端相連,/E端接地,保證數(shù)據(jù)現(xiàn)暢通。8051的/RD和/PSEN相與后接DIR,使得/RD或/PSEN有效時,74LS245輸入(P0.i←Di),
54、其它時間處于輸出(P0.i→Di)。</p><p><b> 4)蜂鳴器</b></p><p> 由于單片機的IO驅動能力有限(10MA左右),所以若是直接將蜂鳴器接至單片機的IO,上電以后很會將單片機的IO燒壞。所以一般都是通過三極管的放大作用來控制。電阻R4的作用是限流,使通過單片機的IO電流不至于過大而燒壞單片機。三極管的作用是放大,圖中所示的是PNP型
55、三極管。為什么用PNP而不是用NPN型。因為51單片機在上電的時候IO引腳默認是高電平,而在IO為高情況下,PNP三極管8550的不導通的,也就是蜂鳴器不工作。若是三極管是NPN型,在IO為高電平的時候上電蜂鳴器即工作,也就是說實驗板一上電,蜂鳴器就會發(fā)出聲音,這將是非常不方便的。</p><p><b> 5)限流電阻</b></p><p> 因為89C51芯
56、片的p0口里面少個上拉電阻,所以要加一個,因為7段數(shù)碼管的一般電流約10ma左右,vcc為5V,段碼的所承受的電壓為1.7V左右所以。5-1.7=3.3V左右,3.3/10ma=330所以上拉電阻就接一個大約330左右的電阻了。</p><p><b> 6)微動開關</b></p><p> 開關這里設計的要在程序中設計一個去抖的延時程序,已達到不要硬件去抖的效
57、果,如果要接硬件的話接一個RS觸發(fā)器,它是由兩個與非門交叉耦合而成,S和R是信號的輸入端,低電平有效,Q和Q既表示觸發(fā)器的狀態(tài),又是觸發(fā)器的輸出端。</p><p> 在啟動過程中,S端一旦下降到開門平,Q端電平就會上升,反饋到門B的輸入端,促使B由截止轉向導通,Q端的電平下降,反饋到門A的輸入端,進一步促使門A截止,Q端電平進一步上升,Q端電平上升的結果又會使Q的電平進一步下降,這樣的過程,是的門A很快截止、
58、門B很快導通,觸發(fā)器在極短的時間內完成由截止到導通的轉換。通過R段的復位時也有類似的正反饋過程發(fā)生,從而完成按鍵開關的消抖功能。</p><p><b> 3.2總設計連接圖</b></p><p><b> 第四章軟件設計</b></p><p> 4.1主要流程圖及程序</p><p>
59、<b> 軟件設計方案</b></p><p> 軟件采用模塊化設計,在程序中以一個主函數(shù),多個子函數(shù)的方式編寫,這樣多有利程序的可讀、可移植等。</p><p><b> 函數(shù)共包含:</b></p><p><b> 1.主函數(shù);</b></p><p><b
60、> 2.鬧鐘對比函數(shù);</b></p><p> 3.秒、分、時加1函數(shù);</p><p><b> 4.緩沖函數(shù);</b></p><p><b> 5.顯示掃描函數(shù);</b></p><p><b> 6.鬧鈴函數(shù);</b></p>
61、<p> 7.時分秒刷新函數(shù);</p><p> 8.時、分、秒緩沖函數(shù)。</p><p> 在軟件設計中有部分程序代碼是非常重要的,對一些非常重要的程序代碼必須要很深刻和很深入的理解。</p><p><b> 重要點:</b></p><p> 1秒的產生,在數(shù)字鐘里面,主要功能是計時,所以1秒
62、的產生是最重要的。單片機要產生計時有兩種方法,一種是利用軟件延時,還有一種是利用定時器來硬件計時,但是在一個項目設計里面很顯然利用軟件延時是不現(xiàn)實的,單片機在利用軟件延時時,CPU會一直工作在延時代碼上面,無法對其他代碼運行,而利用定時器計時時,單片機的CPU仍可以去處理其他代碼,只需要在計時時間到后去處理產生的相應中斷的代碼。所以在這個項目設計中采用定時器計時,單片機中要利用定時器必須要對定時器進行設置,其中TMOD寄存器就是用于對定
63、時器設置的,TMOD是8位特殊寄存器,單片機共有兩個定時器,分別是T1、T0,TMOD</p><p> 中高4位是設置T1,低4位是設置T0用的,在這里使用T0定時器,在TMOD低4位的低2位是設置定時器工作方式的,定時器有4中計時方式,這里使用方式1,所以設置低兩位是【0,1】,16位計數(shù),最大計數(shù)值是2的16次方65536個機器周期,在一個機器周期1us即12Mhz晶振下對定時器設置初值為15536,定時
64、器產生一次中斷的計時時間是65536-15536=50000us=50ms,這樣要產生一秒就需要定時器中斷20次,所以在程序中設置一個秒標志位cout,cout在定時器中斷中進行自增1操作,最終對秒標志cout判斷,達到20即已達到1秒。定時器0中斷函數(shù)如下:</p><p> void dingshiqi0()interrupt 1//定時器0程序</p><p><b>
65、; {</b></p><p><b> TH0=0x3c;</b></p><p><b> TL0=0xb0;</b></p><p><b> cout++;</b></p><p><b> }</b></p>
66、;<p><b> 1)主函數(shù)</b></p><p> 用單片機掃描鍵值。若無鍵值輸入,不做任何處理繼續(xù)掃描。若有鍵值輸入則掃描到鍵值并取鍵值送往單片機,并復位鍵值。有單片機內部程序來進行相應的操作。最后送往數(shù)碼管顯示。</p><p><b> 2)鍵盤測試</b></p><p><b>
67、; 原理:</b></p><p> 在某一時刻只讓一條列線處于低電平,其余列線均處于高電平,則當這一列有鍵按下時,該鍵所在的行電平將會由高電平變?yōu)榈碗娖剑膳卸ㄔ摿邢鄳男杏墟I按下。</p><p><b> 流程:</b></p><p> 當?shù)?列處于低電平時,逐行查找是否有行線變低,若有,則第0列與該行的交叉點按鍵按
68、下;若無,則表示第0列無鍵按下,再讓下一列處在低電平,依此循環(huán),這種方式稱為鍵盤掃描。 </p><p><b> 鍵盤掃描過程:</b></p><p> 1)判別有無按鍵按下;</p><p><b> 2)掃描鍵值;</b></p><p><b> 3)取鍵值;</b
69、></p><p><b> 4)動態(tài)顯示;</b></p><p> unsigned char test(void) //鍵盤測試</p><p><b> {</b></p><p> unsigned char k;</p><p><b>
70、 P3=0XFF;</b></p><p><b> k=P3;</b></p><p><b> k=~k;</b></p><p><b> return k;</b></p><p><b> }</b></p>
71、<p> unsigned char smiao(void)//鍵盤掃描</p><p><b> {</b></p><p> unsigned char k,i;</p><p> if(test())</p><p><b> {</b></p><p&
72、gt;<b> i=5;</b></p><p> while(i--)</p><p> display();</p><p> if(k=test()) </p><p><b> { </b></p><p> while(test())</
73、p><p> display();</p><p><b> return k;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b><
74、/p><p><b> }</b></p><p><b> 3)動態(tài)顯示</b></p><p> 工作原理:從P0口送段代碼,P1口送位選信號。段碼雖同時到達 8個LED,但一次僅一個LED被選中。利用“視覺暫留”,每送一個字符并選中相應位線,延時一會兒,再送/選下一個……循環(huán)掃描即可。</p><
75、;p> void display() //動態(tài)顯示</p><p><b> {</b></p><p> unsigned char b=0x80,i,t;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p>&
76、lt;p> t=time[i];</p><p> P0=seg[t];</p><p><b> P1=b;</b></p><p> b=_cror_(b,1);</p><p><b> yanshi();</b></p><p><b>
77、P1=0x00;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 4)時分秒刷新</b></p><p> 時、分、秒刷新子函數(shù)功能:對于時間的累加,在計時過程中時間總是在不斷疊加的,所以在單片機
78、上電運行,定時器開始計數(shù)后,就要對秒標志定期的判斷,如果秒標志cout達到20了,那么就如在,4.1節(jié)中描述的那樣,1秒的時間到了,必須對秒數(shù)據(jù)增加1了,秒數(shù)據(jù)增加后還要考慮到秒數(shù)據(jù)本身是否已到60,如果達到60就是1分了,秒必須清0,分需要加1,同樣分和時也要判斷。</p><p> 可以看到流程圖,程序一開始就是對秒標志進行判斷是否達到20,沒有達到那么什么也不用做就返回了,達到20,則1秒已到,判斷是否處
79、于調時狀態(tài),處于調試時狀態(tài)的話那么在秒表志清0后還要判斷是否目前有鍵按下,有鍵按下必須對按鍵長按標志加1,然后就可以返回了。如果在上面判斷時不處于調時狀態(tài)那么秒清0后也是判斷是否有按鍵按下,如果有鍵按下那么長按標志加1,接著就是看秒是否已到60,不到60就可以反回了,到60就把秒清0,分加1,接著看分是否到60,不到就可以返回了,到60就分清0,時加1,如果時到24了那么時清0就返回,時不到24就直接返回。</p><
80、;p> 4.2軟件的主要模塊</p><p> unsigned char test(void);鍵盤測試</p><p> unsigned char smiao(void);鍵盤掃描</p><p> void display();動態(tài)顯示void delay();延時</p><p> void mi
81、aojj(void);秒+1</p><p> void minadd(void);分+1</p><p> void shijj(void); 時+1</p><p> void change(void);緩沖區(qū)</p><p> void mchange(void);秒緩沖區(qū) </p>
82、;<p> void fchange(void);分緩沖區(qū)</p><p> void schange(void);時緩沖區(qū)</p><p><b> 4.3總體流程圖</b></p><p><b> 第五章 系統(tǒng)的調試</b></p><p> 5.1調試
83、主要思路、方法、步驟</p><p> 調試所用的工具為軟件keil,protuce。具體步驟如下:</p><p> 我寫好程序然后調試、比如寫一段延時程序。</p><p> 例如:void delay()</p><p><b> {</b></p><p> unsigned
84、 int a,b;</p><p> for(a=0;a<500;a++)</p><p> for(b=0;b<500;b++);</p><p><b> }</b></p><p> 這一段程序就是延時0.74s。當我把這段程序寫在keil里進行調試的時候,然后運行看有沒有錯誤,然后點擊star
85、t按鈕,開始設置中斷的點我設置在最后的括號里,然后運行看左邊的時間結果sec為0.74999約為0.74s。</p><p> 動態(tài)顯示的調試,就是單寫一個動態(tài)顯示的程序,我寫了的是秒到六十清零的程序如下:</p><p> #include<REG52.H></p><p> const unsigned char seg[10]={0xC0,0
86、xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};</p><p> unsigned char cout=0,sec=0,time[6]={0};</p><p> void display();</p><p> void delay();</p><p> void display()&l
87、t;/p><p><b> {</b></p><p> unsigned char b=0x20,t,i;</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> t=time[i]; </p&
88、gt;<p> P0=seg[t];</p><p><b> P2=b;</b></p><p><b> b=b>>1;</b></p><p><b> delay();</b></p><p><b> P2=0x00;&l
89、t;/b></p><p><b> }</b></p><p><b> }</b></p><p> void delay()</p><p><b> {</b></p><p> unsigned char i=250;</
90、p><p> while(i--);</p><p><b> }</b></p><p><b> main()</b></p><p><b> {</b></p><p> TMOD=0X01;</p><p><
91、;b> TH0=0X3C;</b></p><p><b> TL0=0XB0;</b></p><p><b> ET0=1;</b></p><p><b> EA=1;</b></p><p><b> TR0=1;</b>
92、;</p><p><b> while(1)</b></p><p> display();</p><p><b> } </b></p><p> void at0() interrupt 1 </p><p><b> {</b><
93、;/p><p><b> TH0=0X3C;</b></p><p><b> TL0=0XB0;</b></p><p><b> cout++;</b></p><p> if(cout==20)</p><p><b> {<
94、/b></p><p><b> cout=0;</b></p><p><b> sec++;</b></p><p> if(sec==60)</p><p><b> {</b></p><p><b> sec=0;&l
95、t;/b></p><p><b> } </b></p><p> time[0]=sec/10;</p><p> time[1]=sec%10;</p><p><b> }</b></p><p><b> }</b><
96、/p><p> 這段程序寫好后進行調試,在keil里面運行進行聯(lián)機調試,先在protuce里面選擇好debug里面的use remote use monitor這個按鈕打勾,然后進行聯(lián)機調試,到keil里面選擇option for target‘target’。選擇里面的debug,use的protuce VSM simulator,然后點擊ok。點完后再看那個protuce仿真的效果,點擊start,run全速
97、運行。方法如下圖:</p><p> 總體調試效果如下圖所示:</p><p><b> 動態(tài)效果調試如下圖</b></p><p><b> 5.2Keil調試</b></p><p> 將寫好程序調試,找出菜單中的project/built target然后看沒有錯誤繼續(xù)找菜單中的pro
98、jcet/rebuilt all target files</p><p> 5.3Keil hex文件生成</p><p> 找菜單中的project/option for target’target1’這個按鈕點擊出來如下圖所示的選擇output將create HEX file前面的小框打鉤然后確認,點擊projcet/rebuilt all target files將生成hex
99、文件。最后在protuce中調試用到。</p><p><b> 致謝</b></p><p> 在這里我最先感謝是組長,在從第一步開始到最后結束,我遇到了很多問題,問題都無法預測的出現(xiàn),讓我錯手不急,但是在他耐心的指導與辛勤的幫助下,讓我懂得了如何看待問題,如何分析問題原因,如何理清思路去解決問題。在這些前提下,我慢慢的找到的感覺,慢慢的懂得如何自己解決問題,
100、通過最終的努力,我解決了所遇到的種種困難。在這個遇到問題,解決問題反反復復的過程中,讓我學到了很多,讓我進一步的把為掌握的知識系統(tǒng)化,所遇到的問題理論化。這次畢業(yè)設計中他給予我很大的幫助,讓我不斷成長,非常感謝他。</p><p> 還有要感謝的就是我的同組成員,每次我完成進度之后,他過目總能找到我疏漏的地方,這讓我所做的設計更加的嚴謹,更加的完善。</p><p> 通過這次的設計使
101、我認識到我對單片機方面的知識知道的太少了。</p><p> 對于書本上的很多知識還不能靈活運用,有很多我們需要掌握的知識在等著我去學習,我會在以后的學習生活中彌補我所缺少的知識。本次的設計使我從中學到了一些很重要的東西,理論知識固然很重要,但是一旦轉到實際操作中,變的無法適應用突然.所以最重要的那就是如何從理論到實踐的轉化,怎樣將我所學到的知識運用到我以后的工作中去。讓理論知識變?yōu)閷嵺`的開拓先鋒.</p
102、><p> 在大學的課堂的學習只是在給我們灌輸專業(yè)知識,而我們應把所學的用到我們現(xiàn)實的生活中去,讓理論知識服務于我的實際操作,此次的電子時鐘設計給我奠定了一個實踐基礎,我會在以后的學習、生活、實踐中鍛煉自己的動手能力,使自己的創(chuàng)造力不斷得以實現(xiàn)。</p><p> 沒有做不到,只有想不到!只要專心于設計,慢慢的滲透,了解,加深。最終便能完成看似完不成的事情。在付諸一切努力之后,所看到的成果
103、顯而易見。一種莫名的成就感悠然而來。</p><p><b> 總結心得</b></p><p> 通過這次課程設計,加強了我們動手、思考和解決問題的能力。在整個設計過程中,我們通過這個方案包括了一套電路原理和PCB連接圖,和芯片的選擇。</p><p> 我沉得做課程設計同時也是對課本知識的鞏固和加強,由于課本上的知識太多,平時課間的學
104、習并不能很好的理解和運用各個元件的功能,而且考試內容有限,所以在這次課程設計過程中,我們了解了很多元件的功能,并且對于其在電路中的使用有了更多的認識。</p><p> 平時看課本時,有時問題老是弄不懂,遇到問題都感覺很陌生,無從下手,但是通過這個課程設計,很多問題問題都迎刃而解了。而且還可以記住很多東西,比如一些芯片的功能,平時看課本,這次看了,下次就忘了,通過動手實踐讓我們對各個元件映象深刻,并能深入的了解
105、它們的功能。這個設計讓我懂得:認識來源于實踐,實踐是認識的動力和最終目的,實踐是檢驗真理的唯一標準。所以這個期末測試之后的課程設計對我們的作用是非常大的。</p><p> 經過設計程序和調試成功,過程曲折可謂一語難盡。在此期間我們也失落過,也曾一度熱情高漲。從開始時滿富盛激情到最后汗水背后的復雜心情,點點滴滴無不令我回味無長,在我人生的旅途上留下了美好的回憶。</p><p> 這次
106、獨立的設計之后,讓我懂得一件事情,沒有人天生什么都懂。也沒有人做事情總是一番風順。然而,只有那些堅持不懈,精心求解的人,才能不斷的進步,不斷的完善自我。沒有汗水的澆蓋,就沒有欣慰的淚水。一分耕耘,一分收獲。很多時候,遇到問題,我們要自信,相信自己能,有了自信心才會有用不完的動力,自信心才是力量的源泉。</p><p> 相信自己,我相信我也能!</p><p><b> 參考
107、資料</b></p><p> [1].張永楓 單片機應用實訓教程[M].清華大學出版社,2008年12月;</p><p> [2].劉守義 單片機應用技術第二版[M].西安大學出版社,2007.1;</p><p> [3].李光飛 ,李良兒.樓然苗單片機C程序設計實例指導[M].北京航空航天大學出版社,2006;</p><
108、;p> [4].李華.MCS-51系列單片機實用接口技術[M].北京航空航天大學,1993;</p><p> [5].薛永毅,王淑英 何希才.新型電源電路應用實例[M].北京: 電子工業(yè)出版社,2001;</p><p> [6].樓然苗 ,李光飛.51系列單片機設計實例[M].北京:航空航天大學出版社,2006;</p><p> [7].趙繼文.
109、傳感器與應用電路設計[M].北京科學出版社,2002;</p><p><b> 附錄ⅰ</b></p><p><b> 電原理圖</b></p><p><b> 仿真效果圖</b></p><p><b> 源程序</b></p>
110、<p> #include<REG51.H></p><p> #include<intrins.h></p><p> #define key1 0x01</p><p> #define key2 0x02</p><p> #define key3 0x04</p><
111、p> #define key4 0x08</p><p> const unsigned char seg[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xff};</p><p> unsigned char fen=59,miao=50,shi=23,cout=0,naom=0,naof=0,na
112、os=0,time[8]={0,0,10,0,0,10,0,0};//秒變量,顯示緩沖</p><p> //bit flag=0;</p><p> bit Cflag=0,Aflag=0,alarm=0;//工作/調時標志,工作/調鬧標志,鬧有效標志</p><p> sbit spk=P2^0;//蜂鳴器</p><p> un
113、signed char test(void);</p><p> unsigned char smiao(void);</p><p> void display(void);</p><p> void yanshi(void);</p><p> void change(void);</p><p> v
114、oid mchange();</p><p> void fchange(); </p><p> void schange();</p><p> void naomc();</p><p> void naofc();</p><p> void naosc();</p><p&
115、gt; void shijj();</p><p> void miaojj();</p><p> void fenjj();</p><p> void alarmspk(bit flag);//鬧鐘控制</p><p> unsigned char comp();//鬧時比較</p><p> voi
116、d naoh();</p><p> void yanshi()</p><p><b> {</b></p><p> unsigned char p=250;</p><p> while(p--);</p><p><b> }</b></p>
117、<p><b> void on()</b></p><p><b> {</b></p><p> time[2]=10;</p><p> time[5]=10;</p><p><b> }</b></p><p> void
118、 off()</p><p><b> {</b></p><p> time[2]=11;</p><p> time[5]=11;</p><p><b> }</b></p><p> void display()</p><p>&l
119、t;b> {</b></p><p> unsigned char b=0x80,i,t;</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> t=time[i]; </p><p> P0=s
120、eg[t];</p><p><b> P1=b;</b></p><p> b=_cror_(b,1);</p><p><b> yanshi();</b></p><p><b> P1=0x00;</b></p><p><b>
121、; }</b></p><p><b> }</b></p><p> main() //主函數(shù)</p><p><b> {</b></p><p> unsigned char t,work=0;</p><p> TMOD=0X0
122、1;</p><p><b> TH0=0X3C;</b></p><p><b> TL0=0XB0;</b></p><p><b> TR0=1;</b></p><p><b> ET0=1;</b></p><p>
123、;<b> EA=1;</b></p><p><b> while(1)</b></p><p><b> { </b></p><p> display();</p><p> t=smiao();</p><p><b> i
124、f(alarm)</b></p><p> {if(comp())alarmspk(1);}</p><p> //t=smiao();</p><p><b> switch(t)</b></p><p><b> {</b></p><p> cas
125、e key1:if(!Aflag)</p><p> if(work==0)</p><p><b> {</b></p><p><b> Cflag=1;</b></p><p><b> ET0=0;</b></p><p><b&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89c52單片機和led的數(shù)字鐘
- 多功能數(shù)字鐘畢業(yè)設計
- 基于at89s52的多功能數(shù)字鐘畢業(yè)論文
- 基于at89s52的智能數(shù)字鐘畢業(yè)設計
- 畢業(yè)設計---多功能遙控數(shù)字鐘的設計
- 畢業(yè)設計----基于 vhdl語言的多功能數(shù)字鐘設計
- 畢業(yè)設計---基于at89c52單片機的數(shù)字時鐘設計
- 數(shù)字電路多功能數(shù)字鐘畢業(yè)設計
- 畢業(yè)設計 多功能數(shù)字鐘電路設計
- 畢業(yè)設計論文—多功能數(shù)字鐘的設計論文
- 基于eda的多功能數(shù)字鐘電路設計畢業(yè)設計
- 畢業(yè)設計 多功能數(shù)字鐘電路設計 (2)
- 數(shù)字鐘課程設計---多功能數(shù)字鐘的設計與制作
- 基于fpga多功能數(shù)字鐘設計
- 電子時鐘畢業(yè)設計--多功能數(shù)字鐘設計
- 基于quartus的多功能數(shù)字鐘設計
- 畢業(yè)設計--基于at89c52單片機的數(shù)字溫度計設計
- 基于at89c51單片機的數(shù)字鐘設計畢業(yè)設計
- 課程設計----多功能數(shù)字鐘的設計仿真與制作
- 課程設計---多功能數(shù)字鐘的設計仿真與制作
評論
0/150
提交評論