金士豪
(湖南科技學院 智能制造學院,湖南 永州 425199)
單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上[1]。單片機相當于一個微型計算機,與計算機相比,它只缺少了I/O設(shè)備。一塊芯片就構(gòu)成了一臺計算機。單片機的體積小、質(zhì)量輕、價格便宜,為學習、應用和開發(fā)提供了便利條件[2]。單片機的使用領(lǐng)域十分廣泛,如智能儀表、實時工控、通信設(shè)備、導航系統(tǒng)、家用電器等。在各種產(chǎn)品中集成單片機,能夠起到使產(chǎn)品升級換代的作用。人們常在這些產(chǎn)品名稱前冠以形容詞——“智能型”,如智能型洗衣機等[3]。
電子鐘是一種利用數(shù)字電路顯示時間的計時裝置。石英鐘是一種利用石英振蕩器所產(chǎn)生的振蕩頻率驅(qū)動時鐘的3針顯示秒、分、時的計時裝置。電子鐘與機械時鐘相比,直觀性為其主要特點,因非機械驅(qū)動具有更長的使用壽命,相較石英鐘的石英機芯驅(qū)動,其更具準確性。它的特點可歸結(jié)為“兩強一弱”:電子鐘比機械鐘強在觀看時顯著,比石英鐘強在走時準確,它的弱點是顯時較為單調(diào)。電子鐘更為方便、快捷和實用。由于電子鐘的數(shù)字集成電路構(gòu)成方式,使電子鐘具有走時準確、性能穩(wěn)定、攜帶方便等優(yōu)點。電子鐘也可用于定時自動報警、按時自動打鈴、時間程序自動控制等[4]。
本文設(shè)計的數(shù)字電子時鐘系統(tǒng)需要考慮數(shù)碼管的掃描復用方式。采用函數(shù)進行調(diào)用時,注意函數(shù)的參數(shù)應直接設(shè)置為小時、分鐘和秒,此過程還需要設(shè)置一個參數(shù)進行鬧鐘模式的切換。自動顯示功能需要考慮設(shè)置若干個全局變量,使其在定時中斷時不斷被調(diào)用,實現(xiàn)數(shù)據(jù)自增。另外,在LCD部分,一定要加上LCD驅(qū)動。系統(tǒng)的具體組成如圖1所示。該數(shù)字電子鐘系統(tǒng)可以分為主控制單元、復位電路、晶振電路、鍵盤電路和顯示電路等。
圖1 系統(tǒng)組成
本設(shè)計利用KEIL5軟件實現(xiàn)程序設(shè)計。C語言是硬件設(shè)計時常用的編程語言之一。除匯編語言外,最接近硬件的編程語言是C語言。很多操作系統(tǒng)軟件的底層部分和驅(qū)動代碼都是用C語言編寫,由C語言負責將應用層用戶的指令轉(zhuǎn)化為具體的硬件驅(qū)動指令進行驅(qū)動。現(xiàn)在常見的Unix,Linux和Windows操作系統(tǒng),工業(yè)控制和嵌入式領(lǐng)域常見的RTOS系統(tǒng)都是由標準的C語言開發(fā)而來?,F(xiàn)在手機端火熱的安卓系統(tǒng)也是在封裝Linux內(nèi)核的基礎(chǔ)上,實現(xiàn)對底層硬件的驅(qū)動和控制。
3.1.1 晶振電路
數(shù)字電路需要各種高頻率開關(guān)信號使計數(shù)器正常計數(shù),使各種數(shù)字模塊能夠同步,因此,需要一個高頻率電子振蕩電路產(chǎn)生振蕩信號。這個振蕩電路最重要的一個元件就是晶振,它生成的振蕩信號頻率可以達到幾兆甚至十幾兆,再經(jīng)過分頻器或倍頻器,得到各種不同的頻率信號。在某些通信系統(tǒng)中,由于系統(tǒng)的基頻和射頻使用不同的晶振,通常通過電子調(diào)頻的方式保持同步。在本文設(shè)計的電子時鐘中,為了讓各個部分保持同步,該電子時鐘共用一個晶振,利用該晶振提供基本的時鐘信號。
3.1.2 復位電路
復位電路等同于電腦的重啟部分。電腦在使用中出現(xiàn)死機,按下重啟按鈕后,電腦內(nèi)的程序從頭開始執(zhí)行。單片機也一樣,單片機系統(tǒng)在運行中受到環(huán)境干擾程序時,按下復位按鈕,內(nèi)部的程序可自動從頭開始執(zhí)行,即把一些寄存器及存儲設(shè)備恢復到出廠時的狀態(tài)。
3.1.3 鍵盤電路
根據(jù)4×4矩陣鍵盤,它是用4條I/O線作為行線,4條I/O線作為列線組成的鍵盤。在行線和列線的每個交叉點上設(shè)置一個按鍵。因此,鍵盤上按鍵的個數(shù)為4×4個。采用此方法設(shè)計的鍵盤電路結(jié)構(gòu)可以大大提高電子時鐘中I/O口的利用率。本文設(shè)計實現(xiàn)了按鍵控制鬧鐘和按鍵設(shè)置時間的功能。
在按鍵內(nèi)部設(shè)置兩個觸點,首先將電路中的一條線路截斷,然后將兩個斷線分別連接到按鍵的兩個觸點上。當按下按鍵或按下按鍵不放,按鍵內(nèi)部的觸點結(jié)合在一起,該條線路導通;再按下按鍵或者松開按鍵,觸點釋放,線路斷開。
3.1.4 顯示電路
采用4位共陰極數(shù)碼管驅(qū)動方式,P2口連接相應的位置,即選擇要顯示的數(shù)碼管位,P0口連接相應的位置,即顯示相應的數(shù)碼管段,從而負責顯示時鐘的時和分。
電子時鐘的硬件部分主要包括控制芯片、時鐘芯片、按鍵、顯示屏等幾個部分??刂菩酒?,也就是單片機,可以采用ST/STC/ALTER等8位單片機或者根據(jù)需求采用PCI或更高級的ARM等進行控制以及對時鐘芯片的操作等。時鐘芯片,采用DS12C887,DS1302等時鐘芯片,通過單片機對時鐘芯片進行配置、操作、讀取、設(shè)置等。按鍵,外部按鍵可以對時鐘芯片進行外部設(shè)置,比如設(shè)置初始時間等,按鍵的采集可以用并行、串行、模擬AD采集等方式。如果單片機的I/O口足夠,可采用并行采集;如果I/O口有限,則可采用為不同按鍵分配不同阻值的電阻,掛在同一數(shù)據(jù)線上通過串行AD進行采集,再通過單片機分析采集到的電壓值判斷按鍵。顯示屏可以采用點陣顯示屏或者彩色TFT(8Bit/16Bit/24Bit)模擬/數(shù)字屏,如果只是一般的應用,采用一般的單行或多行點陣顯示屏即可。
本文使用了Produce軟件進行硬件原理圖的仿真設(shè)計。主控電路采用80C51單片機。80C51單片機的內(nèi)振蕩電路是一種高增益逆變放大器。導線xtal1和xtal2分別是逆變器振蕩放大器的輸入、內(nèi)部時鐘工作電路的輸入和逆變器振蕩器的輸出。本文將逆變器放大器配置為片上振蕩器。由電容器進行充電,RST可以在通電后的一段時間內(nèi)保持在高水平,以實現(xiàn)通電復位操作。通電復位是復位電路使用的主要方法。此方法不僅能使單片機復位,還能使單片機的外圍設(shè)備同時復位。程序出現(xiàn)錯誤時,可以隨時使電路復位。鍵盤電路的設(shè)計主要考慮如何實現(xiàn)按下同一個鍵時,可以執(zhí)行不同的功能程序。每個鍵以一對多的方式對應多個功能程序。在按下某個鍵時,該鍵對應的引腳被拉低,系統(tǒng)進行一次掃描,返回鍵值,執(zhí)行當下鍵值對應的功能程序。顯示電路主要是由數(shù)碼管顯示數(shù)字電子鐘的時和分。
主函數(shù)的流程設(shè)計過程首先進行初始化設(shè)定初值,然后執(zhí)行相關(guān)子程序的調(diào)用。具體流程如圖2所示。
調(diào)用中斷服務子程序,循環(huán)次數(shù)自增,因為定時時長為50 ms,所以循環(huán)次數(shù)為20時,循環(huán)次數(shù)清0,秒自增;秒為60時,分自增,秒清0;分為60時,時自增,分清0;時為24時,時清0,中斷返回。
先確認彈簧消抖是否有鍵按下,接著判斷掃描按鍵,不同的按鍵觸發(fā)不同功能。
其中,控制鬧鐘的核心代碼如下。
void almkozi(){
if((hour1==hour)&&(minit1==minit)&&(second<4)){
speaker=0; //鬧鐘時間到,蜂鳴器響
}
if(minit==0&&second<4){
//整點報時,蜂鳴器響
speaker=0;
}
if(second>4) {//控制蜂鳴器響的時長
speaker=1; //關(guān)閉蜂鳴器
}
}
數(shù)碼管的核心代碼如下。
void show(int){
P0=tc[h/10];
P2=0xCD;
retardation();P2=0xCE; //片選關(guān)
P0=tc[h%10]; //p0口送數(shù)據(jù),拆數(shù)顯示,時的個位
P2=0xCF; //P2.1
retardation(); P2=0xDC;
P0=tc[m/10]; //p0口送數(shù)據(jù),拆數(shù)顯示,分的十位
P2=0xDE; //P2.2
retardation();
P2=0xEF;
P0=tc[m%10]; //p0口送數(shù)據(jù),拆數(shù)顯示,分的個位
P2=0XD9; //P2.3
retardation();
P2=0xEE;
}
本文設(shè)計的電子時鐘,顯示屏清晰,可顯示基本的時、分和秒,還可通過按鍵調(diào)整時間、設(shè)置鬧鐘和提醒。其鬧鐘一天內(nèi)可設(shè)置3次且音量可調(diào)節(jié)。該電子時鐘功能基本齊全,能夠滿足人們生活的基本需求。但因為本次設(shè)計還有部分智能功能未實現(xiàn),有待在后期設(shè)計和實現(xiàn)中進行擴展。
圖2 程序總體流程