2014級測控技術(shù)與儀器專業(yè)綜合課程設(shè)計
摘 要20世紀(jì)末,電子技術(shù)飛速發(fā)展,現(xiàn)代電子產(chǎn)品幾乎滲透到社會各個領(lǐng)域,從而有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也進一步提高了現(xiàn)代電子產(chǎn)品性能,加快了電子產(chǎn)品的更新?lián)Q代節(jié)奏。時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人們忘記當(dāng)時時間。
本系統(tǒng)是基于AT89C51單片機的具有準(zhǔn)點報時、調(diào)時、以及可設(shè)鬧鐘功能的簡單數(shù)字時鐘系統(tǒng)的設(shè)計。以AT89C51為核心控制器,系統(tǒng)分為時鐘模塊、顯示模塊、按鍵模塊及鬧鐘模塊。系統(tǒng)以單片機內(nèi)部定時器作為時鐘模塊的主要控制模塊,通過頻率計數(shù)實現(xiàn)計時功能,采用了8位數(shù)碼管來顯示時間,獨立按鍵做為時間調(diào)時以及鬧鐘設(shè)置按鍵,蜂鳴器作為報時鬧鐘系統(tǒng)。通過Keil軟件C語言程序的編寫、編譯、調(diào)試以及硬件單片機的連接,實現(xiàn)了時間顯示(24小時制)、鬧鐘設(shè)置、時間調(diào)試以及準(zhǔn)點報時,可復(fù)位的功能。通過運行該電路程序,得出該系統(tǒng)符合實驗設(shè)計要求。
ABSTRACT
The end of the 20th century, obtained the rapid development of electronic technology, under the push, the modern electronic products almost permeated all fields of society, vigorously promoted the development of social productivity and the enhancement of social information degree, but also makes the modern electronic products performance further improve, product update rhythm also more faster. Time is always precious to people, and the busyness and complexity of the work make people forget the time.
The system is based on the design of a simple digital clock system with the time, timing and alarm function of the AT89C51 single chip microcomputer. With AT89C51 as the core controller, the system is divided into clock module, display module, key module and alarm module. System with the single chip processor as the main control module of the clock module, internal timer timing functions are implemented by frequency count, used the eight digital tube to display the time, separate button as time and alarm when the regulation of key, buzzer as the time clock system. C language program written by Keil software, compilation, debugging and single chip microcomputer hardware connection, realize the time display (24-hour), setting the alarm clock, time debugging and tell the time on time, can be reset function. By running the circuit program, the system complies with the experimental design requirements.
目 錄
摘 要 I
Abstract II
1 設(shè)計任務(wù)書
1.1 涉及專業(yè)課程 (1)
1.2 設(shè)計任務(wù) (1)
1.3 設(shè)計目標(biāo) (1)
1.4 本設(shè)計的主要功能 (2)
1.5 設(shè)計意義 (2)
1.6 本章小結(jié) (2)
2 設(shè)計論證及計劃
2.1 方案論證 (3)
2.2 設(shè)計原理 (3)
2.3 設(shè)計規(guī)劃 (8)
2.4 本章小結(jié) (9)
3 硬件設(shè)計
3.1 顯示模塊 (10)
3.2 按鍵模塊 (10)
3.3 蜂鳴器模塊 (11)
3.4 核心控制及時間控制模塊 (12)
3.5 本章小結(jié) (13)
4 軟件及編程分析
4.1 主程序流程圖 (14)
4.2 軟件編程及分析 (14)
4.3 實驗結(jié)果圖 (16)
4.4 本章小結(jié) (17)
5 總結(jié)與展望
5.1 課程設(shè)計總結(jié) (18)
5.2 工作展望 (18)
附 錄A 設(shè)計程序 (18)
附 錄 B 設(shè)計參考資料 (29)
1 設(shè)計任務(wù)書本設(shè)計主要設(shè)計的專業(yè)課程有:
1、單片機原理及應(yīng)用
通過軟件程序的編程,硬件電路的調(diào)試,實現(xiàn)簡單時鐘系統(tǒng)的設(shè)定,使得該系統(tǒng)具有正常走時,能夠正確的顯示時、分、秒;能夠進行調(diào)時,修改當(dāng)前的時間,并且能夠設(shè)定鬧鐘,使鬧鐘能夠定時響。首先是時間的調(diào)試:若要進行正常的時間調(diào)試需要有進入時間的調(diào)時試狀態(tài)按鍵以及調(diào)試是加或者是減的按鍵,即每個狀態(tài)需要3個按鍵,共有時、分、秒三個狀態(tài),這樣就一共需要9個按鍵,硬件設(shè)計需要的按鍵增多,且加大了軟件編程復(fù)雜度。為解決以上問題,可通過同一個按鍵來控制定時器的走與停,以及通過按鍵次數(shù)來控制所進入的調(diào)試狀態(tài)是時、分還是秒。當(dāng)調(diào)試進入某一狀態(tài)時,需要分別通過兩個按鍵來控制時間的加與減,而此時的加與減的按鍵相當(dāng)于是局部變量,可以在三個狀態(tài)中分別使用,這樣一共就只需要3個按鍵,大大節(jié)省了硬件用量并且簡化了軟件編程。針對此解決方案,設(shè)3個按鍵分別為key1、key2和key3,設(shè)計為當(dāng)按鍵key1被按下時,停止走時,進入調(diào)時狀態(tài):當(dāng)key1被按下1次,進行秒的調(diào)整;當(dāng)key1被按下2次,進行分的調(diào)整;當(dāng)key1被按下3次,進行時的調(diào)整;當(dāng)key1被按下4次,停止調(diào)時,繼續(xù)進行走時。在key1被按下4次以下的情況下,若按下key2鍵,則進行時間加,若按下key3,則進行時間減。其次是鬧鐘設(shè)定:基于時間調(diào)試的設(shè)置思路,同樣將進入鬧鐘狀態(tài)以及鬧鐘設(shè)定的按鍵分開,考慮到此時鬧鐘設(shè)置時,數(shù)碼管顯示問題以及定時器走時問題,故將進入鬧鐘的設(shè)定狀態(tài)和時設(shè)定、分設(shè)定的按鍵分開,而分和時的設(shè)定又都需要時間的加和減,即各需要兩個按鍵,再加上進入鬧鐘設(shè)定狀態(tài)的一個按鍵,共需要5個按鍵來實現(xiàn)鬧鐘設(shè)定。針對此方案,設(shè)5個按鍵分別為key0、key4、key5、key6和key7,其中key0為進入鬧鐘狀態(tài)按鍵,key4和key6分別為分鐘設(shè)定的加和減的按鍵,key5和key7分別為時設(shè)定的加和減的按鍵。依照思路可設(shè)定為當(dāng) key0一直被按住的情況下,此時進入鬧鐘設(shè)定狀態(tài),但是定時器仍然在工作。在key0一直被按住的情況下,若key4或key5被按下,則分別進行分和時的累加狀態(tài);若key6和key7被按下,則分別進行分和時的減狀態(tài),當(dāng)放開key0時,繼續(xù)進行走時。若想再次進行鬧鐘的設(shè)定,重復(fù)上述的步驟,不過當(dāng)再次按下按鍵 key0時,則顯示上次設(shè)置的鬧鐘時間。
結(jié)合設(shè)計任務(wù),本課程設(shè)計要求的設(shè)計目標(biāo)如下:
一、完成目標(biāo)
通過Keil軟件C語言程序的編寫、編譯、調(diào)試以及硬件單片機的連接,實現(xiàn)時間顯示(24小時制)、鬧鐘設(shè)置、時間調(diào)試以及準(zhǔn)點報時,可復(fù)位的功能,并運行該電路程序,驗證設(shè)計的系統(tǒng)是否符合實驗設(shè)計要求。
應(yīng)用知識: I/O 口應(yīng)用、數(shù)碼顯示、定時 /計數(shù)器。
基本要求:設(shè)計一時鐘系統(tǒng),系統(tǒng)具有時鐘功能,能準(zhǔn)確顯示時、分、秒。系統(tǒng)還應(yīng)具有以下功能:
校正功能:能夠修改當(dāng)前的時間。
擴展部分:具備設(shè)定鬧鐘和定時鬧鐘響功能。
單片機模塊最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準(zhǔn)確性和直觀性,且無機械裝置,具有更長的使用壽命,所以得到了廣泛的使用。
數(shù)字鐘是采用數(shù)字電路實現(xiàn)對時、分、秒數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站,碼頭,辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋仨毱。基?1單片的電子時鐘,外圍電路簡單易于實現(xiàn),性價比高,是實現(xiàn)電子時鐘的不錯選擇。研究電子鐘及擴大其應(yīng)用,有著非常現(xiàn)實的意義。
給出設(shè)計電子時鐘的功能需求以及所需的技術(shù)指標(biāo),通過Keil軟件C語言程序的編寫、編譯、調(diào)試以及硬件單片機的連接來實現(xiàn)任務(wù)。
2 設(shè)計論證及計劃本章將會結(jié)合單片機對核心控制模塊、顯示模塊、按鍵模塊進行方案的選擇。
2.1方案論證
(1)核心控制模塊
方案一:采用FPGA作為核心控制模塊。FPGA具有強大的資源,使用方便靈活,易于進行功能擴展,特別是結(jié)合了EDA,可以達到很高的效率。此方案雖然邏輯相對較為簡單,但由于FPGA的價格過高且比較難掌握,對于設(shè)計數(shù)字時鐘考慮成本和算法問題,本設(shè)計將不采用此方案。
方案二:采用AT89C51作為核心控制模塊。此方案中AT89C51單片機的入門學(xué)習(xí)相對交容易,易于理解,外圍電路比較簡單,成本比較低;贏T89C51單片機的系統(tǒng)控制靈活,能很好地滿足本課題的基本要求和擴展要求,因此選用該方案。
方案一:采用LCD1602液晶顯示屏。液晶顯示屏耗電量低、體積小、輻射低。但其使用時受溫度范圍限制,且因是反光式的,在外界光線很明亮的情況下很容易看不清楚。數(shù)碼管是 LED發(fā)光效果, 液晶是分子偏轉(zhuǎn)引起的暗影效果,顯示不是很清晰。
方案二:采用LED數(shù)碼管顯示。數(shù)碼管在低電壓小電流的驅(qū)動下就能夠發(fā)光,發(fā)光響應(yīng)時間短,高頻性好,單色性好,亮度高,顯示相對而言比較清晰。而且體積小,重量輕,抗沖擊性能好,壽命長,成本低。
方案一:采用矩陣按鍵。矩陣按鍵需要通過掃描控制和譯碼,設(shè)計時需要有數(shù)值移位寄存器。
方案二:采用獨立按鍵。單片機仿真板上有專用獨立按鍵,連接方便,使用簡單。且易于軟件編程,適合本系統(tǒng)的設(shè)計。
2.2設(shè)計原理
本系統(tǒng)數(shù)字時鐘設(shè)計原理主要利用AT89C51單片機 ,由單片機的P0口控制數(shù)碼管的位顯示,P2口控制數(shù)碼管的段顯示,P3口與按鍵相接用于時間校正以及鬧鐘設(shè)定。設(shè)計的主要方面有計時原理,中斷及定時器原理以及調(diào)時方式,按鍵的消抖。
整個系統(tǒng)工作時,秒信號產(chǎn)生器是整個系統(tǒng)的時基信號,它直接決定計時系統(tǒng)的精度, 將標(biāo)準(zhǔn)秒信號送入“秒計數(shù)器”,“秒計數(shù)器”采用60進制計數(shù)器,每累計60秒發(fā)出一個“分脈沖”信號,該信號將作為“分計數(shù)器”的時鐘脈沖!胺钟嫈(shù)器”也采用60進制計數(shù)器,每累計60分鐘,發(fā)出一個“時脈沖”信號,該信號將被送到“時計數(shù)器”!皶r計數(shù)器”采用 24進制計時器,可實現(xiàn)對一天24小時的累計。顯示電路將“時”、“分”、“秒”計數(shù)器的輸出,通過六個七段LED顯示器顯示出來。校時電路是直接加一個脈沖信號到時計數(shù)器或者分計數(shù)器或者秒計數(shù)器來對“時”、“分”、“秒”顯示數(shù)字進行校對調(diào)整。在本設(shè)計中,24小時時鐘顯示、秒表的設(shè)計和顯示都是依靠單片機中的定時器完成。定時器T0產(chǎn)生1s的中斷,在中斷程序中完成每一秒數(shù)字的變化,并在主程序中動態(tài)顯示數(shù)字。
典型的8051單片機有5個中斷源(外部中斷0、1,內(nèi)部定時器中斷0、1,串口中斷),具有兩個中斷優(yōu)先級。與中斷系統(tǒng)有關(guān)的特殊功能寄存器有中斷允許寄存器IE、中斷優(yōu)先級控制寄存器IP、中斷控制寄存器TCON和SCON中有關(guān)位。MCS-51單片機基本的中斷系統(tǒng)結(jié)構(gòu)如下圖所示:
圖2-1 MCS-51的中斷系統(tǒng)
MCS-51的CPU對中斷源的開放或屏蔽,即每一個中斷源是否被允許中斷,是由內(nèi)部的中斷允許寄存器IE(地址A8H)控制的。IE中具體各位的意義如下,EA:CPU的中斷開放標(biāo)志。EA=1,CPU開放中斷;EA=0,CPU屏蔽所有的中斷申請。EX0:外部中斷0中斷允許位。 EX0=1,允許中斷:EX0=0,禁止中斷。ET0:T0的溢出中斷允許位。ET0=1,允許T0中斷;ET0=0,禁止T0中斷。EX1:外部中斷1中斷允許位。EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。ET1:定時器/計數(shù)器T1的溢出中斷允許位。ET1=1,允許 T1中斷;ET1=0禁止T1中斷。ES:串行口中斷允許位。ES=1,允許串行口中斷;ES=0禁止串行口中。
中斷優(yōu)先級管理寄存器IP(地址8BH):MCS-51有兩個中斷優(yōu)先級,一個正在被執(zhí)行的低優(yōu)先級中斷服務(wù)能被高優(yōu)先級中斷所中斷,但不能被另一個同級的或低優(yōu)先級中斷源所中斷。CPU的查詢順序是:外部中斷0;定時器T0中斷;外部中斷1;定時器T1中斷;串行口中斷(先外部后內(nèi)部,先0后1)
中斷服務(wù)函數(shù)的格式如下所示:
void 函數(shù)名 (void) interrupt n using m
{ 函數(shù)體語句 }
其中,interrupt和using是為編寫C51中斷服務(wù)程序而引入的關(guān)鍵字,interrupt表示該函數(shù)是一個中斷服務(wù)函數(shù),interrupt后的整數(shù)n表示該中斷服務(wù)函數(shù)是對應(yīng)哪一個中斷源。每個中斷源都有系統(tǒng)指定的中斷編號:
表2-1 中斷編號表
51單片機有三個內(nèi)部中斷,16位定時器/計數(shù)器T0、T1的溢出中斷源和串行口的發(fā)送 /接收中斷。對T0和T1中斷,當(dāng)定時計數(shù)回 ,0?溢出時,由硬件自動置位TCON中的TF0或 TF1中斷請求標(biāo)志位。定時/計數(shù)器實際上是一個加1計數(shù)器,它可以工作于定時方式,也可以工作于計數(shù)方式。兩種工作方式實際上都是對脈沖計數(shù),只不過所計脈沖來源不同。定時器的脈沖是由51單片機的內(nèi)振蕩器經(jīng)過12分頻后產(chǎn)生的,故當(dāng)單片工作于定時狀態(tài)時,計數(shù)脈沖的最高頻率為f=fosc/12.
51單片機的寄存器有方式控制寄存器TMOD;加法計數(shù)寄存器TH0、TH1(高八位),TL0 、TL1(低八位);定時/計數(shù)到標(biāo)志TF0、TF1(中斷控制寄存器TCON);定時/計數(shù)器啟停控位TR0、TR1(TCON);定時/計數(shù)器中斷允許位ET0、ET1(中斷允許寄存IE);定時/計數(shù)器中斷優(yōu)先級控制位PT0、PT1(中斷優(yōu)IP)。在定時器工作前,必須將控制命令寫入定時器的控制寄存器,即進行初始化。TMOD的低四位為T0的方式字,高四位為T1的方式字。TMOD不能位尋址,必須整體賦值。TMOD各位的含義如下:
- 工作方式選擇位M1,M0 :M1,M0 的狀態(tài)決定定時器的工作方式:
表2-2 工作方式選擇表
- 定時和計數(shù)方式選擇位C/T。當(dāng)C/T=1時為計數(shù)方式;C/T=0時為定時方式。
- 門控位GATE。GATE與TR0、TR1配合決定定時/計數(shù)器的啟停。當(dāng)GATE=0 時,軟啟動。定時器/計數(shù)器的啟停只受定時器運行控制位(TR0、TR1)的控制。當(dāng)GATE=1 時,軟硬啟動。定時器/計數(shù)器的啟停除受TR0、TR1控制外,還受外部引腳(INT0、INT1)輸入電平的控制(為高)。即TR0和INT0控制T0的運行,TR1和INT1控制T1的運行。
MCS-51的定時器有方式0、方式1、方式2 和方式3,這4種工作方式。以方式1為例,當(dāng)M1M0=01時,定時/計數(shù)器工作在方式1。MCS-51單片機定時計數(shù)器在方式1時的工作原理如圖所示:

