版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p> 1課程設(shè)計的目的和意義2</p><p><b> 1.1設(shè)計目的2</b></p><p><b> 1.2設(shè)計意義2</b></p><p> 2系統(tǒng)方案設(shè)計及確定3</p><
2、;p><b> 3系統(tǒng)硬件設(shè)計4</b></p><p> 3.1AT89S51最小系統(tǒng)設(shè)計4</p><p> 3.1.1時鐘電路硬件設(shè)計4</p><p> 3.1.2復(fù)位電路硬件設(shè)計4</p><p> 3.2鍵盤電路硬件設(shè)計5</p><p> 3.3顯示電路硬
3、件設(shè)計6</p><p> 3.4蜂鳴器電路硬件設(shè)計6</p><p><b> 4系統(tǒng)軟件設(shè)計7</b></p><p> 4.1系統(tǒng)主程序設(shè)計7</p><p> 4.2定時器設(shè)計8</p><p><b> 4.3秒表設(shè)計9</b></p&g
4、t;<p><b> 4.4鬧鐘設(shè)計9</b></p><p> 4.5其他主要子程序設(shè)計10</p><p><b> 5系統(tǒng)調(diào)試11</b></p><p><b> 6總結(jié)12</b></p><p><b> 參考文獻13&l
5、t;/b></p><p><b> 附錄14</b></p><p> 附錄一 程序清單14</p><p> 附錄二 系統(tǒng)硬件原理圖14</p><p> 1課程設(shè)計的目的和意義</p><p><b> 1.1設(shè)計目的</b></p>
6、<p> 靈活運用單片機的基礎(chǔ)知識,依據(jù)課程設(shè)計內(nèi)容,能夠完成從硬件電路圖設(shè)計,到PCB制版,再到軟件編程及系統(tǒng)調(diào)試實現(xiàn)系統(tǒng)功能,完成課程設(shè)計,加深對單片機基礎(chǔ)知識的理解,并靈活運用,將各門知識綜合應(yīng)用。</p><p> 能夠上網(wǎng)查詢器件資料,培養(yǎng)對新知識新技術(shù)的獨立的學(xué)習(xí)能力和應(yīng)用能力。</p><p> 獨立完成一個小的系統(tǒng)設(shè)計,從硬件設(shè)計到軟件設(shè)計,增強分析問題、
7、解決問題的能力,為日后的畢業(yè)設(shè)計及科研工作奠定良好的基礎(chǔ)。</p><p><b> 1.2設(shè)計意義</b></p><p> 單片機課程設(shè)計過程中,我們通過查閱資料、硬件設(shè)計、程序設(shè)計、安裝調(diào)試等環(huán)節(jié),完成了一個涉及89S51單片機多種資源應(yīng)用并具有綜合功能的小系統(tǒng)目標(biāo)板的設(shè)計與編程應(yīng)用。使我們不但能夠?qū)⒄n堂上學(xué)到的理論知識與實際應(yīng)用結(jié)合起來,而且能夠?qū)﹄娮与娐?/p>
8、、電子元器件、原理圖繪制等方面的知識進一步加深認(rèn)識,同時在軟件編程、排錯調(diào)試、焊接技術(shù)、相關(guān)軟件及儀器設(shè)備的使用技能等方面得到較全面的鍛煉和提高。使我們增進對單片機的感性認(rèn)識,加深對單片機理論方面的理解。使我們了解和掌握單片機應(yīng)用系統(tǒng)的軟硬件設(shè)計過程、方法及實現(xiàn),強化單片機應(yīng)用電路的設(shè)計與分析能力。提高我們在單片機應(yīng)用方面的實踐技能和科學(xué)作風(fēng);培育學(xué)生綜合運用理論知識解決問題的能力,實現(xiàn)理論結(jié)合實際,學(xué)以致用的原則。</p>
9、<p> 2系統(tǒng)方案設(shè)計及確定</p><p> 本次課程設(shè)計,要求用單片機及6位LED數(shù)碼管顯示時、分、秒,以24<小>時計時方式運行,能整點提醒(短蜂鳴,次數(shù)代表整點時間),使用按鍵開關(guān)可實現(xiàn)時、分調(diào)整,秒表(或鬧鐘)/時鐘功能轉(zhuǎn)換,以及實現(xiàn)省電(關(guān)閉顯示)功能。</p><p><b> 1.時鐘功能</b></p>
10、<p> 利用單片機片內(nèi)定時器(如T0)產(chǎn)生1s計時,自行設(shè)定時鐘計數(shù)單元地址,包括秒單元、分單元、時單元,最大計數(shù)值為23時59分59秒。用6位LED數(shù)碼管顯示時、分、秒,以24<小>時計時方式運行;</p><p> 使用按鍵開關(guān)可實現(xiàn)時、分調(diào)整,可增加“熄滅符”用于時間調(diào)整時的閃爍功能;</p><p> 能整點提醒(短蜂鳴,次數(shù)代表整點時間);<
11、/p><p> 可通過按鍵使系統(tǒng)進入省電狀態(tài)(數(shù)碼管不亮,時鐘不停)。</p><p><b> 2.秒表功能</b></p><p> 能通過按鍵實現(xiàn)秒表/時鐘功能之間的轉(zhuǎn)換;</p><p> 利用單片機內(nèi)部定時器(如T1)實現(xiàn)秒表的計時,自行設(shè)定秒表計數(shù)單元地址,包括10ms單元、秒單元、分單元, 通過6位LE
12、D數(shù)碼管顯示,最大計數(shù)值為99分59.99秒。</p><p> 可通過按鍵實現(xiàn)秒表的暫停、清零、啟動。 </p><p><b> 3.鬧鐘功能</b></p><p> 能通過按鍵實現(xiàn)鬧鐘/時鐘功能之間的轉(zhuǎn)換;</p><p> 可通過按鍵設(shè)定鬧鐘時間,在定時鬧鈴時精確到分,可通過6位LED數(shù)碼管顯示鬧鐘設(shè)定
13、時間。</p><p> 可通過按鍵實現(xiàn)鬧鈴有效、無效,以及在設(shè)定鬧鐘后取消鬧時功能。</p><p> 在鬧鈴時,可通過按鍵開關(guān)使蜂鳴停止。</p><p> 4.系統(tǒng)設(shè)計方案框圖如下:</p><p> 圖2-1系統(tǒng)設(shè)計方案框圖</p><p><b> 3系統(tǒng)硬件設(shè)計</b><
14、;/p><p> 3.1AT89S51最小系統(tǒng)設(shè)計</p><p> 單片機最小系統(tǒng)單片機,或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機可以工作的系統(tǒng).對51系列單片機來說,最小系統(tǒng)一般應(yīng)該包括:單片機、晶振電路、復(fù)位電路.下面給出一個51單片機的最小系統(tǒng)電路圖:</p><p> 圖3-1 51單片機最小系統(tǒng)原理圖</p><p>
15、; 3.1.1時鐘電路硬件設(shè)計</p><p> 時鐘電路是計算機最核心的部分,它控制著計算機的工作。AT 89 S51單片機內(nèi)部有一個高增益反相放大器,用于構(gòu)成振蕩器。反相放大器的輸入端為XTAL1,輸出端為XTAL2,分別是單片機的19腳和18腳。在XTAL1和XTAL2兩端跨接石英晶體及兩個電容就可以構(gòu)成穩(wěn)定的自激振蕩器。石英晶振起振后要能在XTAL2線上輸出一個3V左右的正弦波,使片內(nèi)的OCS電路按石
16、英晶振相同頻率自激震蕩。通常,OCS的輸出時鐘頻率fosc為0.5MHZ~16MHZ,典型值為12MHZ電容器C1和C2通常取30pF左右,對震蕩頻率有微調(diào)作用。調(diào)節(jié)它們可以達到微調(diào)震蕩周期fosc的目的。</p><p><b> 時鐘電路如下:</b></p><p> 圖3-2 時鐘電路電路圖</p><p> 3.1.2復(fù)位電路硬
17、件設(shè)計</p><p> 單片機的RST管腳為主機提供一個外部復(fù)位信號輸入端口。復(fù)位信號是高電平有效,高電平有效的持續(xù)時間應(yīng)為2個機器周期以上。單片機的復(fù)位方式有上電自動復(fù)位和手工復(fù)位兩種。圖4-2所示是51系列單片機常用的上電復(fù)位電路,只要Vcc上升時間不超過1ms,它們都能很好地工作。復(fù)位以后,單片機內(nèi)各部件恢復(fù)到初始狀態(tài)。</p><p> 電阻電容器件的參考值:R1=200Ω,
18、R2=1KΩ,C3=22μF。RET按鍵可以選擇專門的復(fù)位按鍵,也可以選擇輕觸開關(guān)。</p><p><b> 復(fù)位電路如下</b></p><p> 圖3-3 復(fù)位電路電路圖</p><p> 3.2鍵盤電路硬件設(shè)計</p><p> 單片機中常見的鍵盤有獨立式鍵盤和矩陣式鍵盤,獨立式鍵盤適用于實現(xiàn)功能較少的場
19、合、矩陣式鍵盤適用于功能復(fù)雜的場合。本次課程設(shè)計,采用獨立式鍵盤即可。</p><p><b> 鍵盤電路如下:</b></p><p> 圖3-4 鍵盤電路電路圖</p><p> 上拉電阻保證按鍵釋放時,輸入檢測線上有穩(wěn)定的高電平。當(dāng)某一按鍵按下時,對應(yīng)的檢測線就變成了低電平,與其他按鍵相連的檢測線仍為高電平,只需讀入I/O輸入線的狀
20、態(tài),判別哪一條I/O輸入線為低電平,很容易識別哪個鍵被按下。</p><p> 鍵的閉合與否,輸出電壓上就是呈現(xiàn)高電平或低電平。高電平,表示鍵斷開,低電平則表示鍵閉合,通過對電平的高低狀態(tài)的檢測,可確認(rèn)按鍵按下以及按鍵釋放與否。為了確保對一次按鍵動作只確認(rèn)一次按鍵有效,必須消除抖動的影響,去抖有硬件去抖和軟件去抖,本次設(shè)計采用軟件去抖。</p><p> 3.3顯示電路硬件設(shè)計<
21、/p><p> 本次課程設(shè)計,采用LED數(shù)碼管作為顯示裝置。</p><p> LED數(shù)碼管有共陰極、共陽極兩種結(jié)構(gòu),本次采用共陽極數(shù)碼管。共陽極LED數(shù)碼管的發(fā)光二極管的陽極連接在一起,公共陽極接正電壓,當(dāng)某個發(fā)光二極管的陰極接低電平時,發(fā)光二極管被點亮,相應(yīng)的段被顯示。</p><p> 8段共陽極LED段碼如下:</p><p>
22、表3-1 8段共陽極LED段碼表</p><p> LED數(shù)碼管有靜態(tài)顯示和動態(tài)顯示兩種顯示方式。靜態(tài)顯示方式,數(shù)碼管亮度高、軟件編程簡單,但是需要占用大量的I/O口,一般在多位顯示時不采用此種方法。動態(tài)顯示方式,數(shù)碼管亮度稍低、軟件編程復(fù)雜,但是占用的I/O口少,在顯示多位數(shù)字的時候適合采用此種方法??紤]到本次課程設(shè)計需要顯示六位數(shù)字,故采用動態(tài)顯示方式。</p><p> LED數(shù)
23、碼管段選、位選驅(qū)動電路均采用DM74LS244作為驅(qū)動芯片。</p><p> 3.4蜂鳴器電路硬件設(shè)計</p><p> 蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、復(fù)印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。</p><p> 蜂鳴器的工作原理是,接通電源后,振蕩器產(chǎn)生的音頻信號電流通過
24、電磁線圈,使電磁線圈產(chǎn)生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。本次課程設(shè)計中,由于單片機的I/O口驅(qū)動能力不夠讓蜂鳴器發(fā)出聲音,所以我們通過三極管放大驅(qū)動電流,從而可以讓蜂鳴器發(fā)出聲音。蜂鳴器電路如下:</p><p> 圖3-5 蜂鳴器電路電路圖</p><p><b> 4系統(tǒng)軟件設(shè)計</b></p><p>
25、 4.1系統(tǒng)主程序設(shè)計</p><p> 程序中,采用按鍵1作為主功能切換鍵,按鍵2、按鍵3、按鍵4作為子功能控制鍵。</p><p> 在主程序中,開始即進入定時器子程序,顯示當(dāng)前時間,并同時對按鍵1進行掃描。如果按鍵1第一次被按下,則進入調(diào)整時間子程序,并同時對按鍵2 、按鍵3、按鍵4進行掃描,此時按鍵2 、按鍵3、按鍵4分別作為調(diào)整時、分、秒按鈕使用;如果按鍵1第二次被按下,則進
26、入秒表子程序,并同時對按鍵2 、按鍵3、按鍵4進行掃描,按鍵2 、按鍵3、按鍵4分作為秒表啟動、暫停、停止并清理按鈕使用;如果按鍵1第三次被按下,則進入鬧鐘子程序,并同時對按鍵2 、按鍵3、按鍵4進行掃描,按鍵2 、按鍵3、按鍵4分作為鬧鐘的啟動/關(guān)閉、調(diào)整時、調(diào)整分按鈕使用;如果按鍵1第四次被按下,則進入節(jié)能子程序,此時將不對按鍵2 、按鍵3、按鍵4分進行掃描;如果按鍵1第五次被按下,則重新回到定時器子程序,如此循環(huán)。</p&g
27、t;<p><b> 主程序流程圖</b></p><p><b> 4.2定時器設(shè)計</b></p><p> 在定時器子程序當(dāng)中,采用定時器T0產(chǎn)生定時中斷。定時器T0工作于方式2,初值為TH0=0x9C,TL0=0x9C,時鐘電路采用12MHZ晶振,所以每0.1ms產(chǎn)生一次中斷,再在中斷中對時間進位進行判斷處理,使之產(chǎn)生
28、較為精準(zhǔn)的定時。</p><p><b> 定時器子程序</b></p><p><b> 4.3秒表設(shè)計</b></p><p> 在秒表子程序當(dāng)中,采用定時器T1產(chǎn)生定時中斷。定時器T1同意工作于方式2,初值為TH0=0x9C,TL0=0x9C,時鐘電路采用12MHZ晶振,所以每0.1ms產(chǎn)生一次中斷,再在中斷中
29、對時間進位進行判斷處理,使之產(chǎn)生較為精準(zhǔn)的定時。</p><p><b> 秒表子程序</b></p><p><b> 4.4鬧鐘設(shè)計</b></p><p> 在鬧鐘子程序里,按鍵2被按下奇數(shù)次時,鬧鐘打開并在第一位數(shù)碼管上顯示標(biāo)志位;按鍵2被按下偶數(shù)次時,鬧鐘關(guān)閉并熄滅第一位數(shù)碼管上的標(biāo)志位。按下按鍵3,則定時
30、時間的小時位加一;按下按鍵4,則定時時間的分鐘位加一。</p><p><b> 鬧鐘子程序</b></p><p> 4.5其他主要子程序設(shè)計</p><p> 在時鐘設(shè)置子程序中,按鍵2被按下,則當(dāng)前時間的小時位加一;按鍵3被按下,則當(dāng)前時間的分鐘位加一;按鍵4被按下,則當(dāng)前時間的秒位被清零。</p><p>
31、<b> 時鐘設(shè)置子程序</b></p><p> 當(dāng)進入節(jié)能子程序時,數(shù)碼管將全部被熄滅,此時按鍵2、按鍵3、按鍵4即使被按下也不采取任何操作。</p><p><b> 節(jié)能子程序</b></p><p> 其他說明:當(dāng)時間的小時位進一時,蜂鳴器將響起,響的“嘀”次數(shù)等于當(dāng)前時間小時位的值。當(dāng)當(dāng)前時間等于鬧鐘定
32、時時間時,蜂鳴器將不斷響起“嘀”聲,按下按鍵1后,“嘀”聲停止。</p><p><b> 5系統(tǒng)調(diào)試</b></p><p> 本次課程設(shè)計采用偉福仿真器進行程序的調(diào)試,下面介紹偉福仿真器的調(diào)試及使用。</p><p> 進入WAVE軟件后,第一步要進行仿真器設(shè)置,在仿真器選項卡中,仿真器為選擇“E6000/S”,仿真頭選擇“POD-H
33、8X5X”,CPU選擇“89C51RX”; 在目標(biāo)文件選項卡中,將所有選項前均打鉤,;在通訊設(shè)置選項卡中,將“使用偉福軟件模擬器”的“√”勾掉,然后選擇“COM1”口,點擊“測試串行口”,測試成功后,就完成了所有的仿真器設(shè)置。</p><p> 第二步,開始創(chuàng)建項目工程,在C盤根目錄下創(chuàng)建“Project”文件夾,雙擊打開,再創(chuàng)建“program . c”文件。注意,這里“Project”文件夾為工程項目所存放
34、的文件夾,文件夾名必須是英文,漢字不能用。 “program . c”文件為程序源文件,若是用匯編語言,則相應(yīng)的改為“program . asm”文件。這里文件夾名和原文件名可以是任意英文字符。點擊菜單欄“文件(F)”“新建項目”找到剛才創(chuàng)建的源文件(以C語言源文件為例),點擊“打開”,然后鍵入工程項目文件名字(以project為例,項目文件名可以任意),并點擊“保存”保存。 雙擊左側(cè)源文件“program . c”,此時即可開始編寫程
35、序了。(WAVE6000集成開發(fā)軟件是基于C語言內(nèi)核的,僅支持“ /* */ ”注釋方式,不支持“ // ”注釋方式)。</p><p> 最后介紹程序的編譯及執(zhí)行,點擊菜單欄“項目”“編譯”,無語法錯誤,編譯通過。點擊菜單欄上“執(zhí)行”“全速執(zhí)行”,進行硬件仿真調(diào)試。按停止按鈕則退出調(diào)試狀態(tài)。</p><p> 本次課程設(shè)計,我主要是參考了郭天祥老師的一些例子程序,從而逐步掌握了有關(guān)單
36、片機數(shù)碼管動態(tài)顯示、按鍵的掃描及去抖、時鐘定時賦值等一些內(nèi)容。然后根據(jù)老師的原理圖,參照例子程序,利用C語言進行編程。程序調(diào)試過程中難免出現(xiàn)各種各樣的問題,通過請教老師、網(wǎng)絡(luò)查詢、同學(xué)之間相互幫助,都逐一得到了解決。</p><p><b> 6總結(jié)</b></p><p> 為期三周的課程設(shè)計就這樣結(jié)束了,通過這次課程設(shè)計,我們不僅對單片機的學(xué)習(xí)有了更多的認(rèn)識和
37、理解,而且又填補了很多以前的知識漏洞。本次課程設(shè)計,收獲最多的當(dāng)然是單片機方面,但是同時我們又一次學(xué)習(xí)了C語言、Protel制圖等,熟悉掌握了WAVE6000的使用。</p><p> 課程設(shè)計是培養(yǎng)我們綜合運用所學(xué)知識,發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對我們實際工作能力的具體訓(xùn)練和考察過程. 回顧起此次課程設(shè)計,至今我仍感慨頗多。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,
38、只有理論知識是遠遠不夠的,唯有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正提高我們自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的很多的不足,自己知識的很多漏洞,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,看到了自己基礎(chǔ)知識還是不夠扎實,實踐經(jīng)驗還是比較缺乏,理論聯(lián)系實際的能力還待急需提高。通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。在這個過程
39、中,我真切的感到了,我又知道了很多,同時也掌握了很多以后在工作和生活中能真正用到的很多東西。但是我不會因此而驕傲,相反以后我將會更加虛心,因為我知道這只是個簡單的開始,以后還有很多的路要走。</p><p> 在此,再次感謝帶領(lǐng)我們課程設(shè)計的王老師、杜老師、張老師和蔡老師,正是有了老師們的細心教導(dǎo)、耐心指導(dǎo)、苦心監(jiān)督,我們才能夠順利完成各項學(xué)習(xí)任務(wù)、收獲真知識、鍛煉真本領(lǐng)。</p><p&g
40、t;<b> 參考文獻</b></p><p> 【1】《單片機原理與接口技術(shù)》[M].胡漢才.清華大學(xué)出版社</p><p> 【2】《MCS-51系列單片機原理及應(yīng)用》[M]. 王瑾、杜波等.中國電力出版社</p><p> 【3】《新概念51單片機C語言教程》[M].郭天祥.電子工業(yè)出版社</p><p>
41、 【4】《跟我學(xué)用單片機》[M]. 肖洪兵. 北京航空航天大學(xué)出版社</p><p> 【5】《單片機實驗與實踐教程》[M]. 夏繼強. 北京航空航天大學(xué)出版社,</p><p> 【6】《Protel DXP 電路設(shè)計技術(shù)》[M]. 孫玉軍. 冶金工業(yè)出版社</p><p> 【7】《單片機應(yīng)用設(shè)計200 例.下(第一版)》[M]. 張洪潤. 北京航空航天
42、大學(xué)出版社</p><p> 【8】《C語言程序設(shè)計》[M].楊忠寶、董曉明. 北京大學(xué)出版社</p><p><b> 附錄</b></p><p><b> 附錄一 程序清單</b></p><p><b> /*頭文件*/</b></p><p
43、> #include<reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p><b> /*定義按鍵*/</b></p><p> sbit key1=P1^0;</
44、p><p> sbit key2=P1^1;</p><p> sbit key3=P1^2;</p><p> sbit key4=P1^3;</p><p><b> /*定義蜂鳴器*/</b></p><p> sbit bell=P1^7;</p><p>
45、 /*定義數(shù)碼管位控*/</p><p> sbit LED1=P2^5;</p><p> sbit LED2=P2^4;</p><p> sbit LED3=P2^3;</p><p> sbit LED4=P2^2;</p><p> sbit LED5=P2^1;</p><p&
46、gt; sbit LED6=P2^0;</p><p><b> /*定義變量*/</b></p><p> uchar miao,fen,shi,shm,sec,min,nshi,nfen;</p><p> uchar d1,d2,d3,d4,d5,d6,m1,m2,m3,m4,m5,m6,n1,n2,n3,n4;</p>
47、;<p> uint num,num1,num2,num3,ge,ss;</p><p> /*共陰極段選碼(0-9)*/</p><p> uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p><b> /*延時函數(shù)*/<
48、/b></p><p> void delay(uint x)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=80;i>0;i--)</p><p> for(j=x;j>
49、0;j--);</p><p><b> }</b></p><p> /*時鐘顯示函數(shù)*/</p><p> void display()</p><p><b> {</b></p><p> d1=shi/10;/*高低位分離*/</p><
50、;p> d2=shi%10;</p><p> d3=fen/10;</p><p> d4=fen%10;</p><p> d5=miao/10;</p><p> d6=miao%10;</p><p> LED1=1;/*時高位*/</p><p> P0=table
51、[d1];</p><p><b> delay(1);</b></p><p><b> LED1=0;</b></p><p> LED2=1;/*時低位*/</p><p> P0=table[d2];</p><p><b> delay(1);&
52、lt;/b></p><p><b> LED2=0;</b></p><p> LED2=1;/*時低位小數(shù)點顯示*/</p><p><b> P0=0x80;</b></p><p><b> delay(1);</b></p><p&g
53、t;<b> LED2=0;</b></p><p> LED3=1;/*分高位*/</p><p> P0=table[d3];</p><p><b> delay(1);</b></p><p><b> LED3=0;</b></p><p
54、> LED4=1;/*分低位*/</p><p> P0=table[d4];</p><p><b> delay(1);</b></p><p><b> LED4=0;</b></p><p> LED4=1;/*分低位小數(shù)點顯示*/</p><p>&
55、lt;b> P0=0x80;</b></p><p><b> delay(1);</b></p><p><b> LED4=0;</b></p><p> LED5=1;/*秒高位*/</p><p> P0=table[d5];</p><p&g
56、t;<b> delay(1);</b></p><p><b> LED5=0;</b></p><p> LED6=1;/*秒低位*/</p><p> P0=table[d6];</p><p><b> delay(1);</b></p><
57、;p><b> LED6=0;</b></p><p><b> }</b></p><p> /*時鐘調(diào)整函數(shù)*/</p><p> void tiaozheng()</p><p><b> {</b></p><p> if(ke
58、y2==0)/*時+*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key2==0)</p><p><b> {</b></p><p> while(!key2);</p><p&g
59、t;<b> shi++;</b></p><p> delay(20);</p><p> if(shi==24)</p><p><b> shi=0;</b></p><p><b> }</b></p><p><b> }
60、</b></p><p> if(key3==0)/*分+*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key3==0)</p><p><b> {</b></p><p
61、> while(!key3);</p><p><b> fen++;</b></p><p> delay(20);</p><p> if(fen==60)</p><p><b> fen=0;</b></p><p><b> }</
62、b></p><p><b> }</b></p><p> if(key4==0)/*秒清零*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key4==0)</p><p>
63、<b> {</b></p><p><b> miao=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
64、; /*時鐘調(diào)整數(shù)碼管閃爍顯示函數(shù)*/</p><p> void display1()</p><p><b> {</b></p><p> d1=shi/10;</p><p> d2=shi%10;</p><p> d3=fen/10;</p><p>
65、; d4=fen%10;</p><p> d5=miao/10;</p><p> d6=miao%10;</p><p><b> if(ss==1)</b></p><p><b> {</b></p><p> LED1=1;/*時高位*/</p&g
66、t;<p> P0=table[d1];</p><p><b> delay(1);</b></p><p><b> LED1=0;</b></p><p> LED2=1;/*時低位*/</p><p> P0=table[d2];</p><p&g
67、t;<b> delay(1);</b></p><p><b> LED2=0;</b></p><p> LED2=1;/*時低位小數(shù)點顯示*/</p><p><b> P0=0x80;</b></p><p><b> delay(1);</b
68、></p><p><b> LED2=0;</b></p><p> LED3=1;/*分高位*/</p><p> P0=table[d3];</p><p><b> delay(1);</b></p><p><b> LED3=0;<
69、/b></p><p> LED4=1;/*分低位*/</p><p> P0=table[d4];</p><p><b> delay(1);</b></p><p><b> LED4=0;</b></p><p> LED4=1;/*分低位小數(shù)點顯示*
70、/</p><p><b> P0=0x80;</b></p><p><b> delay(1);</b></p><p><b> LED4=0;</b></p><p> LED5=1;/*秒高位*/</p><p> P0=table[
71、d5];</p><p><b> delay(1);</b></p><p><b> LED5=0;</b></p><p> LED6=1;/*秒低位*/</p><p> P0=table[d6];</p><p><b> delay(1);&l
72、t;/b></p><p><b> LED6=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> /*整點報時功能函數(shù)*/</p><p> void baoshi()</p
73、><p><b> {</b></p><p> if((fen==59)&(miao==59))/*整點報時功能*/</p><p><b> {</b></p><p><b> uchar bs;</b></p><p><b&g
74、t; bs=shi;</b></p><p><b> bs++;</b></p><p> while(bs>0)/*報時次數(shù)等于小時數(shù)*/</p><p><b> {</b></p><p><b> bs--;</b></p>
75、<p><b> bell=0;</b></p><p> delay(100);</p><p><b> bell=1;</b></p><p> delay(100);</p><p><b> }</b></p><p>&l
76、t;b> }</b></p><p><b> }</b></p><p> /*秒表功能控制函數(shù)*/</p><p> void miaobiao()</p><p><b> {</b></p><p> if(key2==0)/*秒表開始計
77、時*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key2==0)</p><p><b> {</b></p><p> while(!key2);</p><p><b&g
78、t; TR1=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(key3==0)/*秒表暫停*/</p><p><b> {</b></p><p> delay(
79、10);</p><p> if(key3==0)</p><p><b> {</b></p><p> while(!key3);</p><p><b> TR1=0;</b></p><p><b> }</b></p>
80、<p><b> }</b></p><p> if(key4==0)/*秒表清零*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key4==0)</p><p><b> {<
81、/b></p><p> while(!key4);</p><p><b> TR1=0;</b></p><p><b> shm=0;</b></p><p><b> sec=0;</b></p><p> min=0;
82、 </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*秒表顯示函數(shù)*/</p><p> void display2()
83、</p><p><b> {</b></p><p> m1=min/10;</p><p> m2=min%10;</p><p> m3=sec/10;</p><p> m4=sec%10;</p><p> m5=shm/10;</p>
84、<p> m6=shm%10;</p><p> LED1=1;/*分高位*/</p><p> P0=table[m1];</p><p><b> delay(1);</b></p><p><b> LED1=0;</b></p><p> LED
85、2=1;/*分低位*/</p><p> P0=table[m2];</p><p><b> delay(1);</b></p><p><b> LED2=0;</b></p><p> LED2=1;/*分低位小數(shù)點顯示*/</p><p><b>
86、 P0=0x80;</b></p><p><b> delay(1);</b></p><p><b> LED2=0;</b></p><p> LED3=1;/*秒高位*/</p><p> P0=table[m3];</p><p><b&g
87、t; delay(1);</b></p><p><b> LED3=0;</b></p><p> LED4=1;/*秒低位*/</p><p> P0=table[m4];</p><p><b> delay(1);</b></p><p><
88、;b> LED4=0;</b></p><p> LED4=1;/*秒低位小數(shù)點顯示*/</p><p><b> P0=0x80;</b></p><p><b> delay(1);</b></p><p><b> LED4=0;</b><
89、;/p><p> LED5=1;/*10ms高位*/</p><p> P0=table[m5];</p><p><b> delay(1);</b></p><p><b> LED5=0;</b></p><p> LED6=1;/*10ms低位*/</p&
90、gt;<p> P0=table[m6];</p><p><b> delay(1);</b></p><p><b> LED6=0;</b></p><p><b> }</b></p><p> /*鬧鐘設(shè)置功能函數(shù)*/</p>&
91、lt;p> void naozhong()</p><p><b> {</b></p><p> if(key2==0)/*設(shè)置鬧鐘的開關(guān)*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key2=
92、=0)</p><p><b> {</b></p><p> while(!key2);</p><p><b> num2++;</b></p><p> if(num2==3)</p><p><b> {</b></p>
93、<p> num2=1;/*鬧鐘打開*/</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(key3==0)/*定點小時+*/</p><p>&
94、lt;b> {</b></p><p> delay(10);</p><p> if(key3==0)</p><p><b> {</b></p><p> while(!key3);</p><p><b> nshi++;</b><
95、/p><p> if(nshi==24)</p><p><b> {</b></p><p><b> nshi=0;</b></p><p><b> }</b></p><p><b> }</b></p>
96、<p><b> }</b></p><p> if(key4==0)/*定點分鐘+*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key4==0)</p><p><b> {&l
97、t;/b></p><p> while(!key4);</p><p><b> nfen++;</b></p><p> if(nfen==60)</p><p><b> {</b></p><p><b> nfen=0;</b>
98、</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*鬧鐘顯示函數(shù)*/</p><
99、;p> void display3()</p><p><b> {</b></p><p> n1=nshi/10;</p><p> n2=nshi%10;</p><p> n3=nfen/10;</p><p> n4=nfen%10;</p><p&
100、gt; if(num2==1)/*第一位全顯示表示鬧鐘打開*/</p><p><b> {</b></p><p><b> LED1=1;</b></p><p><b> P0=0xff;</b></p><p><b> delay(1);</
101、b></p><p><b> LED1=0;</b></p><p><b> }</b></p><p> if(num2==2)/*第一位全滅表示鬧鐘關(guān)閉*/</p><p><b> {</b></p><p><b>
102、 LED1=1;</b></p><p><b> P0=0x00;</b></p><p><b> delay(1);</b></p><p><b> LED1=0;</b></p><p><b> }</b></p>
103、;<p> LED3=1;/*小時高位*/</p><p> P0=table[n1];</p><p><b> delay(1);</b></p><p><b> LED3=0;</b></p><p> LED4=1;/*小時低位*/</p><p
104、> P0=table[n2];</p><p><b> delay(1);</b></p><p><b> LED4=0;</b></p><p> LED4=1;/*小時低位小數(shù)點顯示*/</p><p><b> P0=0x80;</b></p&g
105、t;<p><b> delay(1);</b></p><p><b> LED4=0;</b></p><p> LED5=1;/*分鐘高位*/</p><p> P0=table[n3];</p><p><b> delay(1);</b><
106、;/p><p><b> LED5=0;</b></p><p> LED6=1;/*分鐘低位*/</p><p> P0=table[n4];</p><p><b> delay(1);</b></p><p><b> LED6=0;</b>
107、</p><p><b> }</b></p><p> /*到點提醒功能函數(shù)*/</p><p> void tixing()</p><p><b> {</b></p><p> if((num2==1)&(nshi==shi)&(nfen==
108、fen))/*鬧鐘*/</p><p><b> {</b></p><p> while(num2==1)/*按鍵key1控制蜂鳴器停止,并關(guān)閉鬧鐘*/</p><p><b> {</b></p><p><b> bell=0;</b></p>&
109、lt;p> delay(100);</p><p><b> bell=1;</b></p><p> delay(100);</p><p> if(key1==0)</p><p><b> {</b></p><p> delay(10);</p
110、><p> if(key1==0)</p><p><b> {</b></p><p> while(!key1);</p><p><b> num2=2;</b></p><p><b> }</b></p><p>
111、<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*鍵盤掃描實現(xiàn)功能切換函數(shù)*/</p><p> void ke
112、y()</p><p><b> {</b></p><p> if(key1==0)/*對key1進行計數(shù),從而判斷并切換功能*/</p><p><b> {</b></p><p> delay(10);</p><p> if(key1==0)</p&
113、gt;<p><b> {</b></p><p> while(!key1);</p><p><b> ge++;</b></p><p><b> if(ge==6)</b></p><p><b> {</b></p&
114、gt;<p><b> ge=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(ge==1)/*時間功能函數(shù)*/</p>
115、;<p><b> {</b></p><p> display();/*時間顯示函數(shù)*/</p><p><b> }</b></p><p> if(ge==2)/*時鐘調(diào)整函數(shù)*/</p><p><b> {</b></p><
116、;p> tiaozheng();/*調(diào)整時鐘*/</p><p> display1();/*顯示當(dāng)前時間并閃爍*/</p><p><b> }</b></p><p> if(ge==3)/*秒表功能函數(shù)*/</p><p><b> {</b></p><p
117、> miaobiao();/*秒表功能控制函數(shù)*/</p><p> display2();/*秒表顯示函數(shù)*/</p><p><b> }</b></p><p> if(ge==4)/*鬧鐘功能函數(shù)*/</p><p><b> {</b></p><p&g
118、t; naozhong();/*鬧鐘定時設(shè)置*/</p><p> display3();/*鬧鐘顯示*/</p><p><b> }</b></p><p> if(ge==5)/*節(jié)能功能函數(shù)*/</p><p><b> {</b></p><p> P2
119、=0x00;/*關(guān)閉所有數(shù)碼管*/</p><p><b> }</b></p><p><b> }</b></p><p><b> /*初始化函數(shù)*/</b></p><p> void init()</p><p><b>
120、{</b></p><p> TMOD=0x22;/*初始化(工作方式2:自動重裝初值)*/</p><p> TH0=0x9c;/*0.1ms定時*/</p><p><b> TL0=0x9c;</b></p><p> TH1=0x9c;/*0.1ms定時*/</p><p&
121、gt;<b> TL1=0x9c;</b></p><p> EA=1;/*開中斷*/</p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> ET1=1;</b></p&g
122、t;<p><b> IT0=1;</b></p><p><b> num2=2;</b></p><p><b> ge=1;</b></p><p><b> ss=1;</b></p><p><b> }<
123、/b></p><p><b> /*主函數(shù)*/</b></p><p> void main()</p><p><b> {</b></p><p><b> init();</b></p><p><b> while(1
124、)</b></p><p><b> {</b></p><p> key();/*按鍵掃描進行功能切換*/</p><p> baoshi();/*整點報時*/</p><p> tixing();/*鬧鐘提醒*/</p><p><b> }</b>
125、</p><p><b> }</b></p><p> /*T0中斷時間處理函數(shù)*/</p><p> void timer0() interrupt 1</p><p><b> {</b></p><p><b> num++;</b>&
126、lt;/p><p><b> num3++;</b></p><p> if(num3==5000)/*0.5s到,時鐘調(diào)整過程中閃爍一次*/</p><p><b> {</b></p><p><b> ss=~ss;</b></p><p>&
127、lt;b> num3=0;</b></p><p><b> }</b></p><p> if(num==10000)/*秒進位判斷*/</p><p><b> {</b></p><p><b> num=0;</b></p>&
128、lt;p><b> miao++;</b></p><p> if(miao==60)/*分進位判斷*/</p><p><b> {</b></p><p><b> miao=0;</b></p><p><b> fen++;</b>
129、</p><p> if(fen==60)/*時進位判斷*/</p><p><b> {</b></p><p><b> fen=0;</b></p><p><b> shi++;</b></p><p> if(shi==24)<
130、/p><p><b> {</b></p><p><b> shi=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
131、/p><p><b> }</b></p><p><b> }</b></p><p> /*T1中斷秒表處理函數(shù)*/</p><p> void timer1() interrupt 3</p><p><b> {</b></p>
132、<p><b> num1++;</b></p><p> if(num1==100)/*10ms進位判斷*/</p><p><b> {</b></p><p><b> num1=0;</b></p><p><b> shm++;<
133、;/b></p><p> if(shm==100)/*秒進位判斷*/</p><p><b> {</b></p><p><b> shm=0;</b></p><p><b> sec++;</b></p><p> if(sec=
134、=60)/*分進位判斷*/</p><p><b> {</b></p><p><b> sec=0;</b></p><p><b> min++;</b></p><p> if(min==100)</p><p><b> {
135、</b></p><p><b> min=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 時鐘計時器課程設(shè)計
- 單片機時鐘課程設(shè)計
- 單片機課程設(shè)計-單片機電秒計時器
- 單片機課程設(shè)計-秒計時器設(shè)計
- 單片機時鐘課程設(shè)計報告
- 單片機課程設(shè)計--音樂倒數(shù)計時器
- 單片機時鐘秒表課程設(shè)計報告
- 單片機課程設(shè)計時鐘設(shè)計
- 單片機課程設(shè)計--00-59_秒計時器
- 60秒倒計時器-單片機課程設(shè)計
- 單片機課程設(shè)計---籃球比賽計分計時器
- 基于c語言單片機倒數(shù)計時器課程設(shè)計
- 測控原理課程設(shè)計--時鐘計時器的設(shè)計
- 單片機答辯倒計時器課程設(shè)計報告
- 單片機課程設(shè)計---(00-59秒計時器設(shè)計)
- 課程設(shè)計-基于單片機音樂倒數(shù)計時器的設(shè)計
- 單片機課程設(shè)計--單片機60秒計時器的設(shè)計與仿真
- 60秒倒計時器-單片機課程設(shè)計報告
- 單片機原理及應(yīng)用課程設(shè)計--答辯倒計時器
- 籃球計時器課程設(shè)計
評論
0/150
提交評論