第一章 前言
1.1 系統開發背景
隨著社會的發展,科學的進步,人們的生活水平在逐步的提高,尤其是微電子技術的發展,猶如雨后春筍般的變化。電子產品的更新速度快就不足驚奇了。計算器在人們的日常中是比較的常見的電子產品之一。如何使計算器技術更加的成熟,充分利用已有的軟件和硬件條件,設計出更出色的計算器,使其更好的為各個行業服務,成了如今電子領域重要的研究課題。
1.2 系統開發意義
今天,人們的日常生活中已經離不開計算器了,社會的各個角落都有它的身影,比如商店,辦公室,學!。因此設計一款簡單實用的計算器會有很大的實際意義。
1.3 設計目的
本設計旨在進一步掌握單片機理論知識,理解嵌入式單片機系統的硬軟件設計,加強對實際應用系統設計的能力。通過本設計的學習,使我掌握單片機程序設計和微機接口應用的基本方法,并能綜合運用本科階段所學軟、硬件知識分析實際問題,提高解決畢業設計實際問題的能力,為單片機應用和開發打下良好的基礎。
1、對字符液晶顯示模塊的工作原理,如初始化、清屏、顯示、調用及外特性有較清楚的認識,并會使用LCD(液晶顯示模塊)實現計算結果的顯示;掌握液晶顯示模塊的驅動和編程,設計LCD和單片機的接口電路,以及利用單片機對液晶模塊的驅動和操作;
2、在充分分析內部邏輯的概念,進行軟件和調試,學會使用,并能夠以其為平臺設計出具有四則運算能力簡易計算器的硬件電路和軟件程序。
第二章 方案論證
2.1 方案構思
本設計可以采用兩種方案,一種是以FPGA為核心處理芯片,配備相應的外設;另外一種是以STC89C51處理器,配備相應的外設。
1、方案一:采用FPGA控制
FPGA是一種高密度的可編程邏輯器件,自從Xilinx公司1985年推出第一片FPGA以來,FPGA的集成密度和性能提高很快,其集成密度最高達500萬門/片以上,系統性能可達200MHz。由于FPGA器件集成度高,方便易用,開發和上市周期短,在數字設計和電子生產中得到迅速普及和應用,并一度在高密度的可編程邏輯器件領域中獨占鰲頭。
但是而基于 SRAM編程的FPGA,其編程信息需存放在外部存儲器上 ,需外部存儲器芯片 ,且使用方法復雜 ,保密性差,而其對于一個簡單的計算器而言,實用FPGA有點大材小用,成本太高。
2、方案二:采用STC89C51
單片機是單片微型機的簡稱,故又稱為微控制器MCU(Micro Control Unit)。通常由單塊集成電路芯片組成,內部包含有計算機的基本功能部件:中央處理器CPU,存儲器和I/O接口電路等。因此,單片機只要和適當的軟件及外部設備相結合,便可成為一個單片機控制系統。單片機廣泛用于智能產品,智能儀表,測控技術,智能接口等,具有操作簡單,實用方便,價格便宜等優點,而其中STC89C51以MCS-51為內核,是單片機中最典型的代表,應用于各種控制領域。
2.2 方案比較與選擇
通過以上兩種方案論證和比較,從設計的實用性,方便性和成本出發,選擇了以STC89C51單片機作為中央處理單元進行計算器的設計,這樣設計能夠實現對四位加減乘除和除法四位小點數的運算。
第三章 系統硬件設計及說明
3.1系統組成及總體框圖
圖3.1 系統組成及總體框圖
3.2元件簡介
3.2.1 STC89C51特點
圖3.2.1-1 單片機STC89C51
1、主要性能:
(1) • 8051 CPU與MCS-51 兼容
• 8K字節可編程FLASH存儲器(壽命:1000寫/擦循環)
• 全靜態工作:0Hz-33MHz
• 三級加密程序存儲器
• 128*8位內部RAM
• 32條可編程I/O線
• 三個16位定時器/計數器
• 八個中斷源
• 全雙工UART串行通道
• 低功耗的閑置和掉電模式
• 掉電后中斷可喚醒
• 看門狗定時器
• 雙數據指針
• 掉電標識符
• 片內振蕩器和時鐘電路
(2) 管腳說明:
VCC:供電電壓。
GND:接地。
2、STC89C51的功能特性描述
STC89C51 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統可編程Flash 存儲器。使用Atmel 公司高密度非 易失性存儲器技術制造,與工業80C51 產品指令和引腳完 全兼容。片上Flash允許程序存儲器在系統可編程,亦適于 常規編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統 可編程Flash,使得STC89C51為眾多嵌入式控制應用系統提 供高靈活、超有效的解決方案。
STC89C51具有以下標準功能: 8k字節Flash,256字節RAM, 32 位I/O 口線,看門狗定時器,2 個數據指針,三個16 位 定時器/計數器,一個6向量2級中斷結構,全雙工串行口, 片內晶振及時鐘電路。
此外, STC89C51 可降至0Hz 靜態邏 輯操作,支持2種軟件可選擇節電模式?臻e模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工 作。掉電保護方式下,RAM內容被保存,振蕩器被凍結, 單片機一切工作停止,直到下一個中斷或硬件復位為止。8 位微控制器 8K 字節在系統可編程 Flash。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應不同產品的需求。
3、STC89C51引腳功能
STC89C51 單片機為40 引腳芯片見圖3.2.1-2。
圖3.2.1-2 STC89C51引腳圖
(1)口線:P0、P1、P2、P3 共四個八位口。
P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏輯電平。
對P0端口寫“1”時,引腳用作高阻抗輸入。
當訪問外部程序和數據存儲器時,P0口也被作為低8位地址/數據復用。在這種模式下,P0不具有內部上拉電阻。
在flash編程時,P0口也用來接收指令字節;在程序校驗時,輸出指令字節。程序校驗時,需要外部上拉電阻。
P1口:P1 口是一個具有內部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅動4 個TTL 邏輯電平。對P1 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。
此外,P1.0和P1.1分別作定時器/計數器2的外部計數輸入(P1.0/T2)和定時器/計數器2的觸發輸入(P1.1/T2EX),具體如下表所示。
在flash編程和校驗時,P1口接收低8位地址字節。
引腳號第二功能:
P1.0 T2(定時器/計數器T2的外部計數輸入),時鐘輸出
P1.1 T2EX(定時器/計數器T2的捕捉/重載觸發信號和方向控制)
P1.5 MOSI(在系統編程用)
P1.6 MISO(在系統編程用)
P1.7 SCK(在系統編程用)
P2口:P2 口是一個具有內部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅動4 個TTL 邏輯電平。對P2 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。
在訪問外部程序存儲器或用16位地址讀取外部數據存儲器(例如執行MOVX @DPTR) 時,P2 口送出高八位地址。在這種應用中,P2 口使用很強的內部上拉發送1。
在使用8位地址(如MOVX @RI)訪問外部數據存儲器時,P2口輸出P2鎖存器的內容。
在flash編程和校驗時,P2口也接收高8位地址字節和一些控制信號。
P3 口:P3 口是一個具有內部上拉電阻的8 位雙向I/O 口,p3 輸出緩沖器能驅動4 個TTL 邏輯電平。對P3 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。
P3口亦作為STC89C51特殊功能(第二功能)使用,如表3.2.1所示。
表3.2.1 P3口管腳 備選功能:
在flash編程和校驗時,P3口也接收一些控制信號。
此外,P3口還接收一些用于FLASH閃存編程和程序校驗的控制信號。
(2)其他引腳說明:
RST:復位輸入。晶振工作時,RST腳持續2 個機器周期高電平將使單片機復位?撮T狗計時完成后,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態下,復位高電平有效。
ALE/PROG——當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時將跳過一個ALE脈沖。
對FLASH存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。
如有必要,可通過對特殊功能寄存器(SFR)區中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE禁止位無效。
PSEN——程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當STC89C51由外部程序存儲器取指令(或數據)時,每個機器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當訪問外部數據存儲器,將跳過兩次PSEN信號。
EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復位時內部會鎖存EA端狀態。
如EA端為高電平(接Vcc端),CPU則執行內部程序存儲器的指令。
FLASH存儲器編程時,該引腳加上+12V的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。
圖3.2.1-3晶振外接結構引腳圖
XTAL1是片內振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時,外部振蕩信號應直接加到XTAL1,而XTAL2懸空。內部方式時,時鐘發生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內選擇,在本設計電路中選用了12MHz。電容取20PF左右。機器周期=12×時間周期,如12MHz的機器周期為1微秒。
(3)控制或復位引腳
RESET 此腳為高電平時(約2個機器周期)可將單片機復位。
RST/VPD——當出現兩個機器周期高電平時,單片機復位。復位后,P0~P3輸出高電平;SP寄存器為07H;其它寄存器全部清0;不影響RAM狀態。如圖3.2.1-4所示。
圖3.2.1-4 按鍵電平復位
AT89SXX系列單片機實現了ISP下載功能,故而取代了89CXX系列的下載方式,也是因為這樣,ATMEL公司已經停止生產89CXX系列的單片機,現在市面上的AT89CXX多是停產前的庫存產品。
4、STC89C51的編程方法
編程前,須按編程模式表設置好地址、數據及控制信號;順序如下:
① 在地址線上加上要編程單元的地址信號。
② 在數據線上加上要寫入的數據字節。
③ 激活相應的控制信號。
④ 將EA/Vpp端加上+12V編程電壓。
⑤ 每對Flash存儲陣列寫入一個字節或每寫入一個程序機密位,加上一個ALE/PROG編程脈沖。每個字節寫入周期是自身定時的,大多數約為50us。改變編程單元的地址和寫入的數據,重復①—⑤步驟,直到全部文件編程結束。
單片機的現狀及發展方向:
單片機是為了工業控制需要滿足而誕生的,是自動控制系統的核心部件,因而也主要用于工業控制、智能化儀器儀表、家用電器中。它具有體積小,功能多、價格低、使用方便、系統設計靈活等優點,應用領域不斷擴大,除了工業控制,智能化儀表,通訊,家用電器外,在智能化高檔電子玩具產品中也大量采用單片機芯片作為核心控制部件。
由于單片機主要面向工業控制,工作環境比較惡劣,入高溫,強電磁干擾,甚至含有腐蝕性氣體,在太空中工作的單片機控制系統,還必須具有抗輻射能力,這決定了單片機CPU于通用微機CPU具有不同的技術特征和發展方向:
(1) 可靠性高;
(2) 控制功能往往很強,數值計算交叉;
(3) 指令系統比通用微處理器慢的多;
(4) X系列芯片取代;
(5) 抗干擾性強,工作溫度范圍寬。
3.2.2 LCD1602液晶顯示屏
1、應用簡介
模塊內部自帶字符發生存儲器(CGROM),字符有:阿拉伯數字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是(41H),顯示時模塊把代碼41H發給液晶模塊,我們就能在液晶上看到字母“A”。
1602液晶模塊內部的控制器共有11條控制指令,豐富的指令可以完成液晶的時序控制、工作方式式設置和數據顯示等。
采用的LCD1602液晶模塊是標準16針插座,接口電路如圖3.2.3所示:關于LCD1602的詳細資料見表3.2.3-1和表3.2.3-2。
圖3.2.3 LCD接口電路
表3.2.3-1 LCD1602引腳說明
| |
| |
| V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。 實際電路中采用2K電阻到地,比較理想。 |
| RS為寄存器選擇,高電平選擇數據寄存器、低電平選擇指令寄存器。 |
| RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。 當RS和RW共同為低電平時 (00)可以寫入指令或者顯示地址; 當RS為低電平RW為高電平時(01)可以讀入忙信號; 當RS為高電平RW為低電平時(10)可以寫入數據。 |
| E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。 |
| |
| |
表3.2.3-2 LCD1602指令表
| 清顯示 指令碼01H, 光標復位到地址00H位置; |
| 光標復位 指令碼02H, 光標返回到地址00H位置 ; |
| 光標和顯示模式設置 I/D位 → 光標移動方向,高電平右移,低電平左移; S 位 → 屏幕上所有文字是否左移或者右移,高電平有效,低電平無效; |
| 顯示開關控制 D 位 → 控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示; C 位 → 控制光標的開與關,高電平表示有光標,低電平表示無光標; B 位 → 控制光標是否閃爍,高電平閃爍,低電平不閃爍 ; |
| 光標或顯示移位 S/C位 → 高電平時移動顯示的文字,低電平時移動光標 |
| 功能命令設置 DL位---高電平時為4位數據總線,低電平時為8位總線; N—位低電平時為單行顯示,高電平時為雙行顯示; F—位低電平時顯示5x7的點陣字符,高電平時為5x10的點陣字符; |
| |
| |
| 讀忙信號和光標地址 BF位 → 為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據 |
| |
| |
2 、LCD的特點:
(1)低壓微功耗;
(2)平板型結構;
(3)被動顯示型(無眩光,不刺激人眼,不會引起眼睛疲勞);
(4)顯示信息量大(因為像素可以做得很小);
(5)易于彩色化(在色譜上可以非常準確的復現);
(6)無電磁輻射(對人體安全,利于信息保密);
(7)長壽命(這種器件幾乎沒有什么劣化問題,因此壽命極長,但是液晶背光壽命有限,不過背光部分可以更換)。
第四章 設計原理分析
4.1 設計方案的確定
本設計需要使用LCD液晶顯示屏和編碼鍵盤。故選擇靜態顯示和用編碼鍵盤。使用LCD液晶顯示屏顯示運算結果。
主程序進行初始化,其他的程序選擇模塊式的方式。首先對每個模塊進行調試, 當模塊調試成功后,逐一的加入主程序中,最后完成整個軟件部分的設計。
4.2計算器硬件方案及硬件資源分配
4.2.1 硬件資源分配
主要用到的硬件:STC89C51 LCD液晶顯示屏 編碼鍵盤
硬件分配:
1、P1、P3口:做為輸出口,控制LCD液晶顯示屏顯示數據的結果。
2、P2口:做為輸入口,與鍵盤連接,實現數據的輸入。
3、LCD液晶顯示屏顯示輸出。
4.2.2 系統的硬件設計
為了更好的實現系統得功能,硬件電路的設計應該遵循以下原則:
1、優化硬件電路
采用軟件設計與硬件設計相結合的方法;盡管采用軟件來實現硬件系統的功能時,也許響應時間會比單純使用硬件時長,而且還要占用微處理器(MCU)的時間;但是,用軟件實現硬件的功能可以簡化硬件結構,提高電路的可靠性。所以,在設計本系統得時候,在滿足可靠性和實時性的前提下,盡可能的通過軟件來實現硬件功能。
2、可靠性及抗干擾設計
根據可靠性設計理論,系統所用芯片數量越少,系統的平均無故障時間越長。而且,所用芯片數量越少,地址和數據總線在電路板上受干擾的可能性也就越小。因此,系統的設計思想是在滿足功能的情況下力爭使用較少數量的芯片。
3、靈活的功能擴展
功能擴展是否靈活是衡量一個系統優劣的重要指標。一次設計往往不能完全考慮到系統的各個方面,系統需要不斷完善以及進行功能升級。進行功能擴展時,應該在原有設計的基礎上,通過修改軟件程序和少量硬件完成。對于本系統而言,就是要求在系統硬件不變的情況下,能夠通過修改軟件程序,完成功能的升級和擴展。
根據第提出的系統設計方案,結合以上三條原則,確定了系統硬件的設計。計算器主要由以下一些功能模塊構成:非編碼鍵盤模塊、LCD液晶顯示屏模塊等。
該系統的硬件設計采用了模塊化的設計方法。STC89C51 單片機與LCD液晶顯示屏顯示電路是整個電路的核心,它們實現系統的功能要求。
簡易計算器主要包括:鍵盤電路,顯示電路。
下圖為總體硬件結構。(如圖4.2.2 所示為整個系統的原理圖)
圖4.2.2 計算器原理圖
前面敘述了該系統的設計說明,系統采用了比較簡單的設計方案,所以該系統的硬件設計的總外圍電路不會產生過多的干擾。在下面的闡述中,對系統的外圍電路分別予以介紹。鍵盤部分采用編碼鍵盤,顯示部分采用LCD液晶顯示屏完全能夠很好的實現顯示方面的要求。
4.2.3 鍵盤電路的設計
鍵盤可分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個以上)和專用驅動芯片的組合,當按下某個按鍵時,它能夠處理按鍵抖動、連擊等問題,直接輸出按鍵的編碼,無需系統軟件干預。通用計算機使用的標準鍵盤就是編碼鍵盤。在智能儀器中,使用并行接口芯片8279或串行接口芯片HD7279均可以組成編碼鍵盤,同時還可以兼顧數碼管的顯示驅動,其相關的接口電路和接口軟件均可在芯片資料中得到。當系統功能比較復雜,按鍵數量很多時,采用編碼鍵盤可以簡化軟件設計。非編碼鍵盤成本低廉。
從成本角度出發,本設計選用的是非編碼鍵盤。如圖4.2.3
圖4.2.3 編碼鍵盤電路
4.2.4 顯示電路的設計
當系統需要顯示少量數據時,采用LCD液晶顯示屏進行顯示是一種經濟實用的方法。P0口作為液晶顯示的數據端口,P2.5-P2.7口作為其控制端口,控制LCD液晶顯示屏顯示輸出數據。
最終電路如圖4.2.4所示:
圖4.2.4 LCD液晶顯示屏顯示
第五章 計算器的軟件設計
5.1計算器的軟件規劃
簡易計算器的程序主要包括以下功能模塊:
1、定時查鍵模塊,分為讀鍵程序、判鍵程序段、運算操作子程序等部分;
2、基于LCD液晶顯示屏的顯示模塊;
3、主模塊,為系統的初始化。
5.2 鍵盤掃描的程序設計
鍵盤掃描子程序,首先讀出P1的低四位,然后讀出P1口的高四位。然后鍵值并顯示緩存。然后將鍵如的值轉換為ASCII碼然后就可以軟件來設置硬件按鍵各個鍵代表的內容。
讀鍵程序使用的是反轉法讀鍵,不管鍵盤矩陣的規模大小,均進行兩次讀鍵。第一次所有行線均輸出低電平,從所有讀入鍵盤信息(列信息);第二次所有列線均輸出低電平,從所有行線讀入鍵盤信息(行信息)。
數字鍵按下則將相應的數字送入緩存區,功能鍵按下則執行相應的程序。
5.3 顯示模塊的程序設計
顯示模塊程序首先要對顯示模塊進行初始化;然后控制光標的位置;定義液晶顯示的控制端口,用SBIT指令完成;然后設置清屏、關閉顯示、歸位、開顯示、顯示位置的首地址等等。
顯示模塊的流程圖如圖5.3所示:
5.4 主程序的設計
主程序主要是用來對LCD液晶顯示屏進行初始化的。對輸入按鍵判斷,然后進行加減乘除,最后計算出結果,顯示出計算結果。
5.5 軟件的可靠性設計
提高本儀器其可靠性措施主要有:
1、為防止程序跑飛,軟件中設置了軟件陷阱。
結束語
在硬件的制作過程中我走了好多的彎路,主要是在系統還沒有設計很有把握就開始動手制作了。后來發現與設計的要求還有偏差,反復的改過了幾次,浪費了大量的時間和體力。感受到設計人員要有耐心,要認真的從要求開始研究。軟件的編寫過程中費了很大的力氣,因為軟件的編寫要求很高,要很細心,一不小心就會調用錯誤,很深刻的體會到作為軟件編程人員是絕不能粗心大意的。一個程序的完成的速度和質量高低與細心與否有著很大聯系。編程時,我充分使用了結構化的思想。這樣因為語句較少,程序調試比較方便,功能模塊可以逐一的調試,充分體現了結構化編程的優勢。當每個模塊都完成時,將其功能加到一起就完成了整體的設計。