圖2-2 計數(shù)/定時器
當(dāng)C/T=0時,工作在定時器狀態(tài),由振蕩器經(jīng)12分頻后輸入,否則由T1端輸入。在定時時,對工作頻率的12分頻進行計數(shù),先記入TL后記入TH,直到溢出為止,根據(jù)TL、TH內(nèi)的初值不同可以定出不同的時間;在計數(shù)工作方式時,對T0(T1)引腳的輸入脈沖進行計數(shù),將計數(shù)值記入TL、TH。當(dāng)定時/計數(shù)溢出時,會引起中斷。計數(shù)初值與定時時間的關(guān)系為:T=12×(T_all–a)/fosc定時間隔為T,計數(shù)初值為a。所以有計數(shù)初值a=–T×fosc/12,THx=a/256,TLx=a%256。定時器均有一個最大定時時間,對于長時間的定時需要,可以將定時間隔為固定的較小時間,通過另設(shè)一全局變量ah1用于計數(shù),累加固定的較小定時時間來進行。
使用MCS-51單片機的定時/計數(shù)器的步驟:
- 設(shè)定TMOD,確定工作狀態(tài)(用作定時器/計數(shù)器)、工作方式、控制方式。
- 設(shè)置合適的計數(shù)初值,以產(chǎn)生期望的定時間隔。由于定時/計數(shù)器在方式0、方式1和方式2時的最大計數(shù)間隔取決于使用的晶振頻率fosc,如下表所示,當(dāng)需要的定時間隔較大時,要采用適當(dāng)?shù)姆椒ǎ磳⒍〞r間隔分段處理。
- 確定定時/計數(shù)器工作于查詢方式還是中斷方式,若工作于中斷方式,則在初始化時開放定時/計數(shù)器的中斷及總中斷:ET0=1,EA=1。
中斷服務(wù)函數(shù):
void T0_srv (void) interrupt 1 using 1
{ TL0 = a % 256 ;
TH0 = a / 256 ;
中斷服務(wù)程序段 }
時間調(diào)整有多種方式:一、可以直接進入相關(guān)狀態(tài)進行有關(guān)操作,二、將調(diào)整分兩步,先進入狀態(tài),然后執(zhí)行操作,這兩步分別由兩個鍵控制。 方式一比較直接,設(shè)計思想也比較簡單。但是,這種方式存在操作時間和控制鍵數(shù)目的矛盾。如果用比較少的鍵,那么可能會在進入狀態(tài)后處于數(shù)據(jù)調(diào)整等待狀態(tài),這樣會影響到顯示的掃描速度。當(dāng)然在這種方式下,還可以使用多個狀態(tài)鍵,每個狀態(tài)鍵,完成一個對應(yīng)數(shù)據(jù)的調(diào)整。如果采用二的方式,就不會出現(xiàn)這種情況。因為狀態(tài)的調(diào)整,與狀態(tài)的操作可以分別由兩個鍵控制,其狀態(tài)的調(diào)整數(shù)可以多達 256個(理論上),操作的完成是這樣的,一鍵控制狀態(tài)的調(diào)整,一鍵控制數(shù)據(jù)的調(diào)整。以上兩種方式的實現(xiàn)都可以采用查詢和中斷的方式。兩種方式必須注意的問題是兩者進行相關(guān)操作的過程不能太長否則會影響顯示的掃描;诒鞠到y(tǒng)的設(shè)置,將時間調(diào)整分為狀態(tài)調(diào)整和數(shù)據(jù)調(diào)整兩部分,每次進入中斷只執(zhí)行一次操作,然后返回,這樣,就不必讓中斷處于調(diào)整等待狀態(tài),可以使中斷的耗時很小。將定時器中斷的優(yōu)先級設(shè)置為最高級,那么中斷的方式和查詢的方式一樣不會影響到時鐘的記數(shù)。
通常的按鍵所用開關(guān)為機械彈性開關(guān),當(dāng)機械觸點斷開、閉合時,由于機械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖。按鍵消抖的方式有硬件和軟件消抖,本系統(tǒng)采用軟件消抖。軟件消抖有定時器定時,和利用延時子程序的方式。一,定時器定時消抖可以不影響顯示模塊掃描速度,其實現(xiàn)方法是:設(shè)置標(biāo)志位,在定時器中斷中將其置位,然后在程序中查詢。將其中斷優(yōu)先級設(shè)置為低于時鐘定時中斷,那么它就可以完全不影響時鐘定時。二,在采用延時子程序時,如果顯示模塊的掃描速度本來就不是很快,此時可能會影響到顯示的效果,一般情況下,每秒的掃描次數(shù)不應(yīng)小于50次,否則,數(shù)碼的顯示會出現(xiàn)閃爍的情況。因此,延時子程序的延時時間應(yīng)該小于20毫秒,如果采用定時器定時的方式,延時時間不影響時鐘。如果,設(shè)計時采用的是中斷的方式來完成有關(guān)操作,同樣可以采用軟件的方式來消抖,其處理思想是:中斷不能連續(xù)執(zhí)行,兩次之間有一定的時間間隔。
2.3設(shè)計規(guī)劃
課程設(shè)計總圖規(guī)劃如圖2-3所示:
圖2-3 課程設(shè)計規(guī)劃
- 對電子時鐘設(shè)計的總體進行分析和規(guī)劃。
- 根據(jù)流程圖設(shè)計硬件原理圖,然后焊接電路板。
- 根據(jù)原理圖各個端口的設(shè)置,規(guī)劃電子時鐘程序,編寫程序。
- 將程序燒進芯片,再將芯片與電路板連接,調(diào)試。
- 觀察實驗現(xiàn)象,記錄數(shù)據(jù),分析得出結(jié)果。
2.4本章小結(jié)
確定了模塊的選擇,明白了設(shè)計的計時原理,中斷及定時器原理以及調(diào)時方式、按鍵的消抖。
3 硬件設(shè)計硬件電路的設(shè)計包括核心時間控制模塊、顯示模塊、按鍵模塊,以及鬧鐘的蜂鳴器模塊。
3.1顯示模塊
通過外部連線將P0線接到J16,使得P0口控制數(shù)碼管的位顯示,將P2線接到J12,使得P2口控制數(shù)碼管的段顯示。
數(shù)碼管顯示原理圖如下所示:
圖3-1 數(shù)碼管顯示原理圖
3.2按鍵模塊
使用8路獨立按鍵,通過改變排線連接,可以實現(xiàn)按鈕的普通輸入和中斷輸入通過外部接線,將P3口與JP5相連,實現(xiàn)由P3口控制時間調(diào)試和鬧鐘設(shè)定的按鈕連接。
按鍵原理圖如圖3-2所示:
圖3-2按鍵原理圖
3.3蜂鳴器模塊
通過單片機的內(nèi)部設(shè)定,將 P1.5口作為蜂鳴器的控制端口,通過跳帽連接J8口,使得蜂鳴器可以工作,再由軟件程序編寫,使得蜂鳴器能夠在特定的時刻響。
蜂鳴器原理圖如圖3-3所示:
圖3-3 蜂鳴器原理圖
3.4核心控制以及時間控制模塊
首先RST保持兩個機器周期以上的高電平時自動復(fù)位1、上電復(fù)位:上電瞬間,電容充電電流最大,電容相當(dāng)于短路,RST端為高電平,自動復(fù)位;電容兩端的電壓達到電源電壓時,電容充電電流為零,電容相當(dāng)于開路,RST端為低電平,程序正常運行。2、手動復(fù)位:首先經(jīng)過上電復(fù)位,當(dāng)按下按鍵時,RST直接與VCC相連,為高電平形成復(fù)位,同時電解電容被短路放電;按鍵松開時,VCC對電容充電,充電電流在電阻上,RST依然為高電平,仍然是復(fù)位,充電完成后,電容相當(dāng)于開路,RST為低電平,正常工作。復(fù)位電路圖如圖3-4所示:
單片機工作時,是一條一條地從RoM中取指令,然后一步一步地執(zhí)行。單片機訪問一次存儲器的時間,稱之為一個機器周期,這是一個時間基準(zhǔn)。—個機器周期包括12個時鐘周期。如果一個單片機選擇了12MHz晶振,它的時鐘周期是1/12us,它的一個機器周期是12&TImes;(1/12)us,也就是1us。晶振連接圖如圖3-5所示:
P0口作為 I/O 口輸出的時候時 輸出低電平為 0 輸出高電平為高組態(tài)(并非 5V,相當(dāng)于懸空狀態(tài))。也就是說 P0 口不能真正的輸出高電平,給所接的負(fù)載提供電流,因此必須接上拉電阻(一電阻連接到 VCC),由電源通過這個上拉電阻給負(fù)載提供電流?谕饨由侠娮枞鐖D3-6所示:
圖3-4 復(fù)位電路 圖3-5 晶振連接
圖3-6 口外接上拉電阻圖
單片機的核心控制模塊由儲存器結(jié)構(gòu)、中斷資源、IO接口等組成。如圖3-7所示:
圖3-7 單片機核心控制模塊原理圖
3.5本章小結(jié)
給出時間控制模塊、顯示模塊、按鍵模塊,以及鬧鐘的蜂鳴器模塊,保證設(shè)計的進一步進行。
4軟件及編程分析4.1主程序流程圖
- 在4位數(shù)碼管上顯示當(dāng)前時間,計時格式為“時時分分”。
- 由LED閃爍做秒顯示。
- 利用按鍵可以對時間及鬧鐘進行設(shè)置,并可顯示鬧鈴時間。當(dāng)鬧鈴時間到蜂鳴器發(fā)出聲響,按停止鍵可使鬧鈴聲停止。
圖4-1所示為程序流程圖:

