版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)</b></p><p> 題目:電子時(shí)鐘系統(tǒng)設(shè)計(jì)</p><p> 姓 名: </p><p> 院 系: 電子信息工程學(xué)院 </p><p> 時(shí)間: 2014 年12 月 25 日至 2015 年 1 月 5
2、日</p><p> 課 程 設(shè) 計(jì) 任 務(wù) 書</p><p> 題目 電子時(shí)鐘系統(tǒng)設(shè)計(jì) </p><p> 主要內(nèi)容、基本要求、主要參考資料等:</p><p><b> 一、主要內(nèi)容:</b></p><p> ?、?熟悉單
3、片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)方法和規(guī)范,達(dá)到綜合的目的。</p><p> ?、?學(xué)習(xí)文件檢索和查找數(shù)據(jù)手冊(cè)的能力。</p><p> ③ 學(xué)習(xí)protel軟件的使用。</p><p> ④ 學(xué)會(huì)整理和總結(jié)設(shè)計(jì)文檔報(bào)告。</p><p><b> 二、基本要求:</b></p><p> ?、?以MC
4、S-51系列單片機(jī)為核心,組成一個(gè)電子時(shí)鐘系統(tǒng)。</p><p> ?、?系統(tǒng)顯示由6位數(shù)碼管顯示組成,分別顯示時(shí)間值的十、分、秒。</p><p> ?、?能夠隨時(shí)對(duì)當(dāng)前時(shí)間進(jìn)行調(diào)整。 </p><p> ?、?能夠隨時(shí)輸入定時(shí)(鬧鐘)時(shí)間。</p><p> ?、?定時(shí)(鬧鐘)時(shí)間到,發(fā)出鬧鐘提醒信號(hào)。</p><p&
5、gt; ⑥ 鬧鐘提醒信號(hào)的聲音為斷續(xù)形式,最長(zhǎng)不超過(guò)1分鐘。</p><p><b> 三、主要參考資料:</b></p><p> ?、?張毅坤等 單片微型計(jì)算機(jī)原理及應(yīng)用 西安 西安電子科技大學(xué)出版社</p><p> ?、?李建忠編著 單片機(jī)原理及應(yīng)用 西安 西安電子科技大學(xué)出版社</p><p&g
6、t; 完 成 期 限: </p><p> 指導(dǎo)教師簽名: </p><p> 課程負(fù)責(zé)人簽名: </p><p> 年 月 日</p><p><b> 目 錄</b></p><
7、;p> 1.總體設(shè)計(jì)方案1</p><p><b> 1.1設(shè)計(jì)原理1</b></p><p><b> 1.2設(shè)計(jì)思路1</b></p><p> 2.詳細(xì)設(shè)計(jì)方案2</p><p> 2.1硬件電路設(shè)計(jì)2</p><p> 2.2主程序設(shè)計(jì)2
8、</p><p> 2.3功能模塊的設(shè)計(jì)與實(shí)現(xiàn)2</p><p> 3.結(jié)果測(cè)試及分析8</p><p><b> 3.1結(jié)果測(cè)試8</b></p><p><b> 3.2結(jié)果分析8</b></p><p><b> 參考文獻(xiàn)9</b&g
9、t;</p><p><b> 附 錄 A10</b></p><p><b> 附 錄 B18</b></p><p><b> 附 錄 C19</b></p><p><b> 1.總體設(shè)計(jì)方案</b></p><
10、;p><b> 1.1設(shè)計(jì)原理</b></p><p> 根據(jù)課程設(shè)計(jì)任務(wù)書的內(nèi)容,要求實(shí)現(xiàn)在MCS51單片機(jī)上對(duì)數(shù)字電子鐘的基本功能設(shè)計(jì),對(duì)當(dāng)前時(shí)間正確顯示,并可根據(jù)需要對(duì)時(shí)間進(jìn)行更改,以完成時(shí)間的校對(duì)和鬧鐘的設(shè)置。</p><p> 時(shí)鐘時(shí)間以時(shí)、分、秒在6位數(shù)碼管上顯示,小時(shí)以24小時(shí)計(jì)時(shí)模式,分秒均為60進(jìn)位。用6MHz晶振產(chǎn)生振蕩脈沖,定時(shí)器進(jìn)行
11、秒計(jì)時(shí)。調(diào)整設(shè)置時(shí)間的過(guò)程運(yùn)用可編程鍵盤上的按鍵進(jìn)行控制,共設(shè)有5個(gè)按鍵,首先按鍵A進(jìn)入校時(shí)模式或E進(jìn)入鬧鐘模式,再分別按鍵B對(duì)小時(shí)或C分鐘進(jìn)行更改,每按鍵一次數(shù)碼管計(jì)數(shù)顯示加一,更改結(jié)束后按鍵D退出設(shè)置,時(shí)鐘正常顯示。鬧鐘時(shí)間到時(shí),蜂鳴器鳴響10秒后時(shí)鐘正常顯示。</p><p><b> 1.2設(shè)計(jì)思路</b></p><p> 采用C語(yǔ)言程序設(shè)計(jì)結(jié)合硬件電路
12、設(shè)計(jì)方法,利用Lab6000實(shí)驗(yàn)箱來(lái)實(shí)現(xiàn)數(shù)字電子鐘的設(shè)計(jì)。</p><p><b> (1)提出方案</b></p><p> 根據(jù)設(shè)計(jì)要求,可將本次設(shè)計(jì)分為3個(gè)模塊進(jìn)行:</p><p> 時(shí)鐘顯示模塊:主要用于時(shí)間的正確顯示。</p><p> 校時(shí)模塊:此模塊用于時(shí)鐘的校對(duì),以完成用戶更改時(shí)間的需求。<
13、;/p><p> 鬧鐘模塊:用于實(shí)現(xiàn)鬧鐘的時(shí)間設(shè)置和定點(diǎn)鬧鈴的功能。</p><p><b> (2)方案論證</b></p><p> 時(shí)鐘顯示模塊中,利用可編程定時(shí)器中斷進(jìn)行秒計(jì)時(shí),將時(shí)間顯示在6位數(shù)碼管上。校時(shí)模塊主要利用鍵盤上5個(gè)鍵的控制完成各項(xiàng)功能,并在數(shù)碼管上動(dòng)態(tài)顯示改變結(jié)果,完成設(shè)置后進(jìn)入時(shí)鐘顯示模塊。鬧鐘模塊的設(shè)置過(guò)程與校時(shí)模
14、塊相似,但設(shè)置完成進(jìn)入時(shí)間顯示模塊后則等待鬧鈴時(shí)間,到規(guī)定時(shí)間后,通過(guò)數(shù)碼管閃爍及蜂鳴器的鳴響來(lái)實(shí)現(xiàn)定點(diǎn)鬧鈴提醒功能。</p><p> 總設(shè)計(jì)原理框圖如下圖1-1所示:</p><p> 圖1-1 總設(shè)計(jì)原理框圖</p><p><b> 2.詳細(xì)設(shè)計(jì)方案</b></p><p><b> 2.1硬
15、件電路設(shè)計(jì)</b></p><p> 硬件電路由MCS51單片機(jī),可編程鍵盤,六位數(shù)碼管以及蜂鳴器四部分組成,如圖2-1所示。</p><p> 圖2-1 硬件電路連線圖</p><p> MCS51單片機(jī)由CPU、振蕩器和時(shí)序電路、4KB程序存儲(chǔ)器、128字節(jié)數(shù)據(jù)存儲(chǔ)器、兩位16位定時(shí)器/計(jì)數(shù)器、64KB總線擴(kuò)展控制、可編程并行I/O、可編程全
16、雙工串行口組成。</p><p> 可編程鍵盤與數(shù)碼管經(jīng)過(guò)MC1314反向驅(qū)動(dòng)連接,做LED的位選通信號(hào),需將KEY/LED_CS接到響應(yīng)的地址譯碼器CS0上,位碼輸出的地址為8002H,段碼輸出地址為8004H,鍵盤行碼都會(huì)地址為8001H。</p><p> 音頻放大電路則通過(guò)P1_0口產(chǎn)生的脈沖產(chǎn)生不同頻率的聲音。</p><p><b> 2
17、.2主程序設(shè)計(jì)</b></p><p> 主程序主要用于系統(tǒng)初始化:設(shè)置定時(shí)器初值、工作方式等參數(shù),開啟中斷進(jìn)入時(shí)鐘顯示狀態(tài),等待定時(shí)器中斷。具體流程圖如圖2-2所示。</p><p> 2.3功能模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 根據(jù)上述電子鐘的設(shè)計(jì)原理與方案,軟件設(shè)計(jì)可分為以下幾個(gè)功能模塊實(shí)現(xiàn):</p><p> ?。?/p>
18、1)定時(shí)器模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 定時(shí)器模塊即定時(shí)器中斷服務(wù)子程序,完成刷新計(jì)時(shí)緩沖區(qū)的功能。系統(tǒng)使用6MHz的晶振。由于定時(shí)器工作在方式0時(shí)最大定時(shí)時(shí)間為不足1s,程序采用定時(shí)器與軟件循環(huán)相結(jié)合的定時(shí)方法。設(shè)定時(shí)器0工作在方式0,每隔100ms溢出中斷一次,則循環(huán)中斷10次延時(shí)時(shí)間是1s,以達(dá)到秒增加的效果。 </p><p> 程序運(yùn)行開始后,定時(shí)器中斷程序與其他子程序
19、并發(fā)執(zhí)行,在完成其他功能的過(guò)程中,時(shí)鐘也正常運(yùn)行,更大降低時(shí)鐘誤差。具體流程圖如圖2-3所示:</p><p> 圖2-2 主程序流程圖</p><p> 圖2-3 定時(shí)器“秒”計(jì)時(shí)模塊</p><p> ?。?)時(shí)鐘顯示模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 此模塊主要用于時(shí)鐘的顯示,六位數(shù)碼管以“時(shí)時(shí).分分.秒秒”顯示當(dāng)前時(shí)間,按鍵A輸
20、出“------”進(jìn)入校時(shí)模式,按鍵 E輸出已設(shè)定鬧鐘并進(jìn)入鬧鐘模式。 具體流程圖如圖2-4所示。</p><p> 圖2-4 時(shí)鐘顯示模塊</p><p> (3)設(shè)置小時(shí)模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 設(shè)置小時(shí)模塊中,主要完成按鍵校時(shí)功能,每按一次B鍵,小時(shí)+1,并以“H-時(shí)時(shí)”在數(shù)碼管上顯示過(guò)程。可按鍵C進(jìn)入設(shè)置分鐘模塊,D鍵完成設(shè)置,時(shí)鐘正常顯示,
21、在設(shè)置小時(shí)模塊中,除B、C、D鍵,其他鍵均為無(wú)效操作。</p><p> 校時(shí)模塊和鬧鐘模塊都可以進(jìn)入設(shè)置小時(shí)模塊中,因此進(jìn)入模塊會(huì)自動(dòng)判別,如果鬧鐘設(shè)置標(biāo)志位alarm=0,時(shí)鐘小時(shí)變化,若alarm=1,則鬧鐘設(shè)置小時(shí)變化,最終調(diào)整到需要的數(shù)字為止。若alarm=1,完成設(shè)置后,將鬧鐘開啟標(biāo)志位alarm_on=1,表示鬧鐘為開啟狀態(tài),時(shí)鐘正常顯示,反之直接進(jìn)入時(shí)鐘顯示模塊。</p><
22、p> 運(yùn)用鍵盤的過(guò)程中,采用固定列逐行掃描的方式,判斷鍵位低電平時(shí),則按鍵按下,高電平時(shí)則為抬起。在校時(shí)過(guò)程中,需對(duì)按鍵是否抬起進(jìn)行判斷,用來(lái)避免因系統(tǒng)掃描過(guò)于頻繁,而導(dǎo)致的小時(shí)更改不受控制,僅當(dāng)按鍵抬起后小時(shí)加1。具體流程圖如圖2-5所示。</p><p> ?。?)設(shè)置分鐘模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 設(shè)置分鐘模塊中,主要完成按鍵校分功能,每按一次C鍵,分鐘+1,并以“
23、F-分分”在數(shù)碼管上顯示過(guò)程??砂存IB進(jìn)入設(shè)置分鐘模塊,D鍵完成設(shè)置,時(shí)鐘正常顯示,在設(shè)置分鐘模塊中,除B、C、D鍵,其他鍵均為無(wú)效操作。</p><p> 設(shè)置分鐘模塊的設(shè)計(jì)原理與設(shè)置小時(shí)模塊一致,故不在此詳細(xì)說(shuō)明。</p><p> ?。?)校時(shí)模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 校時(shí)模塊主要為選擇性模塊,用于用戶選擇進(jìn)入設(shè)置小時(shí)、設(shè)置分鐘和設(shè)置完成功能,由
24、時(shí)鐘顯示模塊中按鍵A進(jìn)入,顯示“------”表示可以進(jìn)行設(shè)置,按鍵B選擇進(jìn)入設(shè)置小時(shí)模塊,按鍵C選擇進(jìn)入設(shè)置分鐘模塊,按鍵D選擇完成設(shè)置,返回時(shí)鐘顯示模塊,時(shí)鐘正常顯示。具體流程圖如圖2-6所示。</p><p> 圖2-5 設(shè)置小時(shí)模塊</p><p> (6)鬧鐘模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 鬧鐘模塊也為選擇性模塊,設(shè)計(jì)原理與校時(shí)模塊基本相似,用于
25、用戶選擇進(jìn)入設(shè)置小時(shí)、設(shè)置分鐘和設(shè)置完成功能,由時(shí)鐘顯示模塊中按鍵E進(jìn)入,顯示當(dāng)前鬧鐘時(shí)間表示可以進(jìn)行設(shè)置,按鍵B選擇進(jìn)入設(shè)置小時(shí)模塊,按鍵C選擇進(jìn)入設(shè)置分鐘模塊,按鍵D選擇完成設(shè)置,開啟鬧鐘,返回時(shí)鐘顯示模塊,時(shí)鐘正常顯示。具體流程圖如圖2-7所示。</p><p> (7)時(shí)鐘模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 時(shí)鐘模塊為時(shí)鐘運(yùn)行的基本函數(shù),用于對(duì)時(shí)、分、秒確立正確的進(jìn)位聯(lián)系和循環(huán)
26、數(shù)值,當(dāng)鬧鐘時(shí)間到時(shí),數(shù)碼管閃爍字樣“AAAAAA”且蜂鳴器鳴響10秒鐘,隨后時(shí)鐘正常顯示,鬧鐘開啟標(biāo)志位設(shè)置為0,表示鬧鐘關(guān)閉,不為鬧鐘時(shí)間時(shí)鐘均正常顯示。具體流程圖如圖2-8所示。</p><p><b> 圖2-6 校時(shí)模塊</b></p><p><b> 圖2-7 鬧鐘模塊</b></p><p><b
27、> 圖2-8 鬧鐘模塊</b></p><p><b> 3.結(jié)果測(cè)試及分析</b></p><p> 3.1結(jié)果測(cè)試 </p><p> 程序開始時(shí)間默認(rèn)為00:00:00數(shù)碼管正常顯示,除A、E鍵均無(wú)效,按鍵A,數(shù)碼管顯示“------”進(jìn)
28、入校時(shí)模塊,按鍵B:數(shù)碼管顯示“H-01”,按鍵C:數(shù)碼管顯示“F-01”,此時(shí)除B、C、D鍵均無(wú)效,按鍵D:數(shù)碼管顯示“01:01:04”,時(shí)鐘正常顯示。</p><p> 此時(shí)按鍵E,數(shù)碼管顯示“00:00:00”進(jìn)入鬧鐘模塊,按鍵B:數(shù)碼管顯示“H-01”,按鍵C兩次:數(shù)碼管顯示“F-02”,此時(shí)除B、C、D鍵均無(wú)效,按鍵D:數(shù)碼管顯示“01:01:10”,時(shí)鐘正常顯示。此時(shí)按鍵E,數(shù)碼管靜態(tài)顯示“01:
29、02:00”,按鍵D:完成設(shè)置,正常顯示。等到數(shù)碼管顯示“01:02:00”時(shí),蜂鳴器鳴響,數(shù)碼管顯示“AAAAAA”,持續(xù)十秒鐘后數(shù)碼管顯示“01:02:11” ,時(shí)鐘正常顯示,時(shí)間第二次到鬧鐘時(shí)間期間無(wú)操作則鬧鐘無(wú)效,重新設(shè)置完成后即可啟動(dòng)。</p><p> 調(diào)節(jié)時(shí)間時(shí),按鍵不抬起數(shù)值不發(fā)生變化,數(shù)碼管無(wú)顯示,抬起后調(diào)節(jié)數(shù)值加一。</p><p><b> 3.2結(jié)果分
30、析</b></p><p> 對(duì)于上述的運(yùn)行結(jié)果和操作過(guò)程,達(dá)到了課程設(shè)計(jì)任務(wù)書中的要求,可通過(guò)不同按鍵完成校時(shí)功能,并解決了系統(tǒng)掃描太快而導(dǎo)致按一次鍵變多個(gè)數(shù)的問題。顯示過(guò)程也與其他功能不產(chǎn)生沖突,在設(shè)置過(guò)程中時(shí)鐘正常工作,避免了設(shè)置鬧鐘而導(dǎo)致時(shí)間不準(zhǔn)的問題。在按鍵過(guò)程中,特定狀態(tài)只有可用鍵產(chǎn)生效果,避免了其他鍵對(duì)結(jié)果的干擾。數(shù)碼管顯示清晰,不會(huì)出現(xiàn)閃爍或暗淡的狀況。此外還添加了鬧鐘功能,可根據(jù)用
31、戶需求設(shè)置,在需要時(shí)開啟,解決了鬧鐘每天都必須響的弊端。當(dāng)按鍵E時(shí)顯示當(dāng)前設(shè)置鬧鐘時(shí)間,防止用戶忘記設(shè)置鬧鐘為幾點(diǎn)而重新設(shè)置。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]謝自美.電子線路設(shè)計(jì)實(shí)驗(yàn)測(cè)試[M].武漢:華中理工大學(xué)出版社,1992</p><p> [2]何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空
32、航天大學(xué)出版社,1993</p><p> [3]樓然笛.單片機(jī)開發(fā)[M].北京:人民郵電出版社,1994[4]付家才.單片機(jī)控制工程實(shí)踐技術(shù)[M].北京:化學(xué)工業(yè)出版社,2004[5]李光才.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2004</p><p> [6]朱定華.單片機(jī)原理及接口技術(shù)實(shí)驗(yàn)[M].北京:北方交通大學(xué)出版社,2002</p>
33、<p> [7]劉湘濤,江世明.單片機(jī)原理與應(yīng)用[M].北京:電子工業(yè)出版社,2006</p><p> [8] 張毅坤,單片微型計(jì)算機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,1998</p><p> [9] 李建忠,單片機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2002</p><p><b> 附 錄 A<
34、/b></p><p> #include<reg51.h></p><p> unsigned char xdata *p=0x8004; //8位段碼地址</p><p> unsigned char xdata *q=0x8002; //8位位碼地址</p><p> unsigned char h
35、our,min,sec,i=0;</p><p> unsigned char a_hour=0,a_min=0,a_sec=0,alarm=0,alarm_on=0;</p><p> unsigned char LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p> unsig
36、ned char LED_point[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};</p><p> unsigned char xdata *l=0x8002; //鍵盤列</p><p> unsigned char xdata *h=0x8001; //鍵盤行</p><p>
37、 sbit P1_0=P1^0;</p><p> //*****************************函數(shù)聲明******************************</p><p> void Delay(unsigned char z); //延遲程序</p><p> void timer();
38、 //秒計(jì)時(shí)器</p><p> void led_time_display();</p><p> void led_hour_display(); //設(shè)置小時(shí)顯示</p><p> void led_min_display(); //設(shè)置分鐘顯示</p>
39、<p> void led_alarm_display(); //設(shè)置鬧鐘顯示</p><p> void setting();</p><p> void clock();</p><p> void alarm_clock();</p><p> //*********************
40、********秒定時(shí)器******************************</p><p> void timer()interrupt 1 using 1</p><p><b> {</b></p><p> TH0=-(50000/256);</p><p> TL0=-(50000%256);&
41、lt;/p><p><b> i++;</b></p><p><b> if(i==10)</b></p><p><b> {</b></p><p><b> sec++;</b></p><p><b> i
42、=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> //****************************數(shù)碼管顯示*****************************</p><p> void led_ti
43、me_display() //正常時(shí)間顯示</p><p><b> {</b></p><p> if((*h&0x0f)!=0x0f) //有鍵按下</p><p><b> {</b></p&
44、gt;<p><b> *l=0xfb;</b></p><p> if((*h&0x0f)==0x07) //是否為'A'鍵:進(jìn)入時(shí)鐘設(shè)置模式</p><p><b> {</b></p><p> setting();</p>
45、<p><b> }</b></p><p><b> *l=0xf7;</b></p><p> if((*h&0x0f)==0x0e) //是否為'E'鍵:進(jìn)入鬧鐘設(shè)置模式</p><p><b> {</b></p&
46、gt;<p><b> alarm=1;</b></p><p> alarm_clock();</p><p><b> }</b></p><p><b> }</b></p><p><b> *q=0x20;</b><
47、/p><p> *p=LED[hour/10];</p><p><b> Delay(6);</b></p><p><b> *q=0x10;</b></p><p> *p=LED_point[hour%10];</p><p><b> Delay(6
48、);</b></p><p><b> *q=0x08;</b></p><p> *p=LED[min/10];</p><p><b> Delay(6);</b></p><p><b> *q=0x04;</b></p><p&g
49、t; *p=LED_point[min%10];</p><p><b> Delay(6);</b></p><p><b> *q=0x02;</b></p><p> *p=LED[sec/10];</p><p><b> Delay(6);</b></
50、p><p><b> *q=0x01;</b></p><p> *p=LED[sec%10];</p><p><b> Delay(6);</b></p><p><b> }</b></p><p> //******************
51、**************************************************</p><p> void led_alarm_display()</p><p><b> {</b></p><p><b> *q=0x20;</b></p><p> *p=LED[
52、a_hour/10];</p><p><b> Delay(6);</b></p><p><b> *q=0x10;</b></p><p> *p=LED_point[a_hour%10];</p><p><b> Delay(6);</b></p>
53、<p><b> *q=0x08;</b></p><p> *p=LED[a_min/10];</p><p><b> Delay(6);</b></p><p><b> *q=0x04;</b></p><p> *p=LED_point[a_m
54、in%10];</p><p><b> Delay(6);</b></p><p><b> *q=0x02;</b></p><p><b> *p=0x3f;</b></p><p><b> Delay(6);</b></p>
55、<p><b> *q=0x01;</b></p><p><b> *p=0x3f;</b></p><p><b> Delay(6);</b></p><p><b> }</b></p><p> //************
56、********************************************************</p><p> void led_hour_display() //設(shè)置小時(shí)</p><p><b> {</b></p><p><b> while(
57、1)</b></p><p><b> {</b></p><p><b> *l=0xfb;</b></p><p> if((*h&0x0f)==0x0b) //是否為'B'鍵:小時(shí)+1;</p><p><b&
58、gt; {</b></p><p><b> *q=0x00;</b></p><p> while((*h&0x0f)!=0x0f)</p><p><b> {}</b></p><p> if(alarm==0)</p><p><b
59、> {</b></p><p><b> hour++;</b></p><p> if(hour==24)</p><p><b> hour=0;</b></p><p><b> }</b></p><p><b&
60、gt; else</b></p><p><b> {</b></p><p><b> a_hour++;</b></p><p> if(a_hour==24)</p><p><b> a_hour=0;</b></p><p&g
61、t;<b> }</b></p><p><b> }</b></p><p> else if((*h&0x0f)==0x0d) //是否為'C'鍵:進(jìn)入分鐘設(shè)置模式</p><p><b> {</b></p><p>
62、 while((*h&0x0f)!=0x0d)</p><p><b> {}</b></p><p> led_min_display();</p><p><b> }</b></p><p> else if((*h&0x0f)==0x0e) //是
63、否為'D'鍵:完成設(shè)置</p><p><b> {</b></p><p> if(alarm==1)</p><p><b> {</b></p><p><b> alarm=0;</b></p><p> alarm_o
64、n=1;</p><p><b> }</b></p><p><b> while(1)</b></p><p> {clock();}</p><p><b> }</b></p><p><b> *q=0x08;</b&
65、gt;</p><p><b> *p=0x76;</b></p><p><b> Delay(6);</b></p><p><b> *q=0x04;</b></p><p><b> *p=0x40;</b></p><
66、p><b> Delay(6);</b></p><p> if(alarm==0)</p><p><b> {</b></p><p><b> *q=0x02;</b></p><p> *p=LED[hour/10];</p><p&
67、gt;<b> Delay(6);</b></p><p><b> *q=0x01;</b></p><p> *p=LED[hour%10];</p><p><b> Delay(6);</b></p><p><b> }</b><
68、/p><p><b> else</b></p><p><b> {</b></p><p><b> *q=0x02;</b></p><p> *p=LED[a_hour/10];</p><p><b> Delay(6);<
69、;/b></p><p><b> *q=0x01;</b></p><p> *p=LED[a_hour%10];</p><p><b> Delay(6);</b></p><p><b> }</b></p><p><b&g
70、t; }</b></p><p><b> }</b></p><p> //********************************************************************</p><p> void led_min_display() //設(shè)置分鐘&l
71、t;/p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> *l=0xfb;</b></p><p> if((*h&0x
72、0f)==0x0d) //是否為'C'鍵:分鐘+1</p><p><b> {</b></p><p><b> *q=0x00;</b></p><p> while((*h&0x0f)!=0x0f)</p><p>&
73、lt;b> {}</b></p><p> if(alarm==0)</p><p><b> {</b></p><p><b> min++;</b></p><p> if(min==60)</p><p><b> min=0;
74、</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> a_min++;</b></p><p> if(a_
75、min==60)</p><p><b> a_min=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> else if((*h&0x0f)==0x0b) //是否為'B
76、39;鍵:進(jìn)入小時(shí)設(shè)置模式</p><p><b> {</b></p><p> while((*h&0x0f)!=0x0b)</p><p><b> {}</b></p><p> led_hour_display();</p><p><b>
77、; }</b></p><p> else if((*h&0x0f)==0x0e) //是否為'D'鍵:完成設(shè)置</p><p><b> {</b></p><p> if(alarm==1)</p><p><b> {</b&g
78、t;</p><p><b> alarm=0;</b></p><p> alarm_on=1;</p><p><b> }</b></p><p><b> while(1)</b></p><p> {clock();}</p&g
79、t;<p><b> }</b></p><p><b> *q=0x08;</b></p><p><b> *p=0x71;</b></p><p><b> Delay(6);</b></p><p><b> *q
80、=0x04;</b></p><p><b> *p=0x40;</b></p><p><b> Delay(6);</b></p><p> if(alarm==0)</p><p><b> {</b></p><p><
81、b> *q=0x02;</b></p><p> *p=LED[min/10];</p><p><b> Delay(6);</b></p><p><b> *q=0x01;</b></p><p> *p=LED[min%10];</p><p&
82、gt;<b> Delay(6);</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> *q=0x02;</b></
83、p><p> *p=LED[a_min/10];</p><p><b> Delay(6);</b></p><p><b> *q=0x01;</b></p><p> *p=LED[a_min%10];</p><p><b> Delay(6);<
84、;/b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //*****************************延時(shí)程序**************************
85、*****</p><p> void Delay(unsigned char z)</p><p><b> {</b></p><p> unsigned char i,j;</p><p> for(i=z;i>0;i--)</p><p> for(j=150;j>0
86、;j--);</p><p><b> }</b></p><p> //*****************************鍵盤程序*******************************</p><p> void setting()</p><p><b> {</b>&l
87、t;/p><p><b> while(1)</b></p><p><b> {</b></p><p><b> *q=0x3f;</b></p><p> *p=0x40; //輸出'------'
88、表示進(jìn)入設(shè)置模式</p><p><b> *l=0xfb;</b></p><p> if((*h&0x0f)==0x0b) //是否為'B'鍵:進(jìn)入小時(shí)設(shè)置模式</p><p><b> {</b></p><p> led_hou
89、r_display();</p><p><b> }</b></p><p> else if((*h&0x0f)==0x0d) //是否為'C'鍵:進(jìn)入分鐘設(shè)置模式</p><p><b> {</b></p><p> led_min_d
90、isplay();</p><p><b> }</b></p><p> else if((*h&0x0f)==0x0e) //是否為'D'鍵:完成設(shè)置</p><p><b> {</b></p><p><b> while(1)<
91、;/b></p><p> {clock();}</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //**************************
92、****時(shí)鐘程序******************************</p><p> void clock()</p><p><b> {</b></p><p> for(;hour<24;hour++)</p><p><b> {</b></p><
93、;p> for(;min<60;min++)</p><p><b> {</b></p><p> if((a_hour==hour)&&(a_min==min)&&alarm_on==1) //鬧鐘時(shí)間到</p><p><b> {</b></p>
94、<p><b> do{</b></p><p> P1_0=~P1_0;</p><p><b> Delay(3);</b></p><p><b> *q=0x3f;</b></p><p><b> *p=0x77;</b>&l
95、t;/p><p> }while (sec<11);</p><p> alarm_on=0;</p><p><b> do{</b></p><p><b> *q=0x00;</b></p><p> led_time_display();</p>
96、;<p> }while (sec<60);</p><p><b> }</b></p><p><b> else</b></p><p><b> do{</b></p><p><b> *q=0x00;</b><
97、;/p><p> led_time_display();</p><p> }while (sec<60);</p><p><b> sec=0;</b></p><p><b> }min=0;</b></p><p><b> }hour=0;&l
98、t;/b></p><p><b> }</b></p><p> //******************************鬧鐘程序******************************</p><p> void alarm_clock()</p><p><b> {</b
99、></p><p><b> while(1)</b></p><p><b> {</b></p><p> led_alarm_display();</p><p><b> *l=0xfb;</b></p><p> if((*h&
100、amp;0x0f)==0x0b) //是否為'B'鍵:進(jìn)入小時(shí)設(shè)置模式</p><p><b> {</b></p><p><b> alarm=1;</b></p><p> led_hour_display();</p><p><b&
101、gt; }</b></p><p> else if((*h&0x0f)==0x0d) //是否為'C'鍵:進(jìn)入分鐘設(shè)置模式</p><p><b> {</b></p><p><b> alarm=1;</b></p><p>
102、 led_min_display();</p><p><b> }</b></p><p> else if((*h&0x0f)==0x0e) //是否為'D'鍵:完成設(shè)置</p><p><b> {</b></p><p><b> a
103、larm=0;</b></p><p> alarm_on=1;</p><p><b> while(1)</b></p><p> {clock();}</p><p><b> }</b></p><p><b> }</b>
104、</p><p><b> }</b></p><p> //*******************************主函數(shù)*******************************</p><p> void main()</p><p><b> {</b></p>
105、<p> TMOD=0x01;</p><p> TH0=-(50000/256);</p><p> TL0=-(50000%256);</p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p>&
106、lt;b> TR0=1;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> clock();</b></p><p><b> }</b></p&g
107、t;<p><b> }</b></p><p><b> 附 錄 B</b></p><p><b> 附 錄C</b></p><p> Bill of Material for BACKUP~3.Bom</p><p> Used Part T
108、ype Designator Footprint</p><p> ==== ============== ========== ==========</p><p> 1 0 S13</p><p> 1 1 S12</p><p> 2 1K
109、 R1 R4</p><p> 1 2 S14</p><p> 1 3 S16</p><p> 1 4 S2</p><p> 1 5 S4</p><p> 1
110、 6 S6</p><p> 1 6MHz Y1</p><p> 1 7 S1</p><p> 1 8 S3</p><p> 1 9 S5</p><p>
111、; 4 10K R3 R5 R6</p><p><b> R7</b></p><p> 1 20uF C3</p><p> 1 22uF C4</p><p> 1 30uF C2</p>
112、<p> 1 74LS32 U2 DIP-14</p><p> 1 74LS138 U6 DIP-16</p><p> 1 74LS245 U4 DIP-20</p><p> 2 74LS374 U1 U7
113、 DIP-20</p><p> 1 100 R2</p><p> 1 103pF C1</p><p> 1 8031AH U3 DIP-40</p><p> 1 A S7</p><
114、;p> 1 B S8</p><p> 1 C S18</p><p> 1 D S19</p><p> 6 DPY_7-SEG_DP DS1 DS2</p><p><b> DS3 DS4</b>
115、;</p><p><b> DS5 DS6</b></p><p> 1 E S17</p><p> 1 EXEC S21</p><p> 1 F S15</p><p> 1 HERE
116、 S20</p><p> 1 LAST S22</p><p> 1 MODE S9</p><p> 1 MON S11</p><p> 1 MOVE S10</p><p>
117、1 NEXT S23</p><p> 1 NOT U5</p><p> 1 NPN Q1</p><p> 1 SPEAKER LS1</p><p><b> 課程設(shè)計(jì)成績(jī)?cè)u(píng)定表</b></p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘系統(tǒng)設(shè)計(jì)
- 電子時(shí)鐘單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)——電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)——電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)-電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)----電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)-電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--電子時(shí)鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)模擬電子時(shí)鐘設(shè)計(jì)
- 數(shù)字電子時(shí)鐘-單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘.doc
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)模擬電子時(shí)鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--- 單片機(jī)電子時(shí)鐘設(shè)計(jì)
- 單片機(jī)秒表電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--電子時(shí)鐘
評(píng)論
0/150
提交評(píng)論