
摘 要:單片機具有體積小、控制功能強、功耗低、環境適應能力強、擴展靈活和使用方便等優點,已廣泛應用在生活的各個領域,該文提出一種基于單片機的高精度計算器設計方案,核心控制系統采用STC89C52單片機,利用LCD1602液晶顯示屏顯示運算過程與結果,設計4×4鍵盤構成按鍵模塊,用來模擬0~9及加、減、乘、除、清零按鍵。軟件程序利用單片機C語言編寫,并在Keil C51開發環境下編譯,硬件系統通過proteus工具軟件設計并仿真。
關鍵詞:單片機 4×4鍵盤 LCD1602
中圖分類號:TN43 文獻標識碼:A 文章編號:1674-098X(2015)10(b)-0159-03
Design and Simulation of the Calculator Based on STC89C52
Song Huichao
(College of Physics and Electronic Information, Inner Mongolia University for Nationalities,Tongliao Inner Mongolia,028000,China)
Abstract:Single chip microcomputer has the advantages of small size,strong control function,low power consumption,strong adaptability to environment,flexible and easy to use.It has been widely used in various fields.This paper presents a design scheme of high precision calculator based on Single chip microcomputer.Control system is STC89C52 microcontroller.Operation process and results are displayed in the LCD1602 LCD screen.The key module is composed of 4*4 keyboard which is used to simulate the 0-9 and add,subtract,multiply,divide,reset button. Software program is written in C language and compiled by C51 Keil and verified by Proteus simulation.
Key words:Single chip microcomputer;4×4 keyboard;LCD1602
計算器是人們生活中最常見的工具之一,隨著科技的迅猛發展,計算器的功能越來越強大,對精度的要求也越來越高。以往利用單片機開發設計計算器,大多只能實現較簡單的加減乘除運算[1],且僅限于整數運算。該文通過C語言編程,設計了一種可以實現32位浮點數運算的高精度計算器,除了基本四則運算外,可以進行小數運算、負數運算,結果保留到小數點后5位,大數量的運算結果以科學計數法形式給出,運算過程通過LCD1602液晶屏顯示,利用清屏鍵可以隨時清除顯示。
1 系統硬件設計
基于單片機設計的計算器應具有高精度運算及結果顯示的功能。其中,4×4鍵盤用于數據輸入[2],LCD液晶顯示則可以分兩行顯示運算過程及最終結果。系統框圖如圖1所示。
下面對硬件模塊進行簡單說明,各模塊與單片機的具體連接請參見圖2系統硬件電路圖。
控制芯片STC89C52是STC公司生產的一種低功耗、高性能CMOS8位微控制器,具有8K在系統內可編程Flash存儲器。STC89C52使用經典的MCS-51內核,但做了很多的改進使得芯片具有傳統51單片機不具備的功能。
LCD1602是常用的液晶芯片,此處選用能同時顯示兩行,每行各16個字符的屏幕規格。VSS為地電源,VDD接5V正電源,VEE為液晶顯示器對比度調整端。8位雙向數據線D0~D7接單片機P0口。由于P0口常用作數據總線且內部無上拉電阻,此處需外接10K電阻增加驅動能力。控制端RS、R/W、E分別與單片機P2.5、P2.6、P2.7口相連,用來控制1602的讀寫狀態。
4×4鍵盤又稱為行列式鍵盤,它是4條I/O線作為行線,4條I/O線作為列線組成的鍵盤,在行線和列線的每一個交叉點上設置一個按鍵[3],這種結構可以有效地提高單片機系統中I/O口的利用率。4條行線分別接單片機P1.3~P1.0,4條列線接單片機P1.4~P1.7,每位按鍵對應的功能可參見圖2系統硬件仿真圖。
2 系統軟件設計
通過下面程序可以看出主函數main()中所調用的部分子程序,分別實現LCD初始化、鍵盤掃描、字符顯示等功能。
void main()
{ init() //初始化LCD
LCD_dsp_string(4,0,”Hello!”); //顯示字符串“Hello!”
key_scan(); //鍵盤掃描程序
LCD_dsp_char(); //顯示字符子程序
…… //算數運算
LCD_dsp_string(0,1,temp); //在第二行第一個位置顯示運算結果
write_com(0x01);}//清屏
除此之外,LCD1602.c作為液晶顯示程序,內部定義了1602初始化函數init()、忙閑判斷函數check(),讀寫控制函數write_com()與write_data()、顯示字符LCD_dsp_char()及字符串函數LCD_dsp_string()等。key_scan.c為鍵盤掃描程序,根據矩陣鍵盤的原理,通過讀取P1口狀態來確定按鍵位置并將對應值返回主程序[4]。
3 仿真及結果分析
硬件和軟件設計分別利用Proteus與Keil集成開發環境實現。C語言程序代碼由Keil編寫并編譯,將產生的可執行文件加載到Proteus中[5],實現仿真功能。
系統仿真總體電路圖如圖2所示,系統啟動后屏幕上顯示歡迎信息“Welcome!”。具體結果演示如圖3所示,計算器可以進行較高精度的加減乘除運算,支持小數運算,結果保留到小數點后5位,其中,圖3(a)為大數量的加法運算,結果用科學記數法顯示;圖3(b)為減法運算,結果為負數;圖3(c)和圖3(d)分別為乘法、除法運算,結果均保留到小數點后5位。
4 結語
該文利用STC89C52單片機做主控芯片,完成了高精度計算器的設計,實現加減乘除等基本運算功能的同時,提高了運算精度,支持負數運算及小數運算。4×4交叉按鍵電路用作數據輸入模塊,通過8條I/O線與單片機相連,液晶屏電路做為輸出顯示模塊,隨時顯示運算過程。軟硬件系統經過proteus仿真驗證,實現了所有預設功能,具有很強的實用性,對學習單片機系統有一定的幫助。
參考文獻
[1]曹瑞,徐森.基于單片機的計算器的設計[J].科技視界,2011(25):6-9.
[2]吳宏杰,王揚,王致杰,等.基于AT89C51單片機的十進制計算器系統設計[J].電子測試,2013(9):43-44.
[3]徐昆良.基于AT89S52單片機的簡易計算器設計與仿真[J].電腦知識與技術,2015,11(16):211-212.
[4]董雷剛,崔曉微,程書偉.基于單片機的數字計算器的設計[J].電腦知識與技術,2012,8(10):2386-2414.
[5]李嘉誠.基于proteus的數字計算器設計與實現[J].軟件導刊,2015,14(5):90-92.