圖4-1 程序設(shè)計流程圖
4.2軟件編程及分析
本系統(tǒng)的編程環(huán)境為keil uvision2,依照流程圖編寫程序并進行程序的編譯,燒錄軟件使用PZISP將程序燒錄進硬件中,軟件得編譯結(jié)果及燒錄結(jié)果分別如圖4-2和4-3所示:

圖4-2 編譯結(jié)果圖

圖4-3 燒錄結(jié)果圖
編寫具體程序見附錄所示,以下給出部分主要程序的分析說明:
(1)按鍵消抖
按鍵抖動會引起一次按鍵被誤讀多次。為確保CPU對鍵的一次閉合僅作一次處理,必須去除鍵抖動。抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms ,通過delay函數(shù)的延時作用,在按鍵被按下時,延時一段時間,確定按鍵是否真的被按下,如果是就執(zhí)行程序,達到了消除按鍵的抖動的目的,程序如下:
if(key1==0) //按鍵被按下
{ delay(10); //延時
if(key1==0) //判斷按鍵是否被按下
{
while(!key1); //進一步確認(rèn)按鍵被按下
} }
(2)初始化程序
開中斷并選擇定時器:
void init()
{
TMOD=0x01; //選擇定時器工作方式為 1
TH0=(65536-50000)/256; //寫入計數(shù)初值,設(shè)定 t=50ms
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //允許定時器中斷
TR0=1; //啟動定時器
}
4.3實驗結(jié)果圖
硬件的位選、段選,以及按鍵的連線如圖4-4和4-5所示:

