趙續(xù)
摘要 隨著社會(huì)發(fā)展,電子設(shè)備應(yīng)用更加廣泛,尤其是簡(jiǎn)易計(jì)算器得到了很多人的青睞,其可以很方便地實(shí)現(xiàn)一些簡(jiǎn)單運(yùn)算。本文設(shè)計(jì)了一種新的計(jì)算器,設(shè)備采用STC89C52單片機(jī)為主控芯片,因?yàn)樗哂泄男〉奶攸c(diǎn),電源部分選用5v電壓供電。系統(tǒng)的硬件部分的輸入和輸出設(shè)備分別采用鍵盤和16 02LCD液晶顯示屏,從而實(shí)現(xiàn)15位數(shù)以內(nèi)的四則運(yùn)算。系統(tǒng)的軟件部分在keil環(huán)境下采用C語言編寫,并通過Proteus仿真驗(yàn)證。
【關(guān)鍵詞】單片機(jī) 矩陣鍵盤 液晶顯示屏
單片機(jī)芯片上集成了大規(guī)模特定功能的器件。其中最主要的元器件就是中央處理CPU,其是單片機(jī)的大腦。單片機(jī)還集成了一些具有存儲(chǔ)功能的設(shè)備,如:只讀存儲(chǔ)器ROM和隨機(jī)存儲(chǔ)器RAM;定時(shí)器/計(jì)時(shí)器也是常用到的單元;為了與其他設(shè)備進(jìn)行信息傳輸,單片機(jī)還需有多種I/O口。本文研究的是單片機(jī)在日常生活中常見的應(yīng)用一一簡(jiǎn)易計(jì)算器。由于它操作方便,因此應(yīng)用較為廣泛。該設(shè)備通常利用LCD液晶對(duì)數(shù)據(jù)進(jìn)行顯示,從而可以使運(yùn)算結(jié)果更加直觀而且不會(huì)浪費(fèi)過多的電能。為了便于學(xué)習(xí),本文對(duì)其功能進(jìn)行了簡(jiǎn)化,可進(jìn)行整數(shù)和浮點(diǎn)運(yùn)算,運(yùn)算位數(shù)也可擴(kuò)展到15位。
1 電子計(jì)算器的意義分析
電子計(jì)算器是一種電子產(chǎn)品,是人們?cè)谏詈凸ぷ髦斜夭豢缮俚墓ぞ摺k娮蛹夹g(shù)的飛速發(fā)展,人們對(duì)電子產(chǎn)品的要求也不斷提高,針對(duì)以上現(xiàn)狀,本文設(shè)計(jì)了一款更加簡(jiǎn)便的計(jì)算器,該產(chǎn)品采用新方法來實(shí)現(xiàn)功能。由于采用傳統(tǒng)的技術(shù)要實(shí)現(xiàn)比較完善的功能需要非常復(fù)雜的模擬電路設(shè)計(jì),不僅會(huì)使設(shè)備顯得笨重,同時(shí)也不利于操作。而一片集成度較高小體積的芯片就可以解決上述問題。本文設(shè)計(jì)的計(jì)算器就是采用單片機(jī)對(duì)系統(tǒng)進(jìn)行控制,顯示模塊采用1602LCD顯示器,數(shù)據(jù)的輸入采用矩陣按鍵。該設(shè)備具有的優(yōu)勢(shì)是十分明顯,不僅體積小、精度較高而且方便使用。當(dāng)前對(duì)數(shù)據(jù)的運(yùn)算不僅進(jìn)停留在簡(jiǎn)單的四則運(yùn)算上,還會(huì)經(jīng)常需要進(jìn)行乘方、開方、指數(shù)、對(duì)數(shù)、三角函數(shù)等計(jì)算,所以對(duì)計(jì)算器的研究和改進(jìn)有較強(qiáng)的實(shí)際意義和價(jià)值。
2 系統(tǒng)總體設(shè)計(jì)
2.1 設(shè)計(jì)要求
本文采用STC89C52系列單片機(jī)作為主控制器,對(duì)外圍電路進(jìn)行一定的拓展完成實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì),設(shè)計(jì)要求主要包括以下六個(gè)方面:
(1)掌握單片機(jī)和外圍擴(kuò)展電路的設(shè)計(jì)方法:
(2)可進(jìn)行四則運(yùn)算,采用LCD顯示數(shù)據(jù)和結(jié)果;
(3)可以完成浮點(diǎn)數(shù)之間的一些加減乘除運(yùn)算;
(4)支持括號(hào)運(yùn)算,允許多層正確嵌套;
(5)具備比較完善的報(bào)錯(cuò)系統(tǒng);
(6)顯示界面友好,可實(shí)時(shí)顯示輸入數(shù)據(jù);
系統(tǒng)整體框圖如圖l所示。
2.2 設(shè)計(jì)方案
系統(tǒng)的具體設(shè)計(jì)方案主要分為以下5步:
(1)輸入模塊部分使用4*4的矩陣鍵盤和4個(gè)獨(dú)立按鍵;
(2)電源采用LM7805的穩(wěn)壓電路;
(3)執(zhí)行程序:應(yīng)用液晶顯示屏顯示模塊部分,開機(jī)時(shí)無數(shù)字顯示,進(jìn)入等待鍵入數(shù)值的狀態(tài);當(dāng)有數(shù)字鍵入時(shí),在液晶顯示屏顯示出數(shù)值;當(dāng)鍵入運(yùn)算符+、-、*、/時(shí),計(jì)算器的內(nèi)部將會(huì)進(jìn)如數(shù)值的轉(zhuǎn)換和存儲(chǔ)狀態(tài),接著等待下一個(gè)數(shù)值被鍵入,之后鍵入的數(shù)值會(huì)被顯示出來;最后通過按等號(hào)鍵輸出運(yùn)算結(jié)果就會(huì)在液晶顯示屏上;
(4) AC清零功能:在運(yùn)算結(jié)果輸出之后通過按鍵鍵入AC鍵,把數(shù)據(jù)清零,接著等待下一步計(jì)算。
(5)錯(cuò)誤提示:如果單片機(jī)在執(zhí)行程序過程中出現(xiàn)錯(cuò)誤,相應(yīng)的錯(cuò)誤提示信息則將會(huì)在液晶顯示器上顯示出來。
3 硬件系統(tǒng)設(shè)計(jì)
3.1 主控芯片STC89C52單片機(jī)
考慮到系統(tǒng)的功耗和性能等因素,選用的STC89C52控制芯片具有32個(gè)I/O口,內(nèi)部FLASH程序存儲(chǔ)器8KB,內(nèi)部RAM12字節(jié),內(nèi)部EEPROM2KB,雙DPTR指針,3個(gè)定時(shí)器/計(jì)數(shù)器,自帶看門狗WatchDog。
3.2 輔助模塊設(shè)計(jì)
LCD液晶顯示器用來顯示數(shù)值的輸出和輸入。它的數(shù)據(jù)端與單片機(jī)的PO口相連接,控制端部分與P24-P26相連接。當(dāng)所需要的鍵盤數(shù)量較多時(shí),為避免占用更多I/O口,最有效的方法就是將按鍵以矩陣形式進(jìn)行排列。需要注意的是,在行和列的交叉處不能直接進(jìn)行連接,而是使用一個(gè)按鍵將兩者連接。通過以上處理,一個(gè)I/O口就可以控制多個(gè)按鍵。
蜂鳴器起到一個(gè)提示的作用,當(dāng)有按鍵被按下時(shí)就會(huì)發(fā)出聲音。本文中,驅(qū)動(dòng)蜂鳴器采用的是三極管。由于單片機(jī)I/O的驅(qū)動(dòng)能力不足,因此可以利用單片機(jī)的I/O口實(shí)現(xiàn)開關(guān)功能。如果想要打開蜂鳴器通道則顯示屏顯示為‘O,這樣蜂鳴器會(huì)發(fā)出聲音。
本文設(shè)計(jì)的計(jì)算器系統(tǒng)的電源模塊采用LM7805作為穩(wěn)壓芯片。由于STC89C52和LCD1602都采用5V電壓供電,經(jīng)過初級(jí)和次級(jí)的電容濾波,最終可以得到5V的電壓供給使用。
4 軟件系統(tǒng)設(shè)計(jì)
軟件編程平臺(tái)選用最常用的keil軟件,仿真平臺(tái)選擇常見的Proteus軟件。因?yàn)檫@些程序并沒有牽涉到底層的驅(qū)動(dòng)問題,所以選用方便簡(jiǎn)捷的C語言編程。通常把編程過程共分為四個(gè)模塊部分:主函數(shù)模塊部分、延時(shí)模塊部分、1602顯示模塊部分、用于處理計(jì)算表達(dá)式的對(duì)戰(zhàn)模塊部分。采用模塊化設(shè)計(jì),便于系統(tǒng)的調(diào)試與了解。重點(diǎn)介紹軟件核心的表達(dá)式解決程序算法部分。
4.1 總體設(shè)計(jì)
在顯示數(shù)據(jù)傳輸?shù)倪M(jìn)程中,應(yīng)經(jīng)過程序控制的實(shí)時(shí)處理信息,顯示出輸入數(shù)據(jù)信息,差錯(cuò)控制信息,運(yùn)算結(jié)果信息,實(shí)時(shí)解決自定義的控制鍵功能,并且實(shí)現(xiàn)控制功能。系統(tǒng)的具體流程設(shè)計(jì)步驟如下所示:
(1)開始后程序應(yīng)該先初始化參數(shù),這時(shí)1602無數(shù)字顯示。
(2)然后開始掃描鍵盤看是否有輸入,如果有輸入則讀取鍵盤的編碼。如果是數(shù)字鍵則輸入數(shù)值;如果是清零鍵則狀態(tài)就為清零;如果是功能鍵則判別輸入的是‘+鍵‘.鍵‘*鍵‘/鍵還是‘=鍵;如果是‘=鍵,則輸出運(yùn)算結(jié)果并且在LCD上顯示出運(yùn)算結(jié)果;如果是其他鍵則保存其相對(duì)運(yùn)算程序的首地址并且在LCD上輸出顯示出來。
4.2 子程序設(shè)計(jì)
矩陣鍵盤掃描程序如下,首先初始化地址參數(shù),依次讀出低四位數(shù)據(jù)和高四位。然后再確定鍵的ASCII碼值送給LCD顯示并且與表達(dá)式相對(duì)應(yīng)的堆棧進(jìn)行處理。讀鍵過程利用的是反轉(zhuǎn)方法,無論矩陣規(guī)模大小都分為兩次來完成讀鍵。第一次所有行線都輸出高電平,讀入行信息;第二次所有列線都輸出高電平,讀入列信息。
根據(jù)對(duì)系統(tǒng)的要求和硬件本身的特性的分析,系統(tǒng)的復(fù)位功能只需要將AC按鍵與單片機(jī)的外部中斷O連接,就可以利用單片機(jī)的中斷對(duì)數(shù)據(jù)進(jìn)行清理。具體過程為:程序運(yùn)行期間通過不斷查詢標(biāo)志位,若為O,則啟動(dòng)清零功能,清零結(jié)束后將標(biāo)志位置為l后返回主程序。
1602在上電以后,在進(jìn)行具體化操作時(shí)應(yīng)先對(duì)其內(nèi)部芯片做初始化處理。并且具體操作時(shí)其時(shí)序圖的參考也是非常有必要的,必須參考其時(shí)序圖,再把命令寫入它的內(nèi)部寄存器,然后再將工作方式及工作狀態(tài)進(jìn)行設(shè)置。
5 系統(tǒng)調(diào)試
本文以整數(shù)運(yùn)算為例子來測(cè)試電子計(jì)算器的可行性。首先需要打開電源,能夠看到LCD打開顯示,說明能夠正常運(yùn)行,如果我們輸入一個(gè)比較完整的表達(dá)式:12*(34+56-78)/9,其正確結(jié)果應(yīng)該為16。當(dāng)所有的數(shù)值都被輸入以后,再按“=”鍵,其運(yùn)算結(jié)果就會(huì)在第二行的位置顯示出來。在使用過程中,按鍵音的打開和關(guān)閉還可以通過聲音開關(guān)按鈕來控制,通過在LCD上顯示出來以判斷是否打開按鍵聲音,如果有聲音被打開,則在第二行的第一個(gè)位置就有顯示。如果聲音還沒有被打開,那么在第二行的第一個(gè)位置就沒有顯示,它們都能夠通過按鈕打開或關(guān)閉聲音。如圖2所示。
6 結(jié)束語
本設(shè)計(jì)以STC89C52作為主控芯片,采用LCD1602液晶顯示數(shù)據(jù),軟件部分是用C語言來編寫,利用鍵盤和液晶設(shè)計(jì)的一個(gè)簡(jiǎn)便計(jì)算器,能夠?qū)崿F(xiàn)數(shù)據(jù)的簡(jiǎn)單四則運(yùn)算,并且在液晶屏上顯示運(yùn)算結(jié)果。另外單片機(jī)的程序能夠可靠運(yùn)行和修改,尤其是能夠?qū)崿F(xiàn)一些獨(dú)特的功能特性。通過利用單片機(jī)來編寫程序以便于完成高智能、高效率和更高的可靠性。
參考文獻(xiàn)
[1]彭棣,基于單片機(jī)的多功能計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)電氣工程自動(dòng)化[J],山東工業(yè)技術(shù),2017 (04):189.
[2]劉巧平,李平,周斌,基于STC89C51單片機(jī)的實(shí)用計(jì)算器設(shè)計(jì)[J].信息技術(shù),2016 (11):121-123+126.
[3]夏鯤,陳國(guó)平,單片機(jī)理論實(shí)驗(yàn)課程設(shè)計(jì)協(xié)同教學(xué)方法探討[J].課程教育研究,2016 (31):243.
[4]吳洋,許建明,陳炯明,基于單片機(jī)的電子計(jì)算器的設(shè)計(jì)[J].電子世界,2016 (08):18.