韓光江+孫鵬+何夢(mèng)雪+余曉銘
摘 要:提出了一種可進(jìn)行連續(xù)四則運(yùn)算的計(jì)算器設(shè)計(jì)方案,主要從硬件部分和軟件部分兩方面介紹此設(shè)計(jì)方案。在硬件部分中,說(shuō)明了所選用的STC公司最新的STC15F2K61S2微控制器相比于傳統(tǒng)C51單片機(jī)的優(yōu)勢(shì),提出了僅用3個(gè)引腳驅(qū)動(dòng)8位數(shù)碼管的方法,并介紹了4×4矩陣鍵盤(pán)的驅(qū)動(dòng)方案;在軟件部分中,給出了計(jì)算器程序執(zhí)行流程圖,并提出了一種實(shí)現(xiàn)計(jì)算器四則運(yùn)算的算法。
關(guān)鍵詞:計(jì)算器;單片機(jī);驅(qū)動(dòng)方案;數(shù)碼管
中圖分類(lèi)號(hào):TP368.1 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.15913/j.cnki.kjycx.2015.10.101
隨著嵌入式技術(shù)的不斷發(fā)展,計(jì)算器在生活中的應(yīng)用越來(lái)越廣泛,便攜式計(jì)算器日益成為人們工作、學(xué)習(xí)中不可或缺的工具。因此,采用STC公司最新的STC15F2K61S2單片機(jī),并結(jié)合數(shù)碼管、矩陣鍵盤(pán)等模塊完成了一種可進(jìn)行8位數(shù)以?xún)?nèi)四則運(yùn)算的計(jì)算器設(shè)計(jì)。其能進(jìn)行連續(xù)的四則運(yùn)算,并能實(shí)時(shí)顯示當(dāng)前輸入數(shù)據(jù)和輸出結(jié)果,具有計(jì)算可靠、制作簡(jiǎn)單、集成度高、成本低等優(yōu)點(diǎn)。
1 計(jì)算器硬件設(shè)計(jì)部分
1.1 微控制器
STC15F2K61S2系列單片機(jī)是STC生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速、高可靠性的新一代8051單片機(jī),ISP編程時(shí)時(shí)鐘頻率可設(shè)置為5~35 MHz,可徹底省掉外部晶振。其內(nèi)部已集成了高可靠性的復(fù)位電路,無(wú)需再設(shè)計(jì)外部復(fù)位電路。
此外,STC15F2K61S2相比于傳統(tǒng)的C51系列單片機(jī)而言,具有良好的在線(xiàn)仿真功能,可直接在集成開(kāi)發(fā)環(huán)境Keil中進(jìn)行在線(xiàn)仿真調(diào)試,極大地提高了軟件開(kāi)發(fā)的效率。
1.2 數(shù)碼管顯示模塊
本模塊包含8個(gè)數(shù)碼管。在傳統(tǒng)的數(shù)碼管驅(qū)動(dòng)方法中,需要采用8個(gè)引腳段選,極大地浪費(fèi)了微控制器的引腳資源。因此,本設(shè)計(jì)采用2片74HC595芯片,實(shí)現(xiàn)了采用3個(gè)引腳就能完成8位數(shù)碼管的驅(qū)動(dòng),很好地節(jié)省了有限的控制器資源。
設(shè)計(jì)采用2片74HC595串聯(lián),第一級(jí)(U1)的串行輸出口(QH)與第二級(jí)(U2)的串行輸入口(SER)相連。這樣在串行輸入時(shí)鐘的作用下,可一次性更新16位數(shù)據(jù)。其中,U1輸出的8位數(shù)據(jù)為數(shù)碼管的段選,控制數(shù)碼管顯示數(shù)字;U2輸出的8位數(shù)據(jù)用于選中數(shù)碼管以循環(huán)刷新。在C語(yǔ)言程序代碼中,會(huì)預(yù)先存儲(chǔ)所需要的數(shù)碼管顯示編碼,包括段選編碼和位選編碼,顯示數(shù)字時(shí)只需輸出相應(yīng)編碼即可。
1.3 矩陣鍵盤(pán)
用戶(hù)輸入采用4×4矩陣鍵盤(pán),依次表示阿拉伯?dāng)?shù)字“0~9”“+”“-”“×”“÷”“=”和“清零(CLR)”。采用8個(gè)I/O口進(jìn)行驅(qū)動(dòng),其中,4個(gè)為輸入口,4個(gè)為輸出口。驅(qū)動(dòng)時(shí),在主函數(shù)中對(duì)矩陣鍵盤(pán)輪詢(xún)進(jìn)行掃描。掃描時(shí)控制行的4個(gè)I/O置高作為輸入,控制列的4個(gè)I/O置低為輸出模式。當(dāng)讀取到控制行I/O的狀態(tài)發(fā)生改變,即有按鍵按下,且處于狀態(tài)發(fā)生改變的一行4個(gè)按鍵之中。此時(shí),可進(jìn)一步判斷具體被按下的按鍵,將控制行的I/0置低,控制列的I/O口置高,查詢(xún)控制列的I/O狀態(tài),即可找到具體被按下的按鍵。
2 計(jì)算器軟件設(shè)計(jì)部分
計(jì)算器在上電復(fù)位后進(jìn)行相關(guān)外設(shè)的初始化,設(shè)置定時(shí)器的中斷時(shí)間為5 ms。在中斷函數(shù)中,讀取數(shù)碼管緩沖區(qū)中的數(shù)據(jù),通過(guò)74HC595串行輸入并行輸出進(jìn)行顯示,每次刷新1個(gè)數(shù)碼管,利用二極管的余輝效應(yīng)可達(dá)到同時(shí)顯示8個(gè)數(shù)字的效果。具體過(guò)程如圖1所示。
在主函數(shù)中,利用輪詢(xún)法判斷是否有按鍵被按下。在判斷
有按鍵按下后,更新按鍵編碼緩沖區(qū)的數(shù)據(jù),并利用此數(shù)據(jù)確定按鍵動(dòng)作函數(shù)。如果輸入的是“0~9”,則臨時(shí)緩沖區(qū)中的數(shù)據(jù)將“×10+按鍵所代表的數(shù)字”。比如,臨時(shí)緩沖區(qū)的數(shù)據(jù)為2,按下按鍵“5”,則進(jìn)行“2×10+5”的操作。此時(shí),臨時(shí)緩沖區(qū)的數(shù)據(jù)更新為25.
當(dāng)按下運(yùn)算符按鍵時(shí),將運(yùn)算符標(biāo)志修改為相應(yīng)的運(yùn)算符編碼,結(jié)果緩沖區(qū)會(huì)復(fù)制臨時(shí)緩沖區(qū)的數(shù)據(jù)。比如,按下“+”,則記錄運(yùn)算符標(biāo)志symbol修改為1,當(dāng)輸入下一個(gè)數(shù)字按下“=”鍵或其他運(yùn)算符按鍵,根據(jù)運(yùn)算符標(biāo)志位,結(jié)果緩沖區(qū)和臨時(shí)緩沖區(qū)進(jìn)行相應(yīng)運(yùn)算,并將結(jié)果緩沖區(qū)的內(nèi)容復(fù)制到數(shù)碼管緩沖區(qū),以便數(shù)碼管及時(shí)更新。
3 結(jié)束語(yǔ)
設(shè)計(jì)方案采用的微控制器是STC公司最新的STC15F2K61S2微控制器,相比于傳統(tǒng)的51單片機(jī),其能進(jìn)行在線(xiàn)仿真調(diào)試,且無(wú)需外部晶振和復(fù)位電路,降低了制作的成本和復(fù)雜度。顯示部分采用2片74HC595串聯(lián)的方法,僅使用3個(gè)引腳便可完成8位數(shù)碼管的驅(qū)動(dòng)。在軟件設(shè)計(jì)中,提出的算法嚴(yán)謹(jǐn)、可靠,可按照預(yù)定的要求進(jìn)行連續(xù)的四則運(yùn)算。因此,文章中的計(jì)算器設(shè)計(jì)方案具有使用可靠、成本低廉、集成度高和制作簡(jiǎn)單等一系列優(yōu)點(diǎn)。在制作完成后,通過(guò)大量的運(yùn)算驗(yàn)證證明,本設(shè)計(jì)能達(dá)到設(shè)計(jì)要求,可正確輸出計(jì)算結(jié)果。此外,此設(shè)計(jì)對(duì)理解單片機(jī)的原理、學(xué)習(xí)單片機(jī)的控制具有很大幫助。
參考文獻(xiàn)
[1]張建強(qiáng).電子制作基礎(chǔ)[M].西安:西安電子科技大學(xué)出版社,2010.
〔編輯:張思楠〕