版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目 錄</b></p><p> 1、目的………............................................................................................2</p><p> 2、課題內容…………….…..…………………………………………….2</p&
2、gt;<p> 3、課題分析………………………………………………………………2</p><p> 4、硬件電路設計原理……………………………………………………3</p><p> 5、總體系統(tǒng)框圖…………………………………………………………4</p><p> 6、方案設計討論及元件選取依據(jù)………………………………………5</p>
3、<p> 7、軟件設計依據(jù)與分析………………………….....................................9</p><p> 8、附錄…………………………………………………………………..12</p><p> 9、附錄一 設計總結與體會…………………………………………....12</p><p> 10、附錄二 元器件清單
4、………………………………………………..13</p><p> 11、附錄三 系統(tǒng)調試記錄........................................................................14</p><p> 12、附錄四 參考文獻......................................................
5、..........................21</p><p> 13、附錄五 整機電路圖............................................................................23</p><p> 14、附錄六 源程序清單............................................
6、................................24</p><p> 多功能數(shù)字電子表設計報告</p><p><b> 一、目的</b></p><p> 1、 使學生將所學的“數(shù)字電子技術”和“單片機原理”等相關知識應用于實踐。培養(yǎng)學生理論聯(lián)系實際的工作作風,提高學生的動手能力。</p><p&g
7、t; 2、 學會用“計算機輔助分析設計軟件”對該題目進行分析、設計與仿真,并打印出仿真結果,提高學生對計算機的應用水平。</p><p> 3.、掌握電路的焊接、安裝、調試技術,培養(yǎng)學生的工程意識,提高學生分析并解決實際問題的能力,激發(fā)學生對產品開發(fā)的興趣,培養(yǎng)學生的科技創(chuàng)新精神。</p><p><b> 二、課題內容</b></p><p
8、> 設計并制作符合以下要求的“多功能數(shù)字電子表”,并撰寫分析設計報告。</p><p><b> 基本要求:</b></p><p> (1)、計時功能:顯示時、分、秒;</p><p><b> ?。?)、定鬧功能;</b></p><p><b> ?。?)、秒表功能;&l
9、t;/b></p><p> ?。?)、倒計時功能。</p><p><b> 2、提高要求:</b></p><p> ?。?)、增加“語音報時”功能;</p><p> ?。?)、增加“電子日歷”功能。</p><p><b> 3、主要技術指標</b><
10、/p><p> 1、計時精度:±2秒/月;</p><p> 2、功能設置按鍵不得多于3個。</p><p><b> 三、課題分析</b></p><p> 在進行課題設計前,我們應該確定一些基本的設計原則,然后再根據(jù)這些原則去尋找思路。在設計系統(tǒng)時,我們主要考慮以下一些原則:節(jié)約元器件,盡量降低系統(tǒng)實現(xiàn)
11、的成本;硬件電路盡量簡單,使得硬件實現(xiàn)、問題檢查、軟件編程以及系統(tǒng)調試的難度都降低;能在軟件上實現(xiàn)的,不采取軟件實現(xiàn),使芯片利用率盡可能高;軟件設計方案要優(yōu)化,使得編程盡可能簡單,方便仿真與測試;設計方案要和當前的試驗平臺相應;充分利用各種資料,盡量采用成熟與經典的電路。</p><p> 要實現(xiàn)一個系統(tǒng),先要明確該系統(tǒng)的功能和要求。設計的系統(tǒng)必須要能實現(xiàn)基本的功能,再考慮實現(xiàn)其他的功能。為了取得比較好的實踐成
12、績,我們必須實現(xiàn)課程設計的提高要求。我們可以從老師給出來的兩個提高方案種選一個或兩個都選,也可以自己擬定一個方案。首先考慮“語音報時”。由于語音報時要用到語音芯片,使用語音芯片后,系統(tǒng)的電路復雜性增加,不僅在電路設計和硬件電路實現(xiàn)方面難度加大,而且系統(tǒng)調試的難度也加大。因而,經過綜合考慮,我們決定選擇僅通過蜂鳴器來實現(xiàn)報時功能。再考慮“電子日歷”。由于電子表顯示時分秒需要六位數(shù)碼管,日歷顯示的年月日也可以采用六位顯示,而且日歷設計在數(shù)學
13、原理上和鐘表設計一樣。因而,可以在不增加硬件的條件下實現(xiàn)“電子日歷”,而系統(tǒng)的功能按鍵少,必然增加了軟件實現(xiàn)的難度;從另外一方面看,這相當于提高了硬件的利用率。為了鍛煉自己,我們決定選擇實現(xiàn)“電子日歷”功能。其次,從日常生活中所使用的電子表來看,我們還可以嘗試實現(xiàn)“星期”功能,考慮到自身知識積累與時間限制,不選擇實現(xiàn)該功能。綜上所述,我們要設計的電子表,其所能實現(xiàn)的功能為:計時、鬧鐘、秒表、倒計時、報時與日歷。</p>&
14、lt;p> 四、硬件電路設計原理</p><p> 多功能電子表的實現(xiàn)方式有多種,從軟件和硬件的角度來看,可以分成硬件實現(xiàn)方式與軟硬件結合的實現(xiàn)方式。本次課程設計是基于單片機的設計,因而是軟硬件結合的實現(xiàn)方式。軟硬件結合的實現(xiàn)方式比硬件實現(xiàn)方式更具有優(yōu)點。</p><p> 從電子表的用戶角度來看,一個電子表可劃分為三個部分:用戶面對的顯示界面;用戶切換電子表各種功能的按鍵;用
15、戶無需關心的電子表內部控制部分。從這三方面我們可以綜合出本次實踐所需要設計的系統(tǒng)的框圖,如圖1所示。</p><p> 電子表的關鍵秒信號的產生與秒計數(shù),利用單片機內部的定時器和計數(shù)器,無需外加日歷芯片,即可以實現(xiàn)所要求的各種功能。經過綜合考慮,我們選擇AT89C52單片機來設計系統(tǒng)。</p><p> AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROM—Flash Prog
16、rammable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。其主要特點有:</p>&
17、lt;p> ·與MCS-51 兼容 </p><p> ·4K字節(jié)可編程FLASH存儲器</p><p> ·壽命:1000寫/擦循環(huán)</p><p> ·數(shù)據(jù)保留時間:10年</p><p> ·全靜態(tài)工作:0Hz-24MHz</p><p> &
18、#183;三級程序存儲器鎖定</p><p> ·128×8位內部RAM</p><p> ·32可編程I/O線</p><p> ·兩個16位定時器/計數(shù)器</p><p><b> ·5個中斷源</b></p><p><b>
19、; ·可編程串行通道</b></p><p> ·低功耗的閑置和掉電模式</p><p> ·片內振蕩器和時鐘電路</p><p> 根據(jù)AT89C51的引腳功能,我們選擇P1口(P1.0,P1.1與P1.2)為功能切換輸入口,P0口為顯示電路的段選輸出口,P2口提供地址使語音芯片完成尋址,對P3口,P3.2,P3.
20、3,P3,4接時鐘芯片,P3.5接蜂鳴器,P3.6接語音芯片的REC管腳,PXTAL接一個12MHz的外圍晶振。</p><p> LCD1602采用標準的14腳接口,其中VCC接5V正電源,GND接地,VSS接可變電阻,RS,RW,EN為控制引腳,D0~D7為雙向數(shù)據(jù)線。</p><p><b> 五、總體系統(tǒng)框圖</b></p><p>
21、; 該系統(tǒng)使用AT89C51單片機作為核心,通過讀取時鐘日歷芯片DS1302的數(shù)據(jù),完成此電子時鐘的主要功能——時鐘/日歷數(shù)據(jù)的采集。使用比較通用1602LCD液晶顯示屏,分別顯示年月日、時分秒、星期等數(shù)據(jù)。</p><p> 鍵盤是為了完成時鐘/日歷的校對和的顯示功能。由于此電子時鐘要求具有鬧鈴功能,所以設計有鬧鈴電路,用蜂鳴器進行聲音響鈴。</p><p> 語音芯片ISD142
22、0外接麥克風與揚聲器,構成錄放音電路,再與單片機相連,受單片機調度控制,用于語音整點報時。</p><p> 六、方案設計討論及元件選取依據(jù)</p><p><b> 方案選擇</b></p><p> ?、?單片機芯片的方案選擇和論證</p><p> 方案一:用飛思卡爾16位單片機設計。飛思卡爾16位單片機有豐
23、富的中斷源和時基,它的準確度高,并且C語言和匯編兼容的編程環(huán)境也很方便來實現(xiàn)一些遞歸調用。I/O口功能也比較強大,但端口較多,本設計用的很少,造成資源浪費,成本增加。</p><p> 方案二:對于AT89C51,是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,12
24、8×8位內部RAM,32可編程I/O線,兩個16位定時器/計數(shù)器,5個中斷源等主要特性。完全可以滿足本設計的要求,而且成本較低。</p><p> 綜合以上各點考慮,AT89C51單片機所提供的硬件資源已足夠勝任本次電子</p><p> 時鐘的設計,故決定采用AT89C51單片機為本次設計的MCU。</p><p> ?、跁r鐘脈沖的的方案選擇和論證&
25、lt;/p><p> 方案一:不使用時鐘芯片,而直接用AT89C51單片機中斷來實現(xiàn)電子萬年歷設計。利用一個16位定時器/計數(shù)器每50ms產生一個中斷信號,中斷20次后產生一個秒信號,然后根據(jù)時間進制關系依次向分、時、日、星期、月、年進位。這樣就實現(xiàn)了直接用單片機來實現(xiàn)電子萬年歷設計。但是精度不夠高,誤差較大,掉電后丟失所有數(shù)據(jù),軟件編程較復雜。</p><p> 方案二:采用DS1302
26、時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M行計數(shù),而且精度高,位的RAM做為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內,2.5V時耗電小于300nA。</p><p> 由于在系統(tǒng)設計時,需要考慮以下幾點因素:功耗低、精確度高、軟件編程較簡單,芯片的體積小、芯片成本低等,而DS1302芯片有上面所述的諸多優(yōu)點,所以本設計采用方案二。</
27、p><p> AT89C51管腳圖</p><p> DS1302時鐘芯片</p><p> 表1 DS1302控制字(即地址及命令字節(jié))</p><p> 表2 DS1302有關日歷、時間的寄存器</p><p> ?、壅Z音模塊的方案選擇和論證</p><p> 在眾多的語音芯片中,我們
28、選取了ISD1420這款語音芯片,因為這款芯片價</p><p> 格相對較低,電路連接簡單,控制程序亦簡單,能夠錄制160段共20秒的分段語音,播放時可以隨便組合使用,在功能上已經足夠滿足整點報時與鬧鐘的需求。</p><p> ISD1420為美國ISD公司出品的優(yōu)質單片語音錄放電路,由振蕩器、語音存儲單元、前置放大器、自動增益控制電路、抗干擾濾波器、輸出放大器組成。一個最小的錄放
29、系統(tǒng)僅由一個麥克風、一個喇叭、兩個按鈕、一個電源、少數(shù)電阻電容組成。錄音內容存入永久存儲單元,提供零功率信息存儲,這個獨一無二的方法是借助于美國ISD公司的專利--直接模擬存儲技術(DAST TM)實現(xiàn)的。利用它,語音和音頻信號被直接存儲,以其原本的模擬形式進入EEPROM存儲器.直接模擬存儲允許使用一種單片固體電路方法完成其原本語音的再現(xiàn).僅語音質量優(yōu)勝,而且斷電語音保護.</p><p> ?、茱@示模塊的方案
30、選擇和論證</p><p> 方案一:采用點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費,且價格也相對較高,所以也不用此種作為顯示。</p><p> 方案二:采用LED數(shù)碼管顯示,需要用驅動電路來驅動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字。根據(jù)數(shù)碼管的驅動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。當采用靜態(tài)顯示時,顯示的數(shù)
31、字會比較穩(wěn)定,但是會浪費大量的I/O口。動態(tài)驅動是將所有數(shù)碼管的8個顯示筆劃“a,b,c,d,e,f,g,dp”的同名端連在一起,另外為每個數(shù)碼管的公共極增加位選通控制電路,位選通由各自獨立的I/O線控制。當單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,此時哪個數(shù)碼管會顯示出字形,取決于單片機對片選信號的控制。這種控制方式可以連接多個數(shù)碼管,但是考慮到程序運行的時間和延時問題,會造成數(shù)碼管閃爍,延時時間不好控制。</p>
32、;<p> 方案三:采用LCD1602液晶顯示,1602LCD的特性有:+5V電壓,對比度可調,內含復位電路,提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能,有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM,內建有192個5X7點陣的字型的字符發(fā)生器CGROM,8個可由用戶自定義的5X7的字符發(fā)生器CGRAM,微功耗、體積小、顯示內容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應用系統(tǒng)中。</p><
33、;p> 由于方案三的LCD1602具有前兩者所不具有的明顯優(yōu)勢,且成本不是高出很多,特選擇第三種顯示方案。</p><p> 1602LCD的指令說明</p><p><b> 最終選擇方案</b></p><p> 經過方案比較和論證,選擇AT89C51作為主控芯片,時鐘芯片選擇DS1302,顯示模塊用LCD1602,語音芯片用
34、ISD1420,另外用四個獨立式按鍵,三個用于電子時鐘的設置,一個用于系統(tǒng)復位,除此之外,選用蜂鳴器來作為鬧鐘鬧鈴,麥克風與揚聲器和ISD1420配套作為語音模塊。為了保證蜂鳴器和揚聲器能夠正常驅動發(fā)出較大聲音,分別使用PNP三極管來做驅動電路。同時,為了使得到單片機和DS1302的工作時鐘,還需要電容和晶振來構成時鐘產生電路。</p><p> 七、軟件設計依據(jù)與分析</p><p>
35、<b> (1) 主程序</b></p><p> 主程序主要完成LCD初始化,DS1302初始化和T0\T1的初始化(完成默認情況下為正常顯示);之后進入無限循環(huán)來完成鍵盤掃描,其中KEY1鍵完成程序的切換;KEY2和KEY3在調時、鬧鐘設定以及倒計時程序完成加減功能,在秒表和倒計時開始程序完成開始、暫停或清零功能。</p><p> ?。?) 正常顯示程序&l
36、t;/p><p> 正常顯示程序包括年月日時分秒以及星期的顯示,若從調時程序進入正常顯示程序的話,就相當于日期和星期校正程序。程序會自動校正日期滿足閏年和相應月的日期數(shù)并同時會自動更改星期數(shù)。正常顯示程序是使用的獨立的畫面,為了不與倒計時和秒表的畫面沖突,只能設置FLAG標志位來屏蔽在T0定時器中的顯示代碼。同時還要屏蔽T1定時器的工作。由于我們的硬件設計采用了DS1302,所以在離開正常顯示程序要打開寫保護,并把
37、當前的秒數(shù)寫入DS1302,在關閉寫保護。</p><p> (4)鬧鐘時間設定功能程序</p><p> 鬧鐘程序分為鬧鐘設定和鬧鐘執(zhí)行,在鬧鐘設定時(屏幕顯示“ALARM”),光標處于閃爍狀態(tài),KEY23完成加減操作(屏幕第二行顯示“00:00”),但此時的加減變量不是最終的保存鬧鐘時分的變量,只是中間變量。此時要屏蔽正常顯示的顯示代碼完成清屏,并且保證時間后臺計時。再按下KEY1
38、,完成中間變量向保存時鐘的變量賦值,這就是設定確定操作(屏幕顯示“OK”)。</p><p> 但時間進入鬧鐘時間,T0定時器的相關判斷為真,進入蜂鳴器鳴叫程序(注意也要有顯示代碼),理論鳴叫時間為一分鐘,按下KEY2鍵,將通過對ALARM_EN的置位來屏蔽蜂鳴器鳴叫程序(注意此處要也成觸發(fā)的按鍵判斷經典代碼)</p><p><b> ?。?)調時功能程序</b>
39、</p><p> 調試程序從秒、分、時、星期、日、月、年來依次調節(jié),KEY23完成加減操作,光標處于閃爍狀態(tài),此處軟件設計思路是,通過KEY1觸發(fā)來增加KEY1N</p><p> 并通過SWITCH語句來完成跳轉,完成相應的位置光標來閃爍才BREAK出去;之后判斷一次KEY23觸發(fā)(去抖動代碼不能少,并且要調試穩(wěn)定)通過KEY1N來進入相關位置的相關操作,注意此時FLAG要維持高位
40、,并屏蔽T0和T1。</p><p><b> ?。?)秒表功能程序</b></p><p> 秒表功能程序要先完成清屏,第一行顯示“STOPWATCH READY”,第二行顯示“00:00:00:00”,通過KEY2完成開始,“READY”處該顯示“START”;通過KEY3完成暫?!癝TART”變“PAUSE”,并將暫停的時間存入某變量,最多可存三次。再按KEY
41、1清零,再按則顯示三個保存的秒數(shù)。</p><p> ?。?)倒計時功能程序</p><p> 倒計時程序分為設定、開始、暫停、清零四段代碼,先完成設定,通過KEY1移位,KEY23完成設定時間的加減,再按KEY1完成開始倒計時,KEY23完成暫停和清零,當秒數(shù)倒計時到0時,出現(xiàn)“TIME IS NOW !”的從左往右的移動顯示動畫,再移到屏的最右邊是,出現(xiàn)“00”完成跳出倒計時程序操作
42、。</p><p> ?。?0)語音報時程序</p><p> 語言報時程序完成在任意時間的報時,只要按下KEY2便會通過揚聲器發(fā)出語音報時“現(xiàn)在是北京時間。。。點。。。分”,并且第一行顯示“THE TIME IS NOW”</p><p> (3)定時器T0中斷服務程序</p><p> 在T0定時器中斷中,要完成每秒對正常顯示模式的
43、時間的修改,整點報時、鬧鐘程序的掃描。整點報時程序每秒被掃描一次,若滿足整點條件,便會進入報時階段揚聲器語音報時“現(xiàn)在是北京時間。。。。點整”。</p><p> 語音報時的原理是ISD1420里已經錄好19秒的語音元素,這些存儲單元存有不同長度的語音,大致分為3秒的“現(xiàn)在是北京時間”,7秒的“點、分0、1、2、兩、3、4、5、6、7、8、9、10”,1秒的“點整”,1秒的“凌晨”,1秒的“早上”,1秒的“上午
44、”,在通過不同的組合來完成播放。</p><p> ?。?)定時器T1中斷服務程序</p><p> 定時器T1中斷服務程序完成秒表和倒計時,通過FLAG1來完成if語句的選擇。秒表的最小單位是十毫秒,由于TH1,TL1的設定使COUNT05為2毫秒,每五次HAOMIAO加一,接著每一百次秒加一,后面的代碼依次。注意T1和T0不能同時打開,要避免優(yōu)先級的選定。</p>&l
45、t;p><b> ?。?)生日顯示程序</b></p><p> 設定生日的月和日,當按下KEY1時,若是生日那天,則屏幕顯示中文字幕“生日快樂”(第一行),若不為生日那天,則在第二行顯示“HAPPY ALL DAYS”。</p><p> 顯示漢字時,首先要查資料找到相應漢字的字模,其次修改LCD命令,在依次輸入相對應的字模顯示。顯示漢字主要就是字模很復雜
46、,若自定義的字符還要通過軟件自己制作。</p><p><b> 附 錄</b></p><p> 附錄一 設計總結與體會</p><p> 多功能數(shù)字時鐘設計的課題難點不在于硬件電路的實現(xiàn),相反,功能的軟件實現(xiàn)才是重點;如何實現(xiàn)計時功能、整點語音報時、鬧鐘的調整清除、萬年歷、倒計時、秒表等等許多繁雜的功能堆積。</p>&
47、lt;p><b> 第一周:</b></p><p><b> 策略:</b></p><p> 在整個團隊的進度上,前期采取了雙管齊下的策略;對軟件的功能流程圖,算法流程圖,參考程序等的收集和篩選與硬件平臺上電路的繪制以及硬件參考電路以及典型電路的收集同時進行。</p><p><b> 不足:&
48、lt;/b></p><p> 但由于對設計流程的了解不夠,沒有對硬件方面更加重視,反而在軟件上糾纏過多,導致最后的也硬件圖稿問題多多,語音芯片的選取沒有考慮,相關的電路不符合電路原理,連線不規(guī)范(連線沒有直連),連線的考慮與實際的連線不一致,器件管腳隨意連接…..諸如此類的問題都在于對于電路的設計方面不夠嚴謹,方案的討論不夠,科研態(tài)度也有待改正。在方案討論的不充分直接導致設計圖稿的參考價值大打折扣,也延
49、緩了日后電路布線和焊接的進度。</p><p><b> 經驗:</b></p><p> 在以后的設計中,我相信我們的團隊在設計的前期首先會在組內討論后做足充分的準備,在通過功能的選擇、實現(xiàn)功能的器件的選擇、實現(xiàn)功能算法的選擇、編程語言的選擇、為主線做到分而治之——軟硬件之分,功能算法之分,硬件繪制與器件參數(shù)之分,做到組內成員各司其職。</p>&
50、lt;p> 實現(xiàn)什么功能,怎樣實現(xiàn)功能,拿什么實現(xiàn)功能</p><p><b> 第二周:</b></p><p><b> 策略:</b></p><p> 第一周的完成情況有限,硬件設計基本完成,但是,軟件設計還是止步不前,原因是硬件的完成需要整個團隊的合力參謀,而且軟件的設計也是基于硬件平臺的,現(xiàn)在沒有
51、完成的部分有硬件電路的檢測(預計下周完成),簡單程序的下載調試,硬件圖紙的修改,軟件任務的分配,子程序的編寫幾大部分。時間相對緊迫,同志還需努力!</p><p> 在編寫子程序實現(xiàn)計時功能、秒表功能和倒計時功能時,前者要使用T0,后兩個使用T1,通過標志位FLAG1來完成秒表和倒計時的功能切換。</p><p> 主函數(shù)采用無限循環(huán)查詢按鍵的方式,其中KEY1完成子程序的切換,KEY
52、2,KEY3在調整時間和鬧鐘設置時完成加減操作,在秒表和倒計時完成開始和暫停操作。</p><p> 編程策略:增加一個功能,就調試一個</p><p><b> 不足:</b></p><p> 在對簡單程序的調試時,由于忽略了LCD1602的RW管腳的設置,盲目參照他人的程序(參考程序的對應電路并沒有連接RW到單片機),致使調試一度陷
53、入僵局,并錯誤的認為是硬件連線上的問題,耽誤了不少時間。并且硬件布局不合理,差點導致仿真器與LCD之間相互挨著而無法插進插座,以及語音芯片的錄音,放音的相關管腳并不需要與單片機的管腳連接,只需要設計撥位開關即可,由于此處設計的不合理,使得單片機的管腳減少,并且還加大了編程的工作量,以及連線上的浪費。同時單片機的連線不僅可以從外面連接,也可從單片機的兩頭(沒有管腳的一面)引出一簇連線,不僅美觀也可以完成很多其他功能。</p>
54、<p> 同時也應該采用74LS138來完成三八譯碼可以增加流水燈等功能。</p><p><b> 經驗:</b></p><p> 盡管我們組在硬件上已經很小心,但是還是出現(xiàn)一些紕漏,下一次設計時,經驗告訴我們要先布局合理后,在考慮連線的美觀和簡潔。同時,連線盡量緊湊,不能分的太開。軟件方面,調試是重中之重。先實現(xiàn)相對容易實現(xiàn)的功能,也有利于工作
55、的開展。</p><p><b> 第三,四周:</b></p><p><b> 策略:</b></p><p> 第三周的基本功能也實現(xiàn),考慮在一周內完成語音芯片的功能實現(xiàn),并且完善基本功能模塊。還準備添加開機動畫。組內兩人繼續(xù)完成以上工作,另外兩人則完成設計報告。同時還考慮在硬件上添加指示燈以及時鐘芯片掉電不丟
56、失需要的紐扣電池插座。</p><p><b> 不足:</b></p><p> 在基本功能上,有以下問題需要解決(方敏老師提出):1.日期與星期的對應問題2.復位指示燈的添加3.開機畫面的添加4.倒計時能不能確定時間確定。我們自己提出的改進問題有:1. 12—24時間切換2.鬧鐘功能的開關3. 時鐘芯片的掉電不丟失功能。</p><p>
57、; 由于程序相對較大,AT89C51的4KROM已無法滿足,預計要換成C52或其他。</p><p><b> 經驗:</b></p><p> 對于基本功能的完成還是比較順利的,但是要改進就需要通過各種渠道去了解,使功能更加完善。由于在布局上并沒有做到極致,使我們組相對于其他個別組在硬件上的指示燈等硬件功能來說,顯得薄弱。我們在開機動畫方面和時鐘芯片方面做了相
58、關工作,更加有自己特色。</p><p> 通過這次為期四個星期的單片機課程設計,我們組四人基本掌握了Proteus和Keil的基本功能和使用方法,對80C51單片機系統(tǒng)有了一定的了解,使我們得到了一次用專業(yè)知識、專業(yè)技術分析和解決實際問題的能力,同時使我們在單片機的基本原理、單面機應用學習過程中,以及在常用編程設計思想技巧的掌握方面都能向前邁了一大步,為日后成為一名合格應用型人才打下良好的基礎。綜合課程設計讓
59、我們把以前學到的知識得到了鞏固和進一步的提高認識,最重要的一點是鍛煉了我們學以致用的能力,為我們的以后工作打下了基礎!</p><p> 這次我們學習了解了單片機系統(tǒng)的結構與特性,加深了對課本理論知識的理解。同時熟悉了Proteus和Keil仿真軟件的相關操作,提高了動手能力和獨立分析問題與解決問題的能力。雖然花了四周的時間,但最后我們學到了很多東西,做實驗的時候自己不斷的熟悉課本,增強了對課本的理解,從而使我
60、們充分的懂得理論與實際結合是很重要的,只有理論是遠遠不夠的,只有把自己所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務。</p><p> 在整個過程中,我們從老師和同學那兒獲得了很多實用的知識,在這里我們表示感謝!謝謝指導老師的幫助!謝謝同學的幫忙!</p><p><b> 附錄二 元器件清單</b></p><p>
61、; 本機最終調試結果:接通電源后,屏幕首先進入歡迎界面,顯示“Time has wings,I’m your clock”。停頓兩秒進入正常時間顯示界面,第一排依次顯示年、月、日、星期,第二排依次顯示時、分、秒。K1鍵主要功能為切換,從正常時間顯示界面開始按K1鍵,依次進入調秒、調分、調時、調星期、調日、調月、調年、正常時間顯示、alarm調時、alarm調分、alarm確定、秒表準備界面、倒計時準備界面,之后再進入調秒,如此循環(huán)。&
62、lt;/p><p> 在調整時間和日期時,K2為增鍵,K3為減鍵。在秒表準備界面,按K2開始計時,按K3暫停,并將最多三次結果保存到T1、T2、T3,可供查看,K1清零,再按K1查看三次保存結果。</p><p> 在倒計時界面,按K2開始倒計時,K3暫停,K1清零。</p><p> 正常界面下,鬧鐘會準時響鈴,按K2鍵停止響鈴,若不按則一分鐘后結束響鈴。<
63、;/p><p> 星期具有與日期自動同步映射功能。</p><p><b> 本機最終調試結果:</b></p><p> 1.接通電源后,屏幕首先初始化。</p><p> 2.進入歡迎界面,顯示“Time has wings,I’m your clock”。</p><p> 3.停頓兩
64、秒進入正常時間顯示界面,第一排依次顯示年、月、日、星期,第二排依次顯示時、分、秒。</p><p> 4.K1鍵主要功能為切換,從正常時間顯示界面開始按K1鍵,依次進入調秒、調分、調時、調星期、調日、調月、調年、正常時間顯示、alarm調時、alarm調分、alarm確定、秒表準備界面、倒計時準備界面,之后再進入調秒,如此循環(huán)。</p><p> 5.在調整時間和日期時,K2為增鍵,K
65、3為減鍵。在秒表準備界面,按K2開始計時,按K3暫停,并將最多三次結果保存到T1、T2、T3,可供查看,K1清零,再按K1查看三次保存結果。</p><p> 6.在倒計時界面,按K2開始倒計時,K3暫停,K1清零。倒計時的秒數(shù)可設定。</p><p> 倒計時結束后顯示“TIME IS UP”。</p><p> 7.正常界面下,鬧鐘會準時響鈴,按K2鍵停止
66、響鈴,若不按則一分鐘后結束響鈴。</p><p> 星期具有與日期自動同步映射功能。</p><p><b> 附錄四 參考文獻</b></p><p> 1、《單片機原理及應用》,丁元杰著,北京航空航天大學出版社2005年8月版。</p><p> 2、《電子線路Protel 99 SE 實用教程》,王芳主編,
67、中南大學出版社2005年8月第一版。</p><p> 3、《單片機實用教程》,李勛、劉源編著,北京航空航天大學出版社2000年6月第一版。</p><p> 4、《綜合課程設計匯編》,重慶大學出版社。</p><p><b> 附錄五 整機電路圖</b></p><p> 附錄六 源程序清單..</p&g
68、t;<p> PROGRAM LIST</p><p> #include<reg51.h></p><p> //#include"DS18B20.H"</p><p> #include"diaoyong.h"</p><p> #define uint unsi
69、gned int</p><p> #define uchar unsigned char</p><p> uchar a,b,c,d,miao,shi,fen,ri,yue,nian,week,key1n,temp,nshi,nfen,flag,flag1;</p><p> uchar dcount,dhmiao;</p><p&g
70、t; uchar sec=99;</p><p> uchar key2n=0;</p><p> uchar xshi=100;</p><p> uchar xfen=100;</p><p> uchar sshi,sfen,smiao,snian,syue,sri,sweek,alarm_en;</p><
71、;p> uchar count05,haomiao,cmiao,cfen,cshi;</p><p> //flag用于讀取頭文件中的溫度值,和顯示溫度值</p><p> #define yi 0x80 //LCD第一行的初始位置,因為LCD1602字符地址首位D7恒定為1(100000000=80)</p><p> #define er 0x80
72、+0x40 //LCD第二行初始位置(因為第二行第一個字符位置地址是0x40)</p><p> //液晶屏的與C51之間的引腳連接定義(顯示數(shù)據(jù)線接C51的P0口)</p><p> sbit rs=P1^2;</p><p> sbit rw=P1^1;</p><p> sbit en=P1^0;</p><
73、p> //DS1302時鐘芯片與C51之間的引腳連接定義</p><p> sbit IO=P3^3;</p><p> sbit SCLK=P3^2;</p><p> sbit RST=P3^4;</p><p> sbit ACC0=ACC^0;</p><p> sbit ACC7=ACC^7
74、;</p><p> /************************************************************</p><p><b> ACC累加器=A</b></p><p> ACC.0=E0H </p><p> ACC.0就是ACC的第0位。Acc可以位尋址。</
75、p><p> 累加器ACC是一個8位的存儲單元,是用來放數(shù)據(jù)的。但是,這個存儲單元有其特殊的地位,</p><p> 是單片機中一個非常關鍵的單元,很多運算都要通過ACC來進行。以后在學習指令時,</p><p> 常用A來表示累加器。但有一些地方例外,比如在PUSH指令中,就必須用ACC這樣的名字。</p><p> 一般的說法,A代表
76、了累加器中的內容、而ACC代表的是累加器的地址。 </p><p> ***************************************************************/</p><p> //校時按鍵與C51的引腳連接定義</p><p> sbit key1=P1^3; //設置鍵</p><p>
77、sbit key2=P1^4; //加鍵</p><p> sbit key3=P1^5; //減鍵</p><p> sbit buzzer=P3^5;//蜂鳴器,通過三極管9012驅動,端口低電平響</p><p> /**************************************************************/<
78、/p><p> uchar code dis1[] = {"TIME HAS WINGS "};</p><p> uchar code dis2[] = {"I'M YOUR CLOCK "};</p><p> uchar code tab1[]={"20 - - "}; //年顯示的
79、固定字符</p><p> uchar code tab2[]={" : : "};//時間顯示的固定字符</p><p> uchar code tab3[]={"MONTUEWEDTHUFRISTASUN"};//星期固定顯示字符</p><p> uchar code time1[]="00:00&
80、quot;; //時間模式1,用于鬧鐘設置</p><p> uchar code time2[]="00:00:00:00"; //時間模式2,用于秒表計時</p><p> uchar code naozhong[]={"ALARM"};</p><p> uchar code timetell[]={
81、"THE TIME IS NOW"};</p><p> uchar code ok[]={"OK"};</p><p> uchar code stopwatch1[]={"STOPWATCH READY"};</p><p> uchar code stopwatch2[]={"STOP
82、WATCH START"};</p><p> uchar code stopwatch3[]={"STOPWATCH PAUSE"};</p><p> uchar code stopwatch4[]={"STOPWATCH CLEAR"};</p><p> uchar code store1[]={&qu
83、ot;T1"};</p><p> uchar code store2[]={"T2"};</p><p> uchar code store3[]={"T3"};</p><p> uchar stop[3]={0};</p><p> uchar stop1[3]={0};<
84、/p><p> uchar code reverse[]={"COUNTDOWN"};</p><p> uchar code roll1[]={"TIME IS UP! "};</p><p> uchar code roll2[]={" TIME IS UP! "};</p>
85、<p> uchar code roll3[]={" TIME IS UP!"};</p><p> /**************************************************************/</p><p> uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31
86、,30,31};//定義月,2月由年份</p><p> //延時函數(shù),后面經常調用</p><p> void delay(uint xms)//延時函數(shù),有參函數(shù)</p><p><b> {</b></p><p><b> uint x,y;</b></p><
87、p> for(x=xms;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> /********液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù),以后可調用**************/</p><p> /*在這個程序中,液晶寫入
88、有關函數(shù)會在DS1302的函數(shù)中調用,所以液晶程序要放在前面*/</p><p> void write_1602com(uchar com)//****液晶寫入指令函數(shù)****</p><p><b> {</b></p><p> rs=0;//數(shù)據(jù)/指令選擇置為指令</p><p><b> rw
89、=0;</b></p><p> P0=com;//送入數(shù)據(jù)</p><p><b> delay(1);</b></p><p> en=1;//拉高使能端,為制造有效的下降沿做準備</p><p><b> delay(1);</b></p><p>
90、 en=0;//en由高變低,產生下降沿,液晶執(zhí)行命令</p><p><b> }</b></p><p> void write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)****</p><p><b> {</b></p><p> rs=1;//數(shù)據(jù)/指令選擇
91、置為數(shù)據(jù)</p><p><b> rw=0;</b></p><p> P0=dat;//送入數(shù)據(jù)</p><p><b> delay(1);</b></p><p> en=1; //en置高電平,為制造下降沿做準備</p><p><b> del
92、ay(1);</b></p><p> en=0; //en由高變低,產生下降沿,液晶執(zhí)行命令</p><p><b> }</b></p><p> void lcd_init()//***液晶初始化函數(shù)****</p><p><b> {</b></p>&l
93、t;p> write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)</p><p> write_1602com(0x0c);//開顯示不顯示光標</p><p> write_1602com(0x06);//整屏不移動,光標自動右移</p><p> write_1602com(0x01);//清顯示&
94、lt;/p><p> write_1602com(yi+1);//日歷顯示固定符號從第一行第1個位置之后開始顯示</p><p> for(a=0;a<11;a++)</p><p><b> {</b></p><p> write_1602dat(tab1[a]);//向液晶屏寫日歷顯示的固定符號部分<
95、;/p><p><b> delay(3);</b></p><p><b> }</b></p><p> write_1602com(er+2);//時間顯示固定符號寫入位置,從第2個位置后開始顯示</p><p> for(a=0;a<8;a++)</p><p&
96、gt;<b> {</b></p><p> write_1602dat(tab2[a]);//寫顯示時間固定符號,兩個冒號</p><p><b> delay(3);</b></p><p><b> }</b></p><p><b> }</b
97、></p><p> /*********************over***********************/</p><p> void roll_display()</p><p><b> {</b></p><p> write_1602com(0x38);//設置液晶工作模式,意思:1
98、6*2行顯示,5*7點陣,8位數(shù)據(jù)</p><p> write_1602com(0x0c);//開顯示不顯示光標</p><p> write_1602com(0x06);//整屏不移動,光標自動右移</p><p> write_1602com(0x01);//清顯示</p><p> write_1602com(yi);//日歷
99、顯示固定符號從第一行第1個位置之后開始顯示</p><p> for(a=0;a<15;a++)</p><p><b> {</b></p><p> write_1602dat(dis1[a]);//向液晶屏寫日歷顯示的固定符號部分</p><p> delay(100);</p><
100、;p><b> }</b></p><p> write_1602com(er);//時間顯示固定符號寫入位置,從第2個位置后開始顯示</p><p> for(a=0;a<15;a++)</p><p><b> {</b></p><p> write_1602dat(di
101、s2[a]);//寫顯示時間固定符號,兩個冒號</p><p> delay(100);</p><p><b> }</b></p><p><b> }</b></p><p> /***************DS1302有關子函數(shù)********************/</p
102、><p> void write_byte(uchar dat)//寫一個字節(jié)</p><p><b> {</b></p><p><b> ACC=dat;</b></p><p><b> RST=1;</b></p><p> for(a=
103、8;a>0;a--)</p><p><b> {</b></p><p><b> IO=ACC0;</b></p><p><b> SCLK=0;</b></p><p><b> SCLK=1;</b></p><
104、p> ACC=ACC>>1;</p><p><b> }</b></p><p><b> }</b></p><p> uchar read_byte()//讀一個字節(jié)</p><p><b> {</b></p><p>
105、;<b> RST=1;</b></p><p> for(a=8;a>0;a--)</p><p><b> {</b></p><p><b> ACC7=IO;</b></p><p><b> SCLK=1;</b></p&g
106、t;<p><b> SCLK=0;</b></p><p> ACC=ACC>>1;</p><p><b> }</b></p><p> return (ACC);</p><p><b> }</b></p><p
107、> //----------------------------------------</p><p> void write_1302(uchar add,uchar dat)//向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)</p><p><b> {</b></p><p><b> RST=0;</b>
108、</p><p><b> SCLK=0;</b></p><p><b> RST=1;</b></p><p> write_byte(add);</p><p> write_byte(dat);</p><p><b> SCLK=1;</b
109、></p><p><b> RST=0;</b></p><p><b> }</b></p><p> uchar read_1302(uchar add)//從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址</p><p> { uchar temp;</p>&
110、lt;p><b> RST=0;</b></p><p><b> SCLK=0;</b></p><p><b> RST=1;</b></p><p> write_byte(add);</p><p> temp=read_byte();</p>
111、;<p><b> SCLK=1;</b></p><p><b> RST=0;</b></p><p> return(temp);</p><p><b> }</b></p><p> uchar BCD_Decimal(uchar bcd)//
112、BCD碼轉十進制函數(shù),輸入BCD,返回十進制</p><p><b> {</b></p><p> uchar Decimal;</p><p> Decimal=bcd>>4;</p><p> return(Decimal=Decimal*10+(bcd&=0x0F));</p&g
113、t;<p><b> }</b></p><p> //--------------------------------------</p><p> void ds1302_init() //1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)</p><p><b> {</b
114、></p><p><b> RST=0;</b></p><p><b> SCLK=0;</b></p><p> write_1302(0x8e,0x00); //允許寫,禁止寫保護 </p><p> write_1302(0x80,0x00); //向DS1302內寫秒寄存器
115、80H寫入初始秒數(shù)據(jù)00</p><p> write_1302(0x82,0x00);//向DS1302內寫分寄存器82H寫入初始分數(shù)據(jù)00</p><p> write_1302(0x84,0x12);//向DS1302內寫小時寄存器84H寫入初始小時數(shù)據(jù)12</p><p> write_1302(0x8a,0x04);//向DS1302內寫周寄存器8a
116、H寫入初始周數(shù)據(jù)4</p><p> write_1302(0x86,0x07);//向DS1302內寫日期寄存器86H寫入初始日期數(shù)據(jù)07</p><p> write_1302(0x88,0x01);//向DS1302內寫月份寄存器88H寫入初始月份數(shù)據(jù)01</p><p> write_1302(0x8c,0x10);//向DS1302內寫年份寄存器8c
117、H寫入初始年份數(shù)據(jù)10</p><p> write_1302(0x8e,0x80); //打開寫保護</p><p><b> }</b></p><p> //------------------------------------//時分秒顯示子函數(shù)</p><p> void write_sfm(ucha
118、r add,uchar dat)//向LCD寫時分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個參數(shù)</p><p><b> {</b></p><p> uchar gw,sw;</p><p> gw=dat%10;//取得個位數(shù)字</p><p> sw=dat/10;//取得十位數(shù)字</p><p
119、> write_1602com(er+add);//er是頭文件規(guī)定的值0x80+0x40</p><p> write_1602dat(0x30+sw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p> write_1602dat(0x30+gw);//數(shù)字+30得到該數(shù)字的LCD1602顯示碼</p><p><b> }
120、</b></p><p> //-------------------------------------//年月日顯示子函數(shù)</p><p> void write_nyr(uchar add,uchar dat)//向LCD寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個參數(shù)</p><p><b> {</b></p>
121、;<p> uchar gw,sw;</p><p> gw=dat%10;//取得個位數(shù)字</p><p> sw=dat/10;//取得十位數(shù)字</p><p> write_1602com(yi+add);//設定顯示位置為第一個位置+add</p><p> write_1602dat(0x30+sw);//數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字電子課程設計報告---多功能電子鐘
- 多功能電子表畢業(yè)設計
- 可調電子表 課程設計
- 微機接口電子表數(shù)字鐘課程設計
- 電子綜合課程設計——多功能數(shù)字電子時鐘
- 多功能數(shù)字鐘課程設計報告
- 數(shù)字系統(tǒng)設計課程設計報告——多功能數(shù)字鐘
- 多功能數(shù)字鐘課程設計報告
- eda課程設計---多功能數(shù)字時鐘報告
- 多功能數(shù)字鐘課程設計報告
- eda課程設計報告(多功能數(shù)字時鐘的設計)
- 電子表課程設計單片機
- 課程設計---電子表微控器設計及fpga功能驗證
- 數(shù)字邏輯課程設計報告--多功能數(shù)字鐘
- 單片機多功能電子數(shù)字鐘課程設計報告
- 多功能數(shù)字鐘課程設計報告 (2)
- 課程設計--多功能數(shù)字鐘設計報告書
- 課程設計---多功能電子數(shù)字鐘
- 多功能數(shù)字電子鐘課程設計
- 電子線路設計課程設計實驗報告-多功能數(shù)字鐘設計
評論
0/150
提交評論