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