圖4-4 正常走時圖
當(dāng)按下按鍵0,并且一直按著時,進入鬧鐘的設(shè)定狀態(tài),開始的時候顯示為 00—00—00

圖4-5 進入鬧鐘狀態(tài)圖
4.4本章小結(jié)
完成了程序的編輯與燒錄,我體會到了自己所學(xué)的知識是遠(yuǎn)遠(yuǎn)不夠,需要學(xué)習(xí)的知識還有很多。同時此系統(tǒng)的設(shè)計提高了我的動手能力,為將來的學(xué)習(xí)和工作奠定了良好的基礎(chǔ)。
5總結(jié)與展望5.1課程設(shè)計總結(jié)
課程設(shè)計主要完成內(nèi)容如下:
設(shè)計了時鐘系統(tǒng),系統(tǒng)具有時鐘功能,能準(zhǔn)確顯示時、分、秒。同時具備設(shè)定鬧鐘和定時鬧鐘響功能,實現(xiàn)了時間顯示(24小時制)、鬧鐘設(shè)置、時間調(diào)試以及準(zhǔn)點報時,可復(fù)位的功能,并運行了該電路的程序。
5.2工作展望
從任務(wù)要求出發(fā),分析如何實現(xiàn)功能,通過這次課程設(shè)計使我對單片機有了深入的認(rèn)識,特別是對定時中斷方式有了直觀的認(rèn)識,設(shè)計時鐘我使用單片機內(nèi)部定時/計數(shù)器,通過設(shè)置定時器產(chǎn)生精確的定時中斷,達到計時的目的。
這個時鐘功能比較單一,還可以進一步的加入功能,在以后的設(shè)計中,逐漸增加其他的功能,比如說加溫度檢測,加秒表和顯示日期和星期等來進一步完善這個時鐘。
附 錄 A 設(shè)計程序
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code
- table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f};
- sbit Bueer=P1^5;
- sbit key1=P3^1;
- sbit key2=P3^2;
- sbit key3=P3^3;
- sbit key4=P3^4;
- sbit key5=P3^5;
- sbit key6=P3^6;
- sbit key7=P3^7;
- sbit key0=P3^0;
- uchar aa,h,m,s,n,i,sec,min,hour
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void display()
- {
- if(key0==1)
- {
- P2=0xfe;
- P0=table[s%10];
- delay(1);
- P2=0xfd;
- P0=table[s/10];
- delay(1);
- P2=0xfb;
- P0=0x40;
- delay(1);
- P2=0xf7;
- P0=table[m%10];
- delay(1);
- P2=0xef;
- P0=table[m/10];
- delay(1);
- P2=0xdf;
- P0=0x40;
- delay(1);
- P2=0xbf;
- P0=table[h%10];
- delay(1);
- P2=0x7f;
- P0=table[h/10];
- delay(1);
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- aa++;
- if(aa==20)
- {
- aa=0;
- s++;
- if(s==60)
- {
- s=0;
- m++;
- if(m==60)
- {
- m=0;
- h++;
- if(h==24)
- h=0;
- }
- }
- }
- }
- void keyscan()
- {
- if(key1==0)
- {
- delay(10);
- if(key1==0)
- {
- while(!key1);
- n++;
- TR0=0;
- if(n==1)
- {
- P2=0xfe;
- P0=table[s%10];
- delay(1);
- P2=0xfd;
- P0=table[s/10]
- delay(1);
- }
- if(n==2)
- {
- P2=0xf7;
- P0=table[m%10];
- delay(1);
- P2=0xef;
- P0=table[m/10];
- Delay(1);
- }
- if(n==3)
- {
- P2=0xbf;
- P0=table[h%10];
- delay(1); P2=0x7f;
- P0=table[h/10]; delay(1);
- }
- if(n==4)
- {
- TR0=1; n=0; } } }
- if(n!=0)
- {
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- while(!key2);
- if(n==1)
- {
- s++;
- if(s==60)
- s=0;
- }
- if(n==2)
- {
- m++;
- if(m==60)
- m=0;
- }
- if(n==3)
- {
- h++;
- if(h==24)
- h=0; } } }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- while(!key3);
- if(n==1)
- {
- if(s==0)
- s=60;
- s--;
- }
- if(n==2)
- {
- if(m==0)
- m=60;
- m--;
- }
- if(n==3)
- {
- if(h==0)
- h=24;
- h--; } } } } }
- void keyscan2()
- {
- if(key0==0)
- {
- P2=0xfe;
- P0=table[sec%10];
- delay(1);
- P2=0xfd;
- P0=table[sec/10];
- delay(1);
- P2=0xfb;
- P0=0x40;
- delay(1);
- P2=0xf7;
- P0=table[min%10];
- delay(1);
- P2=0xef;
- P0=table[min/10];
- delay(1);
- P2=0xdf;
- P0=0x40;
- delay(1);
- P2=0xbf;
- P0=table[hour%10];
- delay(1);
- P2=0x7f;
- P0=table[hour/10];
- delay(1);
- }
- if(key4==0)
- {
- delay(10);
- if(key4==0)
- {
- while(!key4);
- {
- min++;
- if(min==60)
- min=0;
- }
- }
- }
- if(key5==0)
- {
- delay(10);
- if(key5==0)
- {
- while(!key5)
- {
- hour++;
- if(hour==24)
- hour=0;
- }
- }
- }
- if(key6==0)
- {
- delay(10);
- if(key6==0)
- {
- while(!key6);
- {
- if(min==0)
- min=60;
- min--;
- }
- }
- }
- if(key7==0)
- {
- delay(10);
- if(key7==0)
- {
- while(!key7);
- {
- if(hour==0)
- hour=24;
- hour--;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
電子時鐘課程設(shè)計.doc
(2.65 MB, 下載次數(shù): 16)
2018-4-23 17:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5