版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《微型計算機原理與應(yīng)用》</p><p><b> 課程設(shè)計報告書</b></p><p> 課題名稱:基于51單片機的電子鐘設(shè)計</p><p><b> 姓名: </b></p><p><b> 學(xué)號: </b></p><
2、;p><b> 班級: </b></p><p><b> 指導(dǎo)教師: </b></p><p><b> 目錄:</b></p><p> 任務(wù)書......................................................................
3、.........2</p><p> 系統(tǒng)總體設(shè)計方案規(guī)劃與選定.......................................2</p><p> 硬件設(shè)計...........................................................................5</p><p> 軟件設(shè)計....
4、.......................................................................6</p><p> 調(diào)試...................................................................................8</p><p> 新增功能及實現(xiàn)方法.......
5、................................................8</p><p> 小結(jié)與體會.......................................................................9</p><p> 參考文獻............................................
6、...............................9</p><p> 附錄.................................................................................10</p><p><b> 一任務(wù)書:</b></p><p> 基于大三上學(xué)期我們所
7、學(xué)過的清華大學(xué)出版社出版的《單片機原理,接口與應(yīng)用》這門課程以及軟件Keil—c51語言的學(xué)習(xí),在最后的課程設(shè)計間斷運用學(xué)過的基本理論知識,將理論聯(lián)系實際,在實際的設(shè)計過程中體會單片機的真實應(yīng)用以及用軟件進行仿真所帶來的方便性。通過系統(tǒng)構(gòu)造、流程設(shè)計、編程與調(diào)試的過程,掌握分析與解決實際問題的方法與手段,提高系統(tǒng)設(shè)計、程序編碼與調(diào)試方面的實際動手能力,做一次實際的系統(tǒng)設(shè)計訓(xùn)練,從中體會理論與實踐之間的聯(lián)系與差別。</p>
8、<p> 本次課程設(shè)計要完成硬件電路的設(shè)計和軟件的編程,使設(shè)計的數(shù)字電子時鐘可以完成以下幾點功能:</p><p> 1:六個LED上實現(xiàn)正常的時間顯示,24小時制</p><p> 2:實現(xiàn)時間的正確調(diào)節(jié)</p><p> 3: 鬧鐘的定時及到時間之后的音樂響鈴</p><p> 4:矩陣鍵盤,0到9鍵,光標的左移右移鍵
9、,鬧鐘調(diào)節(jié)鍵,時 間調(diào)節(jié)鍵,走時鍵,復(fù)位鍵,停止鍵等,其中涉及到某些鍵的復(fù)用</p><p><b> 5:實現(xiàn)秒表功能</b></p><p> 在設(shè)計過程中還用到8255來擴展并行接口,要注意8255的地址問題。同時在設(shè)計過程中還應(yīng)該注意按鍵去抖問題,保證正確的讀入按鍵值。在鍵盤掃描時要正確的設(shè)置掃描頻率,使數(shù)碼管顯示正常,人眼可以清晰
10、分辨</p><p> 二系統(tǒng)總體設(shè)計方案規(guī)劃與選定</p><p> 針對要實現(xiàn)的功能,擬采用AT89C51單片機進行設(shè)計,AT89C51 單片機是一款低功耗,高性能CMOS8位單片機,片內(nèi)含4KB在線可編程(ISP)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用高密度、非易失性存儲技術(shù)制造,兼容標準MCS- 51指令系統(tǒng)及80C51引腳結(jié)構(gòu)[7]。這樣,既能做到經(jīng)濟合理
11、又能實現(xiàn)預(yù)期的功能。</p><p> 在程序方面,采用分塊設(shè)計的方法,這樣既減小了編程難度、使程序易于理解,又能便于添加各項功能。程序可分為鬧鐘的音樂程序、時間顯示程序、鬧鐘顯示程序、調(diào)時顯示、定時程序,走時程序,復(fù)位的模塊化的程序。</p><p> 硬件接線圖如圖所示:</p><p> 對于程序的設(shè)計,遵循分塊的原則,不同的子程序?qū)崿F(xiàn)不同的功能,通過函
12、數(shù)的調(diào)用實現(xiàn)相應(yīng)的功能</p><p> 主程序:執(zhí)行主程序,按照得到的的10到15鍵值轉(zhuǎn)到相應(yīng)的子程序去執(zhí)行相應(yīng)的功能。</p><p> 模塊一:時間顯示模塊:用51單片機的6個LED七段數(shù)碼管,依次分別顯示時,分,秒,中間用小數(shù)點分開。正常走時時秒數(shù)滿60進位,分鐘加1,分鐘滿60小時加1,小時滿24清0</p><p> 模塊二:顯示時間調(diào)整模塊:當按
13、下鍵值為10的開關(guān)后,進入時間調(diào)整程序,對六個數(shù)碼管相應(yīng)位的的控制按照我們生活中的正常邏輯進行控制。進行調(diào)整時間</p><p> 模塊三:鬧鐘音樂模塊:當按下鍵值為11的開關(guān)后,進入鬧鐘時間設(shè)置狀態(tài),設(shè)定相應(yīng)的時間,當?shù)搅嗽O(shè)定的時間之后,進入產(chǎn)生中斷,進入鬧鐘音樂程序</p><p> 模塊四:鍵盤掃描得到按鍵值函數(shù):4*4矩陣鍵盤,用8255的PA口得到行值,p1口得到列值,最后得
14、到按下開關(guān)的鍵值,根據(jù)鍵值轉(zhuǎn)到相應(yīng)的模塊執(zhí)行相應(yīng)的功能。</p><p> 各個模塊程序設(shè)計好之后,要進行最后的整合,函數(shù)的調(diào)用參數(shù)設(shè)置要正確,使程序能夠正常的運行,在keil上調(diào)試通過之后,檢查proteus中硬件連接有沒有錯誤,確定無誤后,在proteus中進行模擬實驗,最后可以到實驗室進行真實元器件的連接,看一看真實電路與模擬電路之間有什么異同之處,比較總結(jié),增加自己的編程與系統(tǒng)實驗仿真能力。</p
15、><p><b> 三硬件設(shè)計</b></p><p><b> 用到的元器件如下:</b></p><p> AT89C51:該單片機功能強大,不僅能滿足設(shè)計的需要,也可以在設(shè)計要求的基礎(chǔ)上進行一些擴展。</p><p><b> 單片機的結(jié)構(gòu)如下:</b></p&
16、gt;<p> 主要應(yīng)用AT89C51單片機的p1.0到p1.3得到鍵盤的列值,p1.7通過放大器進行功率放大控制喇叭的響音樂。同時對單片機的并行接口擴展了一個8255,用p0.0和p0.1作為其地址線,同時用到了89c51的兩個十六位定時計數(shù)器T0,T1,進行顯示時間和鬧鐘響音樂的中斷控制。</p><p><b> 8255:結(jié)構(gòu)如下</b></p>&l
17、t;p> 8255是一個可編程并行接口芯片,有一個控制口和三個8位數(shù)據(jù)口,外設(shè)通過數(shù)據(jù)口與單片機進行數(shù)據(jù)通信,各數(shù)據(jù)口的工作方式和數(shù)據(jù)傳送方向是通過用戶對控制口寫控制字控制的。我們用到了PB,PC口進行對數(shù)碼顯示管的片選和段選,PA口得到按鍵的行值。</p><p><b> 數(shù)碼管:數(shù)碼管結(jié)構(gòu)</b></p><p> 使用共陰極數(shù)碼管時將6個數(shù)碼管按相
18、同功能連接起來,3與8相連,當選通端所接管腳為低電平時該數(shù)碼管選通。</p><p> 單片機的P2口作為選通端,連接各數(shù)碼管的3、8引腳輪流顯示,連接時要加7407和上拉電阻。</p><p> 單片機的P1口作為功能段,通高電平的引腳會使相應(yīng)段亮起,同樣的也要與7407和電阻連接使用。</p><p><b> 四軟件設(shè)計</b>&l
19、t;/p><p> 關(guān)于電子鐘的功能,劃分出主要功能,次要功能。程序的主要功能是準確的實現(xiàn)走時功能,我們用定時器來準確的設(shè)定時間(定時器T0準確設(shè)定中斷時間為20ms,終端中統(tǒng)計50次中斷即為一秒)。而次要功能,則是修改時間,設(shè)定鬧鐘等。在實現(xiàn)程序的同時,盡量使顯示人性化,如LED顯示時,光標的顯示與移動可以方便的修改設(shè)定時間及鬧鐘。</p><p> 主程序設(shè)計:主程序中完成對8255芯
20、片和定時器設(shè)置的初始化,然后進入無限循環(huán)的查詢模塊,動態(tài)掃描LED顯示模塊,使顯示走時正常。同時在循環(huán)中完成對矩陣鍵盤的狀態(tài)(是否有鍵按下,如有是哪一個)進行監(jiān)控,如果有鍵按下根據(jù)其鍵值跳轉(zhuǎn)到相應(yīng)的子程序中進行執(zhí)行,完成相應(yīng)的功能后會自動跳轉(zhuǎn)回來。這樣整個程序就實現(xiàn)了連續(xù)有效的運行。</p><p> 按鍵掃描子程序:首先根據(jù)端口狀態(tài)判斷是否有鍵按下,如果沒有就跳過讀鍵值這個階段。如果有鍵按下就通過行列掃描判斷
21、出所按下鍵的位置,并相應(yīng)的形成鍵值,保存在一個全局變量中等待被查詢。然后跳出子程序。</p><p> 顯示子程序:該子程序在LED掃描中被調(diào)用。首先根據(jù)參數(shù)判別是顯示時間還是顯示鬧鐘,然后針對六個位形成相應(yīng)的段碼值。通過參數(shù)值在相應(yīng)位輸出顯示。</p><p> 時間及鬧鐘設(shè)定子程序:本程序完成時間的修改及鬧鐘的設(shè)置,對時間和鬧鐘的設(shè)置是通過修改時間值的全局變量或鬧鐘值的全局變量來完
22、成的。在修改過程中正在修改位用光標來顯示,按下數(shù)字后光標自動轉(zhuǎn)移到下一位,可以通過左右移動光標來實現(xiàn)正在修改位的調(diào)整。當六位全部修改完畢,或者按下確定/退出鍵后自動跳出子程序。</p><p> 響鈴子程序:當設(shè)定的鬧鐘時間到時,轉(zhuǎn)入本程序執(zhí)行。本程序通過讀取頻率表來設(shè)定T1定時中斷的設(shè)定,以在響鈴端口輸出頻率一定的脈沖波。同時通過讀取時間表控制每一頻率所響的時間,這樣就可以在揚聲器輸出音樂了。同時在程序中添加
23、了鍵盤掃描環(huán)節(jié),一旦按下退出鍵,就關(guān)閉T1定時器,跳出程序,響鈴就可以終止。</p><p><b> 五調(diào)試</b></p><p> 由于我們采用了“模塊化”的編程思路,程序的調(diào)試變得相對簡單。首先我們編制出主程序,使走時功能正常完成,顯示現(xiàn)在的時間,過程中出現(xiàn)的主要問題是動態(tài)掃面的相關(guān)參數(shù)設(shè)置不合理,顯示出現(xiàn)不正常的現(xiàn)象;然后我們開始編寫相關(guān)子程序,由于幾個
24、主要的子程序之間沒有參數(shù)上的直接聯(lián)系,所以我們分別編寫各個子程序,調(diào)試功能無誤后添加到主干程序中來。由于程序編寫分工完成,這個階段碰到最大的問題之一就是程序中對變量的復(fù)雜定義極大的浪費了資源,甚至有些重名的非法定義。然后我們通過設(shè)置幾個統(tǒng)一的全局變量,在各個子程序中分別對全局變量做出不同的修改已完成不同的功能。最后這個問題得到了比較好的解決。</p><p> 程序調(diào)試中還出現(xiàn)了種種命令的錯誤使用,以及不注意所
25、造成的錯誤,而更重要的是邏輯錯誤。很多時候程序執(zhí)行出來的結(jié)果和所設(shè)想的有很大差距,這就靠著不斷的修正邏輯錯誤來調(diào)試。</p><p> 六新增功能及實現(xiàn)方法</p><p> 在原先的電子時鐘基礎(chǔ)上添加秒表功能,基本要求如下:應(yīng)具有開始,暫停,繼續(xù),清零的基本功能,并且要求在秒表模式下,不再對所定的鬧鐘有反應(yīng),即要求鬧鐘模式與時鐘模式完全分離。</p><p>
26、 實現(xiàn)方法如下:將鍵12,13,14復(fù)用,分別作為開始鍵,暫停(繼續(xù))鍵和清零鍵。在鍵盤掃描過程中,如果掃描到14鍵按下,則轉(zhuǎn)到清零函數(shù),開始進入秒表模式。由于在清零函數(shù)中,將變量pp置零,取消了鬧鐘模式,因此在秒表模式下不會出現(xiàn)鬧鈴響的情況。按下鍵12,啟動定時器T0工作,開始計時,當鍵盤掃描檢測到13鍵按下時,令TR0取反,計時器T0停止工作,再按一下13鍵時,TR0再取反,T0又繼續(xù)工作,這樣就實現(xiàn)了暫停和繼續(xù)的功能 。注意,在
27、鍵盤掃描值得到以后因為要轉(zhuǎn)向不同的處理程序,在處理程序中要將鍵值先修改,避免因鍵值不變,而重復(fù)進入子程序。此處說明12,13鍵的復(fù)用原理:12,13鍵作為時間模式下的光標左右移動鍵,是在先按下調(diào)時鍵(10鍵)或定時鍵(11鍵)后轉(zhuǎn)向修改時間函數(shù)后才起作用的,而直接按下12,13鍵會自動轉(zhuǎn)向秒表模式,不會進入時間模式,因此也就不會與此鍵的其他復(fù)用功能產(chǎn)生沖突。</p><p><b> 七小結(jié)</
28、b></p><p> 項目進行中遇到了各種各樣的問題,有些問題是預(yù)想中沒有過的。項目的開始主要問題是Keil所編寫的程序如何導(dǎo)入到Proteus中,然后在Proteus中進行仿真。程序正常編寫過程中遇到的主要問題是邏輯的錯誤,往往很多程序的運行并不像預(yù)想的那樣,所以往往要一遍遍重復(fù)的修改,這個工作量是相當大的。其次,就是課本知識掌握并不是特別扎實,有些命令的使用出現(xiàn)了些許的小問題。總之,這次的項目鍛煉了
29、我的能力,真正的把學(xué)到的知識運用到了實際當中去,做出的東西也很讓人振奮。</p><p><b> 八參考文獻</b></p><p> 【1】《單片機原理、接口及應(yīng)用——單片機嵌入式系統(tǒng)技術(shù)基礎(chǔ)(第2版)》,肖看、李群芳,清華大學(xué)出版社</p><p> 【2】《51單片機開發(fā)與應(yīng)用技術(shù)詳解》,趙建領(lǐng)、薛圓圓,電子工業(yè)出版社</p
30、><p><b> 附錄:源程序代碼</b></p><p> #include "Absacc.h"</p><p> #include "reg51.h"</p><p> //8255端口地址定義</p><p> #define C8255_
31、A XBYTE[0x7F00]</p><p> #define C8255_B XBYTE[0x7F01]</p><p> #define C8255_C XBYTE[0x7F02]</p><p> #define C8255_CON XBYTE[0x7F03]</p><p> //鍵盤及數(shù)碼管顯
32、示變量組</p><p> unsigned char data timer=0,second=0,minute=0,hour=0;</p><p> unsigned char data second_bell=59,minute_bell=59,hour_bell=23;</p><p> unsigned code tab_high[10]={0x3f,
33、0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p> unsigned code tab_low[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};</p><p> unsigned code tab_position[6]={0x3e,0x3d,0x3b,0x37
34、,0x2f,0x1f};</p><p> unsigned char tab2[6]={0x00,0x00,0x00,0x00,0x00,0x00}; </p><p> unsigned char key_down;</p><p> unsigned char key_value;</p><p> unsigned char
35、flag,tab,pp=1;</p><p> unsigned char data position=0;</p><p> unsigned int val;</p><p> unsigned char i;</p><p> unsigned char number=100;</p><p><b
36、> //響鈴函數(shù)變量組</b></p><p> #define Clk 0x070000</p><p> sbit P17 = P1^7;//揚聲器控制引腳</p><p> unsigned char data val_H;//計數(shù)器高字節(jié)</p><p> unsigned char data
37、val_L;//計數(shù)器低字節(jié)</p><p><b> //響鈴音樂頻率表</b></p><p> unsigned int code freq_list[] = {371,495,495,495,624,556,495,556,624,</p><p> 495,495,624,742,833,833,833,742,624,&l
38、t;/p><p> 624,495,556,495,556,624,495,416,416,</p><p> 371,495,833,742,624,624,495,556,495,</p><p> 556,833,742,624,624,742,833,990,742,</p><p> 624,624,495,556,495,55
39、6,624,495,416,</p><p> 416,371,495,0};</p><p> //響鈴音樂頻率對應(yīng)時間表</p><p> unsigned char code time_list[]= { 4, 6, 2, 4, 4, 6, 2, 4, 4, 6,</p><p> 2, 4, 4,12, 1, 3, 6, 2
40、, 4, 4,</p><p> 6, 2, 4, 4, 6, 2, 4, 4,12, 4,</p><p> 6, 2, 4, 4, 6, 2, 4, 4, 6, 2,</p><p> 4, 4,12, 4, 6, 2, 4, 4, 6, 2,</p><p> 4, 4, 6, 2, 4, 4,12}; </p>
41、<p><b> //延時函數(shù)</b></p><p> void delay_short(void)</p><p><b> {</b></p><p><b> int i=0;</b></p><p> for(i=0;i<=255;i++)
42、{}</p><p><b> }</b></p><p><b> //清除函數(shù)</b></p><p> void clear()</p><p><b> {</b></p><p><b> timer=0;</b>
43、;</p><p><b> second=0;</b></p><p><b> minute=0;</b></p><p><b> hour=0;</b></p><p><b> pp=0;</b></p><p>
44、<b> }</b></p><p> //***********************************//</p><p> //鍵盤函數(shù)組(包括按鍵掃描函數(shù)、得到按鍵值函數(shù)和鍵盤情況函數(shù)) </p><p><b> //按鍵掃描函數(shù)</b></p><p> void k
45、eyscan()</p><p><b> {</b></p><p> unsigned char cc;</p><p> P1= 0x00;</p><p> cc = C8255_C;key_down = (~cc) & 0x0f;</p><p&g
46、t;<b> } </b></p><p><b> //得到按鍵值函數(shù)</b></p><p> void getkey()</p><p><b> {</b></p><p> unsigned char value;</p><
47、p> unsigned char i, j = 0x0e;</p><p> for(i=0; i<4; i++)</p><p><b> {</b></p><p><b> P1 = j;</b></p><p> value = C8255_C & 0x0f;&
48、lt;/p><p> if(!(value & 0x01))</p><p><b> {</b></p><p> key_value = i + 0;</p><p><b> return;</b></p><p><b> }</b>
49、;</p><p> if(!(value & 0x02))</p><p><b> {</b></p><p> key_value = i + 4;</p><p><b> return;</b></p><p><b> }</b&
50、gt;</p><p> if(!(value & 0x04))</p><p><b> {</b></p><p> key_value = i + 8;</p><p><b> return;</b></p><p><b> }</
51、b></p><p> if(!(value & 0x08))</p><p><b> {</b></p><p> key_value = i + 12;</p><p><b> return;</b></p><p><b> }&l
52、t;/b></p><p><b> j <<= 1;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> //鍵盤情況函數(shù)</b></p><p&g
53、t; void keycondition()</p><p><b> {</b></p><p> keyscan();</p><p> if(key_down)</p><p><b> {</b></p><p> delay_short()
54、; </p><p> keyscan();</p><p> if(key_down)</p><p><b> {</b></p><p> getkey();</p><p><b> }</b></p><p><
55、b> } </b></p><p><b> }</b></p><p> //***********************************//</p><p> //顯示函數(shù)組(包括數(shù)碼管顯示函數(shù)和顯示光標函數(shù))</p><p><b> //數(shù)碼管顯示函數(shù)</b&
56、gt;</p><p> void display( unsigned char V ,unsigned char M)</p><p><b> {</b></p><p><b> if(M==0)</b></p><p><b> {</b></p
57、><p> tab2[5] = hour/10%10;</p><p> tab2[4] = hour%10; </p><p> tab2[3] = minute/10%10;</p><p> tab2[2] = minute%10; </p><p> tab2[1] = second/10%10;<
58、/p><p> tab2[0] = second%10;</p><p><b> }</b></p><p><b> if(M==1)</b></p><p><b> {</b></p><p> tab2[5] = hour_bell/10
59、%10;</p><p> tab2[4] = hour_bell%10; </p><p> tab2[3] = minute_bell/10%10;</p><p> tab2[2] = minute_bell%10; </p><p> tab2[1] = second_bell/10%10;</p><p&
60、gt; tab2[0] = second_bell%10;</p><p><b> }</b></p><p><b> if(V==0)</b></p><p><b> {</b></p><p> C8255_A=tab_position[0]; </p
61、><p> C8255_B=tab_high[tab2[5]];</p><p> delay_short();</p><p><b> }</b></p><p><b> if(V==1)</b></p><p><b> {</b><
62、;/p><p> C8255_A=tab_position[1]; </p><p> C8255_B=tab_low[tab2[4]];</p><p> delay_short();</p><p><b> }</b></p><p><b> if(V==2)</b
63、></p><p><b> {</b></p><p> C8255_A=tab_position[2]; </p><p> C8255_B=tab_high[tab2[3]];</p><p> delay_short();</p><p><b> }</
64、b></p><p><b> if(V==3)</b></p><p><b> {</b></p><p> C8255_A=tab_position[3]; </p><p> C8255_B=tab_low[tab2[2]];</p><p> de
65、lay_short();</p><p><b> }</b></p><p><b> if(V==4)</b></p><p><b> {</b></p><p> C8255_A=tab_position[4]; </p><p> C
66、8255_B=tab_high[tab2[1]];</p><p> delay_short();</p><p><b> }</b></p><p><b> if(V==5)</b></p><p><b> {</b></p><p>
67、 C8255_A=tab_position[5]; </p><p> C8255_B=tab_high[tab2[0]];</p><p> delay_short();</p><p><b> }</b></p><p><b> }</b></p><p>
68、;<b> //顯示光標函數(shù)</b></p><p> void display_cursor( unsigned char V )</p><p><b> {</b></p><p> if((V%2)==0)</p><p><b> tab=0x08;</
69、b></p><p> if((V%2)==1)</p><p><b> tab=0x88;</b></p><p> C8255_A=tab_position[V]; </p><p> C8255_B=tab;</p><p> delay_short();</p>
70、;<p> } //**********************************//</p><p><b> //響鈴函數(shù)</b></p><p> void bell_sound(void)</p><p><b> {</b></p><p> unsig
71、ned int val;</p><p> unsigned char i;</p><p> unsigned char m,k,mark=1;</p><p><b> TR1 = 1;</b></p><p> while(mark)</p><p><b> {<
72、/b></p><p><b> i = 0;</b></p><p> while((freq_list[i]!=0)&&(mark==1)){ </p><p> keycondition();</p><p> if(key_value==15)</p><p
73、><b> {</b></p><p><b> TR1=0;</b></p><p><b> mark=0;</b></p><p><b> }</b></p><p> val = Clk/(freq_list[i]);</p
74、><p> val = 0xFFFF - val;</p><p> val_H = (val>>8)&0xff;</p><p> val_L = val&0xff;</p><p> TH1 = val_H;</p><p> TL1 = val_L;</p>
75、<p> for(m=0;m<time_list[i];m++)</p><p><b> {</b></p><p> for(k=0;k<0x26;k++)</p><p><b> {</b></p><p> if(position<=5)</p&
76、gt;<p><b> {</b></p><p> display(position,0) ;</p><p> position+=1;</p><p><b> }</b></p><p><b> else</b></p><
77、p> position=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> i++;</b></p><p><b> }</b></p><p><b&
78、gt; }</b></p><p><b> }</b></p><p> //***********************************//</p><p><b> //調(diào)整時間函數(shù)</b></p><p> void modify_time(unsigned
79、char d)</p><p> {unsigned char a,b,c;</p><p> key_value=100;</p><p> for(flag=0 ; flag<=5 ; )</p><p><b> {</b></p><p> if(position<
80、=5)</p><p><b> { </b></p><p> if(position!=flag)</p><p> display(position,d) ;</p><p> if(position==flag)</p><p> display_cursor( positio
81、n ); </p><p> delay_short() ;</p><p> delay_short() ;</p><p> position+=1;</p><p><b> }</b></p><p><b> else</b></p>&
82、lt;p> position=0;</p><p> if(number>=100)</p><p> keycondition();</p><p> if(number<100)</p><p> number=number+1;</p><p> if((key_value==12
83、)&&(flag>0))</p><p><b> {</b></p><p> flag=flag-1;</p><p> key_value=100;</p><p> delay_short();</p><p><b> number=0;<
84、/b></p><p><b> }</b></p><p> if((key_value==13)&&(flag<5))</p><p><b> {</b></p><p> flag=flag+1;</p><p> key_val
85、ue=100;</p><p> delay_short();</p><p><b> number=0;</b></p><p><b> }</b></p><p> if((key_value==15))</p><p><b> flag=6;&
86、lt;/b></p><p> if((0<=key_value)&&(key_value<=9))</p><p><b> {</b></p><p> delay_short();</p><p> if((flag==0)&&(key_value<3
87、))</p><p><b> {</b></p><p> a=a%10+key_value*10; </p><p> key_value=100;</p><p> flag=flag+1;</p><p> delay_short();</p><p>
88、;<b> number=0;</b></p><p> } if((flag==1)&&(key_value!=100)&&(key_value<10))</p><p><b> {</b></p><p> a=a/10*10+key_value; <
89、/p><p> key_value=100;</p><p> flag=flag+1;</p><p> delay_short();</p><p><b> number=0;</b></p><p> } if((flag==1)&&(key_value!=10
90、0)&&(key_value<4))</p><p><b> {</b></p><p> a=a/10*10+key_value; </p><p> key_value=100;</p><p> flag=flag+1;</p><p> delay_s
91、hort();</p><p><b> number=0;</b></p><p> } if((flag==2)&&(key_value!=100)&&(key_value<6))</p><p><b> {</b></p><p> b
92、=b%10+key_value*10; </p><p> key_value=100;</p><p> flag=flag+1;</p><p> delay_short();</p><p><b> number=0;</b></p><p> } if((flag
93、==3)&&(key_value!=100)&&(key_value<10))</p><p><b> {</b></p><p> b=b/10*10+key_value; </p><p> key_value=100;</p><p> flag=flag+1;&
94、lt;/p><p> delay_short();</p><p><b> number=0;</b></p><p> } if((flag==4)&&(key_value!=100)&&(key_value<6))</p><p><b> {</
95、b></p><p> c=c%10+key_value*10; </p><p> key_value=100;</p><p> flag=flag+1;</p><p> delay_short();</p><p><b> number=0;</b></p>
96、;<p> } if((flag==5)&&(key_value!=100)&&(key_value<10))</p><p><b> {</b></p><p> c=c/10*10+key_value; </p><p> key_value=100;</p
97、><p> flag=flag+1;</p><p> delay_short();</p><p><b> number=0;</b></p><p><b> } </b></p><p><b> if(d==0)</b></p>
98、;<p><b> {</b></p><p><b> hour=a;</b></p><p><b> minute=b;</b></p><p><b> second=c;</b></p><p><b> }&l
99、t;/b></p><p><b> if(d==1)</b></p><p><b> {</b></p><p> hour_bell=a;</p><p> minute_bell=b;</p><p> second_bell=c;</p>
100、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> flag=0;</b></p><p> number=100;</p><p&
101、gt;<b> }</b></p><p> //***********************************//</p><p> //定時器中斷函數(shù)組(包括定時器0和定時器1中斷處理程序)</p><p> //定時器0中斷程序 </p><p> timer0()interrupt 1 usi
102、ng 1</p><p><b> {</b></p><p><b> timer+=1;</b></p><p> TH0=-20000/256;</p><p> TL0=-20000%256;</p><p> if(timer>=50)</p&
103、gt;<p><b> {</b></p><p><b> timer=0;</b></p><p> second+=1;</p><p> if(second==60)</p><p><b> {</b></p><p>
104、;<b> second=0;</b></p><p> minute+=1;</p><p> if(minute==60)</p><p><b> {</b></p><p><b> minute=0;</b></p><p><
105、b> hour+=1;</b></p><p> if(hour==24)</p><p><b> {</b></p><p><b> hour=0;</b></p><p><b> }</b></p><p><
106、b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //定時器1中斷處理程序</p><p> void timer1() i
107、nterrupt 3</p><p><b> {</b></p><p> P17 = ~P17;TH1 = val_H;</p><p> TL1 = val_L;</p><p><b> }</b></p><p> //*
108、**********************************//</p><p><b> //主函數(shù)</b></p><p> void main()</p><p> { IP = 0x02;</p><p> TMOD=0x11;</p><p> IE = 0x8a;&
109、lt;/p><p> TH0=-20000/256;</p><p> TL0=-20000%256;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p> C8255_CON = 0x81;</p
110、><p><b> while(1)</b></p><p><b> { </b></p><p> keycondition();</p><p> switch(key_value)</p><p><b> {</b></p>
111、;<p> case 10: {modify_time(0);}; break;</p><p> case 11: {modify_time(1);}; break;</p><p> case 12: { TR0=1;}; break;</p><p> case 13: {key_value=100; TR0=~TR0;}; break;
112、</p><p> case 14: {clear();}; break;</p><p><b> }</b></p><p> if(position<=5)</p><p><b> {</b></p><p> display(position,0)
113、;</p><p> delay_short() ;</p><p> delay_short() ;</p><p> position+=1;</p><p><b> }</b></p><p><b> else</b></p><p
114、> position=0;</p><p> if((second==second_bell)&&(minute==minute_bell)&&(hour==hour_bell)&&pp==1)</p><p> bell_sound(); </p><p><b> }</b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計--- 基于51單片機的簡約電子鐘
- 單片機課程設(shè)計--基于單片機的數(shù)字電子鐘
- 單片機課程設(shè)計--基于單片機的電子鐘的設(shè)計
- 單片機課程設(shè)計報告---單片機的電子鐘設(shè)計
- 單片機c語言課程設(shè)計--基于單片機的電子鐘設(shè)計
- 單片機課程設(shè)計--電子鐘
- 單片機課程設(shè)計(電子鐘)
- 電子鐘課程設(shè)計--基于單片機的電子鐘設(shè)計
- 電子鐘單片機課程設(shè)計
- 基于單片機的電子鐘課程設(shè)計
- 基于單片機的電子鐘課程設(shè)計
- 單片機課程設(shè)計——數(shù)字電子鐘
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計---智能電子鐘
- 單片機課程設(shè)計-基于單片機的多功能電子鐘的設(shè)計
- 單片機課程設(shè)計---電子鐘的設(shè)計
- 單片機課程設(shè)計--數(shù)字電子鐘
- 單片機課程設(shè)計-智能電子鐘
- 基于51單片機的數(shù)字電子鐘設(shè)計
評論
0/150
提交評論