基于單片機的多功能計算器設計與實現_第1頁
基于單片機的多功能計算器設計與實現_第2頁
基于單片機的多功能計算器設計與實現_第3頁
基于單片機的多功能計算器設計與實現_第4頁
基于單片機的多功能計算器設計與實現_第5頁
已閱讀5頁,還剩40頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第2章系統的總體設計2.1設計要求本設計要求是能實現基本的運算過程以及結果展示和溫度、時間的顯示。功能一:當系統開機按鍵后能顯示當時實時溫度、時間,并在有需要的時候可以進行修改以滿足要求。功能二:軟件可以自動進行加、減、乘、除五個帶符號化的數字自動運算(七位甚至整數、六位甚至小數),并在一臺液晶電腦顯示屏上進行靜態自動顯示操作過程及運算結果。2.2總體框圖本文硬件設計主要由電源模塊、顯示控制模塊、溫度控制模塊、獨立移動按鍵控制模塊、時鐘控制模塊以及移動時鐘、復位模塊相結合組成。本設計由電源模塊向整體工作提供電源。由模塊時鐘、溫度啟動模塊通過啟動單片機在啟動顯示器的模塊板上顯示工作時間和時鐘溫度,由模塊鍵盤啟動模塊通過鍵盤按下模塊相應的轉盤鍵再通過啟動單片發電機再進行顯示后在模塊上鍵盤顯示啟動計算機的過程以及計算結果。本設計系統總體框圖如圖2.1所示。圖2.SEQ圖\*ARABIC\s11總體框圖2.3方案比較與選擇2.3.1主控芯片的比較與選擇方案一:最新芯片方案采用了最新的芯片AT89S52芯片,AT89S52是Atmel公司的,它其實指的是一種低頻高成本的小功耗,高性能的acmos8位雙核高頻微處理機,具有8k的頻率asflash八位數據存儲器。AT89S52具有使用方便,可靠性好,在線自動運行不可編程代碼文件時并可自動進行擦除等諸多重要優點,AT89S52是一種低硬件成本的小功耗、高性能的fcmos8位編碼數字存儲微控制器,具有8k內是操作系統最高精度可編譯化程度的一個flash八位數字存儲器。使用核心技術:aatmel三星公司主要采用各種高密度非具有易受沖擊損失性能的芯片組和存儲器作為核心技術進行設計開發制造,與目前三星電子工業80c51產品線的所有指令和引腳完全完美相互兼容。片上程序軟件編程flash不僅適合允許程序執行多個程序同時使用軟件存儲器在整個操作系統內核中進行軟件編程,亦比較符合適于程序使用其他常規軟件程序進行編程器。在一個八位單芯片上,擁有靈巧的8位數字ascpu和在其他應用程序系統管理軟件中和可編程下的8位flash,使得AT89S52在眾多大型通用嵌入式控制器和其他應用系統管理軟件系統中同樣能夠同時得到廣泛應用。。方案二:核心芯片設計采用一個標準中的STC89C51芯片,STC89C51ISP這個就是一個芯片采用8051核的一個標準通用isp(insystemprogramming)在指令系統內部用戶運行可編程系統中的核心芯片,最高工作時鐘讀入工作頻率最低時鐘讀入輸出工作頻率為80mhz,片上還帶有內含4kbytes的一個同時可反復自動只讀擦寫1000次的存儲器件,而flash自動不寫只讀只讀是寫寫在程序代碼中的存儲器,器件設計結構上的兼容性遠低于一個標準80mcs-51指令系統及80c51引腳中的器件設計結構,芯片內分別同時集成了一個標準通用8位中央處理器和一個標準中的ispflash存儲單元,具有在指令系統內部用戶運行可編程(isp)過程中的重要特性,配合標準ISPC端的自動控制中的只讀只寫程序代碼應用程式即可將指令系統內部用戶的自動只讀只寫程序代碼直接進行下載并自動寫進一個通用單片機的計算機內部,省去了系統用戶首次購買時的一個通用八位中央編程器,而且用戶運行代碼速度更快。STC89C5RRERER該系列新型射頻單片機是其內核主要是單射頻單位機器時鐘/單個單位機器時鐘工作一個周期(1t)的高速頻率兼容8051內核的一系列新型單片機,是高速/低時鐘頻率和高功耗的新型第一代8051單片機,全新的簡單設計流水線/精簡指令集成的設計硬件結構,內部硬件可以直接集成一個MAX810專用的單射頻高速復位信號控制電路。本設計更注重實用性、靈敏性。因此,主控芯片采用一片STC89C52單片機。STC89C52便于系統的開發以及參數的修改。其處理精度完全滿足系統的設計要求,處理速度完全達到設計要求。2.3.2溫度模塊的選擇方案一:數據分析溫度管理集成軟件DS18B20用于實時精確測量特定點的溫度,并且實時輸出溫度數據信號功能是完全非常智能的。它非常有利于實現單片機的硬件設計,解析和測量控制,節省了用于傳統的熱測溫控制方法的許多外圍控制電路。而且這種集成PIC的空氣物理性能非常穩定,可以廣泛用作各種工業生產的空氣溫度變化測量重要組件,該組件具有良好的線型。在0-100℃時,較大的徑向線性誤差小于1℃。DS18B20的較大功能之一也就是可以使用總線結構模塊來進行傳輸數據。它指的是一種新型溫度自動精確測量數字設備,由溫度數據采用溫度計量的DS18B20和采用微控制器的DSTC89C52組成。它不僅可以立即同時輸出特定溫度的高頻模擬信號,并且它還可以立即發送連接數據到您的電子鐘和計算機。這樣,溫度自動測量管理系統應用軟件的整體結構也就非常簡單,體積也不大。采用51單片機進行控制,程序設計編程簡單具有很好的游戲可玩性,可以根據應用程序要求完成各種復雜算術參數優化控制算法和各種邏輯優化控制,體積小,硬件安裝配置容易輕松完成,安裝方便??梢元毩⑼瑫r控制多個DS18B20的控制工作,還同時可以與PC計算機進行通信同時上傳控制數據,另外STC89C52在各種工業過程控制上也已經有著廣泛的實際應用,編程技術及外圍軟件功能控制電路的相互配合對其使用都很成熟。方案二:采用熱電偶溫差電路測溫,采用后的熱電阻冷偶通過溫差敏感電路進行測溫,溫度敏感檢測電路部分中也可以直接使用靜電低溫檢測熱偶,熱電偶由兩個完全焊接在一起的異質性金屬熱電導線所連接組成,熱電偶導線產生的兩個熱電勢由兩種不同金屬的兩個接觸電勢和單一金屬導體的兩個溫差電勢結合組成。通過將檢測參考點的結點電壓保持在一個已知值的溫度并同時測量該結點電壓,便于即可通過推斷計算出需要檢測參考結點的實際溫度。數據采集處理部分則可以使用一臺帶有多個a/d轉換通道的主控單片機,在將隨被控監測系統溫度不斷變化的工作電壓或啟動電流數據采集處理過來,進行多個a/d通道轉換后,就這樣可以用主控單片機用來進行溫度數據的采集處理,在溫度顯示器的電路上,就這樣可以將被控所測量的溫度數據顯示的輸出來。熱電偶的主要優點之一是它們工作時的溫度控制范圍非常寬,且容器體積小,但是它們也同時存在著由于輸出來源電壓小、容易同時遭受一些來自電源導線供電環路的其他噪聲因素影響以及功率漂移較高的一些缺點,并且這種電路設計通常需要被應用到帶有a/d的旋轉<br>和轉換能的電路,感溫器的電路比較麻煩。從以上兩種方案中,很容易看出,方案二的測溫設備可以進行大范圍,小尺寸的溫度測量,但線性誤差較大。方案一的溫度測量設備的電源電路簡單,準確,易于完成,并且軟件開發也非常簡單,因此本設計方案采用方案一。2.3.3時鐘的選擇方案一:DS1302是Dallas芯片公司自主生產的一種高頻頻率實時無線數字射頻時鐘自動控制系統芯片。它通過無線網絡串行實時通信網的方式與所有無線單片機系統用戶連接進行實時在線管理數據信息實時在線傳送,能夠向所有無線單片機系統用戶實時提供各種形式包括秒、分、時、日、月、年等在內的各種數據實時信息在線管理時間信息管理數據信息,并且還同時可對月末日的出生日期、閏年日等出生天數自動實時調整信息進行實時在線調整;它還同時能夠擁有一個分別用于連接主線源網路內部電源和一個用于自動備份電源線路內部電源的雙極子線路內部電源引腳,在它們沒有實現主電源線路內部電源輸出時鐘自動關閉的正常工作情況下,也同樣足夠能有效率地保持整個電源線路時鐘的連續正常工作運行。另外,它們中還有一個可能為您主機提供31字節的一個可以用于手動設置高速數據暫時性和緩存的控制指令如aram。方案二:DS1307是一款功耗較低,具有56字節非失性RAM的全BCD碼時鐘日歷實時時鐘芯片,地址和數據通過兩線雙向的串行總線的傳輸,芯片可以提供秒、分、小時等信息,每一個月的天數能自動調整REF_Ref3662\w\h[1],并且有閏年補償功能。從以上兩種方案,綜合選擇了方案一,因為DS1302更加符合本文設計要求也更加方便快捷,能夠向單片機更好的提供時鐘信號,故本設計采用方案一。第3章系統的硬件設計3.1主控模塊設計3.1.1單片機的介紹MCS-51系列單片機簡介STC89C52是基于S-MCS-51系列超微產品單片機的一個具有典型重要代表超微產品,以這一系列具有重要代表性的超微產品應用機型系列為主要例子并進行系統的應用案例分析講解。STC89C52單片機引腳結構框圖包含中央處理器、程序執行器和存儲器(rom)、數據處理器和存儲器(ram)、定時/射頻定位器和計數器、并行接口控制單元接口、串行接口和外部數據信息中斷處理控制接口系統等幾大內部接口控制單元及外部接口數據總線、地址總線和內部數據中斷控制器和處理接口總線等三十四條八大總線REF_Ref7514933\w\h[2],其引腳示意圖如圖3.1所示,現在對其引腳加以說明:圖3.1stc89c52引腳結構圖①主電源引腳(2根)VCC(Pin40):電源輸入,接+5V電源GND(Pin20):接地線②外接晶振引腳(2根)XTAL1(Pin19):片內振蕩電路的輸入端XTAL2(Pin20):片內振蕩電路的輸出端③控制引腳(4根)RST/VPP(Pin9):復位引腳,引腳上出現2個機器周期的高電平將使單片機復位。ALE/PROG(Pin30):輸入地址設置鎖存時間允許輸入信號PSEN(Pin29):外部存儲器讀選通信號EA/VPP(Pin31):指令輸入輸出程序內部指令數據存儲器的內外部指令電路不能選通,接不上達到一個低電平從外部指令輸入輸出程序內部指令數據存儲器直接開始讀內部輸入指令,如果外部指令接口達不到一個高電平則從內部指令輸入輸出程序外部指令數據存儲器直接開始讀外部輸入指令REF_Ref7514988\w\h[3]。④可編程輸入/輸出引腳(32根)STC89C52單片機有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個口有8位(8根引腳),共32根。PO口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7P1口(Pin1~Pin8):8位準雙向I/O口線,名稱為P1.0~P1.7P2口(Pin21~Pin28):8位準雙向I/O口線,名稱為P2.0~P2.7P3口(Pin10~Pin17):8位準雙向I/O口線,名稱為P3.0~P3.7REF_Ref7515027\w\h[4]。3.1.2單片機的最小系統單片機最小電路系統,又常??梢员缓喎Q為最小外部應用電路系統,就是指一個應用單片上電機能立即開始獨立運行工作所有必需的最基本的外部應用電路板的連接。對51系列數控單片化電機來說,最小控制系統一般電路應該主要包括:控制單片機、晶振控制電路、復位控制電路REF_Ref7515048\w\h[5]。主控制最小系統電路如圖3.2所示。圖3.2單片主控電路3.2鍵盤輸入模塊的設計鍵盤輸入模塊由4x4矩陣鍵盤構成,用于控制“0~9”、“加減乘除”的錄入,以及完成時鐘控制的任務,并添加按鍵用于進行功能之間的轉換,是系統人機交互的重心所在REF_Ref7515097\w\h[6]。3.2.1鍵盤按鍵的定義按鍵通常分為矩陣按鍵和獨立按鍵,是電子器件中普遍使用的一種控制輸入、轉換或完成一系列特定功能的元件,主要由金屬彈片構成內部結構,用法相對簡單。按下按鍵即按下金屬彈片,從而接通電路,松開按鍵即松開金屬彈片,從而斷開電路,一按一松即完成一個按鍵的操作回合,以實現相應功能REF_Ref7515118\w\h[7]。3.2.2按鍵工作原理矩陣鍵盤一般由矩陣的行和矩陣的列構成,4x4矩陣鍵盤共有4行和4列共16個按鍵,每個按鍵為4根行線和4根列線的交集,將各行各列按照順序接在電路板上,每個按鍵都有自己的行值口和列值口,各值口又都有自己的編碼,每個按鍵編碼即為行值和列值編碼的組合,同時也錄入了相應功能。首先要判斷是否有按鍵按下,若有,則接著判斷該按鍵位于哪行哪列,通過行列交叉得到唯一按鍵功能,并消除該按鍵在閉合和斷開時產生的抖動,其原理圖如圖3.3所示。圖3.3矩陣鍵盤硬件原理圖s3—s5:數字1、2、3;s7—s9:數字4、5、6;s11—s13:數字7、8、9;s15:小數點“.”;s16:數字0;s17:等于“=”;s6:加“+”;s10:減“-”;s14:乘“*”;s18:除“/”3.3顯示模塊的設計本設計用LCD1602液晶顯示屏來顯示時間、溫度以及計算過程和結果3.3.1LCD1602液晶簡介LCD1602液晶電視顯示屏字符是一種專門制作用于液晶顯示字符的大型模塊化元器件,是由各種字符型號的液晶電視顯示屏(lcd)、控制器和驅動元器主元件電路板和HD44780及其內部擴展控制驅動元件電路板和HD44100REF_Ref7515169\w\h[8],以及少量開關電阻、電容控制元件和驅動結構件等部分裝配在一個pcb電路板上而整合組成,較其它液晶顯示屏而言使其具有高顯示功效、高畫質、低耗能、低成本等優勢。除此之外,該驅動顯示屏與所有單片式主機驅動接口相互進行匹配,驅動連接方式簡易,僅通過連接rs(輸入數據使用命令功能選擇端)、r/w(讀寫功能選擇端)、en(數據使用功能選擇端)三個主控制端口以及DB0~DB7八個數據傳輸端口就能進行驅動操作REF_Ref9758548\w\h[9],其實物圖如圖3.4所示。圖3.4LCD1602實物圖LCD1602液晶顯示屏根據不同的設置,可顯示數字、字母或符號等內容,其內部由多個點陣組成,每個字符都有唯一一個二進制代碼與之對應,每個代碼又可轉換為唯一一個點陣圖形,當我們輸入一個字符時,就有相應點陣圖形出現在顯示屏上REF_Ref4531\w\h[10]。3.3.2LCD1602液晶與單片機接口概述本系統將液晶芯片的數據口DB0~DB7與單片機芯片的P0~P0.7口連接,由于P0口僅僅是讀數據,所以不需要上拉電阻REF_Ref7515232\w\h[11]。并將另外三個主要引腳RS(數據命令選擇端)、R/W(讀寫選擇端)和EN(使能端)分別與單片機的P1.0、P1.1、P1.2引腳相連接,其電路圖如REF_Ref7353761\h圖3.5所示。BG/GNDLCD1 BG/GNDLCD1BG/VCCDB7GNDVCCVODB6DB5DB4DB3DB2DB1DB0ERWRSBG/VCCDB7GNDVCCVODB6DB5DB4DB3DB2DB1DB0ERWRSP0.1GNDGNDP0.7P0.6P0.5P0.4P0.3P0.2P0.0P1.2P1.0P0.1GNDGNDP0.7P0.6P0.5P0.4P0.3P0.2P0.0P1.2P1.0P1.1VCCP1.1VCCVCCVCC圖3.5液晶接口電路3.4時鐘模塊的設計本設計采用DS1302時鐘芯片作為時鐘模塊控制芯片,可以顯示實時溫度和時間,并且可以在鍵盤模塊工作時,顯示計算的過程和結果REF_Ref7515253\w\h[12]。時鐘電路主要用于提供系統工作所需要的時鐘信號,在單片機中主要按內部時鐘和外部時鐘進行電路分類。時鐘電路由兩個22pF的瓷片電容和一個晶體振蕩器組成,形成的起振電路為單片機提供時序信號,再通過單片機完成相關功能。在反向振蕩放大器的輸入端和輸出端之間接入一個由電容和晶體振蕩器組成的起振電路,從而形成一個穩定的自激振蕩器,在引腳XTAL1和XTAL2上輸出3V左右的正弦波,電路中的兩個微調電容對振蕩器起振,主要起輔助和推動作用,其大小為22pF左右,石英晶體振蕩器的振蕩頻率范圍為1.2~12MHzREF_Ref7515269\w\h[13]。時鐘芯片DS1302的接口電路及工作原理:P1.3P1.4P1.3P1.4P1.5圖3.6DS1302與MCU接口電路圖3.6為DS1302的接口電路,其中Vcc1為后備電源,Vcc2為主電源。VCC1在單電源與電池供電的系統中提供低電源并提供低功率的電池備份REF_Ref4727\w\h[14]。VCC2在雙電源系統中提供主電源,在這種運用方式中VCC1連接到備份電源,以便在沒有主電源的情況下能保存時間信息以及數據。DS1302由VCC1或VCC2兩者中較大者供電。當VCC2大于VCC1+0.2V時,VCC2給DS1302供電。當VCC2小于VCC1時,DS1302由VCC1供電。DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置“0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序控制字的位7必須置1,若為0則不能對DS1302進行讀寫數據。對于位6,若對時間進行讀/寫時,CK=0,對程序進行讀/寫時RAM=1。位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;進行寫操作時,該位為0REF_Ref4773\w\h[15]。控制字節總是從最低位開始輸入/輸出的。表-2為DS1302的日歷、時間寄存器內容:“CH”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態;當該位為0時,時鐘開始運行?!癢P”是寫保護位,在任何的對時鐘和RAM的寫操作之前,“WP”必須為0。當“WP”為1時,寫保護位防止對任一寄存器的寫操作。3.5溫度傳感模塊的設計系統中溫度的顯示是通過DS18B20溫度傳感器感應周邊環境溫度的,它僅需占用單片機的一個端口,并可直接將環境溫度轉化為數字信號,以數碼形式串行輸出,再通過液晶顯示屏顯示出來。DS18B20進行精確的溫度轉換,I/O線必須保證在溫度轉換期間提供足夠的能量,由于每個DS18B20在溫度轉換期間工作電流達到1mA,當幾個溫度傳感器掛在同一根I/O線上進行多點測溫時,只靠4.7K上拉電阻就無法提供足夠的能量,會造成無法轉換溫度或溫度誤差極大REF_Ref4808\w\h[16]。圖3.7溫度傳感器電路引腳圖3.6系統總原理圖將單片機各部分硬件電路在仿真軟件中繪制好之后,經過仿真調試就可以在原理圖中看到模擬的實物運行狀態和過程,如圖3.8所示。圖3.8總原理圖系統開機后默認顯示0,按鍵后顯示溫度、時間信息,按鍵后可進行相應的數字處理并且在顯示器上顯示出來計算過程及結果。第4章軟件設計4.1軟件總設計流程接通電源后,系統則進行包括鍵盤初始化、液晶初始化等一系列元件的初始化任務,之后進入循環掃描。若按下按鍵,首先判斷該按鍵為輸入鍵盤按鍵還是功能切換按鍵,判斷完成后進行相應模塊的操作任務REF_Ref4861\w\h[17]。隨后系統通過錄入信息自動進行計算,并將最終的計算結果顯示在液晶屏上。除此之外,時鐘產生的時間信息和溫度傳感器檢測到的環境溫度也會通過信號的轉換顯示在顯示屏上。系統總流程圖如圖4.1所示。開始開始初始化初始化數碼管顯示零數碼管顯示零鍵盤列掃描鍵盤列掃描清零輸入鍵盤按鍵數字鍵有鍵按下?清零輸入鍵盤按鍵數字鍵有鍵按下?清零鍵清零鍵運算功能按鍵運算功能按鍵運算功能鍵運算功能鍵記憶對應鍵值記憶對應鍵值否其他鍵是“否其他鍵是“=”?數碼管顯示數碼管顯示是是記憶運算符計算最后結果記憶運算符計算最后結果數碼管顯示數碼管顯示數碼管顯示數碼管顯示NN圖4.1系統總流程圖NN4.2鍵盤掃描程序流程本系統通過4x4矩陣鍵盤實現數據的錄入和操作功能,四行分別接P3口的前四個端口,四列分別接P3口的后四個端口。鍵盤掃描程序的過程遵循一定的順序和流程,系統首先進行行的掃描,若檢測到有行信號出現,則表明當前有按鍵按下,其次判斷出該按鍵位于四行中的哪一行,并篩選出位于該行的數字、字母或符號,完成后再進行列的掃描,判斷出該按鍵位于四列中的哪一列,同樣篩選出位于該列的數字、字母或符號,通過行列交叉的方式,最終獲得唯一一個按鍵信息。在單片機應用系統中,一般都會設置鍵盤,主要為了控制運行狀態,輸入一些命令或數據,以完成特定的人機交互REF_Ref4946\w\h[18]。鍵盤是與單片機進行人機交互的最基本的途徑,其以按鍵的形式來設置控制功能或輸入數據,按鍵的輸入狀態本質上是一個開關量。對于簡單的開關量的輸入可以采用獨立式按鍵,這種方法接口簡單,但占用單片機I/O端口資源較多。對于輸入參數較多、功能復雜的系統,需要采用矩陣式鍵盤進行輸入控制。本系統采用4*4矩陣式鍵盤,按鍵掃描識別程序流程圖如圖4.2所示。圖4.2按鍵掃描流程圖4.3源程序本設計采用C語言進行編寫,源程序見附錄B第5章電路制作與調試5.1電路的制作1、選擇合適的焊錫,應使用低熔點焊錫絲焊接電子元器件。2、助焊劑,用25%的松香溶解在75%的酒精(重量比)中作為助焊劑。3、電烙鐵使用前要上錫,具體方法是:將電烙鐵燒熱,待剛剛能熔化焊錫時,涂上助焊劑,再用焊錫均勻地涂在烙鐵頭上,使烙鐵頭均勻的吃上一層錫。4、焊接方法,把焊盤和元件的引腳用細砂紙打磨干凈,涂上助焊劑。用烙鐵頭沾取適量焊錫,接觸焊點,待焊點上的焊錫全部熔化并浸沒元件引線頭后,電烙鐵頭沿著元器件的引腳輕輕往上一提離開焊點。5、焊接時間不宜過長,否則容易燙壞元件,必要時可用鑷子夾住管腳幫助散熱。6、焊點應呈正弦波峰形狀,表面應光亮圓滑,無錫刺,錫量適中。7、焊接完成后,要用酒精把線路板上殘余的助焊劑清洗干凈,以防炭化后的助焊劑影響電路正常工作。8、集成電路應最后焊接,電烙鐵要可靠接地,或斷電后利用余熱焊接?;蛘呤褂眉呻娐穼S貌遄?,焊好插座后再把集成電路插上去。9、電烙鐵應放在烙鐵的架上REF_Ref4906\w\h[19]。在按照原理圖焊接好電路板后,應該先檢查電源、每個器件的連接是否正確;在確認連接無誤后,方能加電。最后實物圖如圖5.1所示圖5.1實物電路圖5.2電路調試本設計在硬件方面需要完成以下幾個部分的調試任務。首先,需要對單片機模塊進行調試,其次,對液晶顯示模塊進行調試,再次,對鍵盤輸入模塊進行調試,最后,對語音播報模塊進行調試。分別完成各個子模塊的調試任務后進行整體調試,檢驗系統功能是否可以實現。硬件調試過程中出現以下兩點問題:1.計算數據不夠大,計算量有局限性。2.焊接過程中出現短路和接錯引腳的現象,導致液晶顯示屏運行不正常,無法實現復位操作。一方面,單片機本身并不具備計算能力,因此計算的數據從鍵盤輸入后需要先存儲在數組中,當進行運算的時候再從中提取數據。另外,存儲數組的元素決定了數據可用的長度,因此,要想增大計算位數和精度,就要增大存儲數組的長度。另一方面,我們需要對所有硬件電路進行地毯式的檢測,確保電路都能夠接通,不短路、不斷路,并將各個控制接口與數據接口一一對應,保證實物焊接無誤。本系統使用KEIL軟件對源程序進行編寫與調試。首先新建一個工程,將源程序加入該工程并進行保存,然后設置參數,運行完源程序后根據錯誤提示進行修改,直到所有程序正確為止,完成后再進行邏輯功能調試。程序調試無誤后,通過下載線將程序導入芯片,下載成功即完成全部軟件調試REF_Ref5044\w\h[20]。開機后按鍵就會顯示時間“2021-05-01、15:34:56”,溫度“24.0”,星期“STA”(時間、溫度、星期均可隨時更新,圖為寫作時間),如圖5.2所示圖5.2溫度、時間圖當按鍵后輸入相應數字并計算算式,顯示器上將會顯示計算算式和計算結果“99-32=67”,如圖5.3所示圖5.3計算顯示圖輸入“*550”后顯示屏上就會顯示過程及結果,如圖5.4所示圖5.4結果圖5.3設計結果最終經過實操各個部分均能正常工作,達到預期目標功能及任務。結論本設計通過單片機模塊、顯示模塊、時鐘模塊、溫度模塊和鍵盤輸入模塊幾大主要部分,在傳統計算功能的基礎上實現了時間顯示、溫度測量和計算等功能。通過4x4矩陣鍵盤完成各類輸入及任務,通過顯示屏顯示時間、溫度以及計算過程和結果。系統的控制程序采用C語言編寫,軟件編寫完成之后,經過仿真和硬件測試,最終完成設計要求的電路。本設計雖然可以實現計算和顯示時間溫度的基本功能,但是也僅能進行基礎的四則遠算,對于進制轉換還是實現不了,為了改進可以添加一些元器件進行更進一步的數位轉換就可以更加豐富計算機的功能了。參考文獻王自貴.萊布尼茨邏輯思想研究[D].重慶:西南大學,2016.趙尹.萬年歷語音播報系統[J].電腦知識與技術,2019,15(06):237-241.李廣興.基于STC12C5A60S2單片機的帶時間和溫度顯示的多功能計算器設計[J].通訊世界,2015,12(20):211-235.周正,樸麗,陳明.基于單片機的LCD1602設計[J].信息與電腦(理論版),2011,8(05):235-237.王殿臣.基于單片機公共交通自動到站播報系統設計[D].天津職業技術師范大學,2018.張義和,王敏男,許宏昌等.例說51單片機[M].北京:人民郵電出版社,2008:24-36.何立民.單片機應用文集[M].第一版.北京:北京航空航天大學出版社,2004:47-65.師磊,紀松波.STC15系列單片機與LC0811型液晶屏軟硬件接口的設計[J].電子測試,2016,17(06):3-5.曾婷,萬星宇.ISD1700系列語音芯片原理與應用設計[J].價值工程,2011,30(23):144-145.郭占苗,吳沛.基于STC12C5A60S2單片機多功能計算器設計與仿真[J].微型電腦應用,2018,34(09):112-115.張一工.現代電力電子技術原理與應用[M].第一版.科學出版社,2002:82-114.張萌.單片機應用系統開發綜合實例[M].第二版.北京:清華大學出版社,2005:53-71.周麗娜.Protel99SE電路設計技術[M].北京:中國鐵道出版社,2009:57-64.王千.實用電子電路大全[M].電子工業出版社,2004,28-36彭為.單片機典型系統設計實例精講[M].電子工業出版社,2006,69-88朱勇.單片機原理與應用技術[M].清華大學出版社,2006,14-16戴佳,戴衛恒.51單片機C語言應用程序設計(實例精講)[M].電子工業出版社,

2008汪貴平,新編單片機原理及應用[M]北京:機械工業出版社,2009陳忠平,曹巧暖.單片機原理及接口第二版[M].清華大學出版社,2011謝自美.電子線路綜合設計[M].第三版.武漢:華中科技大學出版社,2006致謝時光荏苒,白駒過隙,大一軍訓時的點滴仿佛昨日光景,眨眼一瞬,我們便到了追逐大學時光尾巴的時刻,大學生活的每一段經歷都于我意義非凡,也使我受益匪淺,感受頗多,而這些都歸功于我可愛的同學們和可敬的老師們。四年的朝夕相處,使我們普通的同學情誼升華為朋友的真摯友情,我們彼此互幫互助,相互鼓勵,一起相處的日子變得美好而難忘。而系里的每一位老師更是恪盡職守、盡職盡責,無論是課堂還是課后,都以“知無不言,言無不盡”的職業道德嚴格要求自己,無私地授予我們專業知識,在培育學子的漫漫長路上奉獻著自己。在此,我要特別感謝我的導師,高老師耐心踏實,認真負責,修改論文時大到整體框架,小到標點符號,都會示以標注,正是由于她嚴謹的教學態度和不辭辛勞的付出,我的畢業設計才得以順利完成。最后,向所有在學業上和生活中幫助過我的老師和同學再一次報以最誠摯的感謝!謝謝大家!附錄A整個系統電路圖附錄B#include<reg52.h>#include<stdio.h>#include<string.h>#include<lcd1602.h>#include<stdlib.h>#defineuintunsignedint#defineucharunsignedcharsbitbatt=P3^5;floatnum1; //保存第一個數floatnum2; //保存第二個數ucharjjcc; //加減乘除標志變量ucharidataLcd_Str[17]; //顯示區緩存ucharidataNum_str[17]; ucharLcd_num2_add=0; //第二個數據開始位的增量ucharLcd_dis1_i=0; //記錄顯示第一行字符ucharLcd_num1_i=0; //記錄num1是幾位數ucharLcd_num2_i=0; //記錄num2是幾位數ucharDian_i=0; //小數點位數/******************************************函數名稱:delayms;函數功能:延時z毫秒;形參:z(延時時間參數) *******************************************/voiddelayms(ucharz){uintx,y;for(x=z;x>0;x--) for(y=110;y>0;y--);}ucharKey_io; //暫存IO值ucharKey_jl; //松手檢測自鎖變量ucharKey_value; //返回鍵值ucharKey_D_bit;ucharsaom(void){Key_value=18;P2=0xf0; //拉低第四位Key_io=P2;if(Key_io!=0xf0)//查看搞四位是否有低電平{ Key_io|=0x0f;//保持高四位出現低電平的管腳,拉高第四位 P2=Key_io;//重新復制IO口 Key_io=P2;//讀取IO信息,確定鍵值 if(Key_jl==0)//自鎖變量,松手檢測 { Key_jl=1; switch(Key_io) { case0x7e:Key_value=1; break; case0x7d:Key_value=2; break; case0x7b:Key_value=3; break; case0x77:Key_value=12; break; case0xbe:Key_value=4; break; case0xbd:Key_value=5; break; case0xbb:Key_value=6; break; case0xb7:Key_value=13; break; case0xde:Key_value=7; break; case0xdd:Key_value=8; break; case0xdb:Key_value=9; break; case0xd7:Key_value=14; break; case0xee:Key_value=10; break; case0xed:Key_value=0; break; case0xeb:Key_value=11; break; case0xe7:Key_value=15; break; } } }else{ Key_jl=0; }Key_io=P3; //獨立按鍵掃描Key_io&=0xc0;if(Key_io!=0xc0){if(Key_D_bit==0) { Key_D_bit=1; switch(Key_io) { case0x80:Key_value=16;break; case0x40:Key_value=17;break; } }}else{Key_D_bit=0;}returnKey_value;}ucharXS_JG(ucharadd,floatn){ucharlen,p=0;memset(Lcd_Str,0,16);sprintf(Lcd_Str,"%e",n);while(Lcd_Str[p]!='e'){p++;}if(Lcd_Str[p+2]==0x30&&Lcd_Str[p+3]<0x37){ sprintf(Lcd_Str,"%f",n); len=strlen(Lcd_Str); while(len) { if(Lcd_Str[len-1]=='.') { Lcd_Str[len-1]=0; break; } if(Lcd_Str[len-1]=='0')//去除數據中多余的0與小數點 { Lcd_Str[len-1]=0; } else { break; } len--; }}else{ while(p) { if(Lcd_Str[p-1]=='.') { Lcd_Str[p-1]=''; break; } if(Lcd_Str[p-1]=='0')//去除數據中多余的0與小數點 { Lcd_Str[p-1]=''; } else { break; } p--; }}Dis_str(add,"");Dis_str(add,Lcd_Str);returnlen;}voidfuhao(uchars){if(jjcc<5){ if(Num_str[0]!='A') { if(Num_str[0]<=0x39&&Num_str[0]>=0x30&&jjcc!=2) { num1=atof(Num_str); //從數組中取第二個數字 // XS_JG(0x8a,num1); } } if(jjcc==0) { Num_str[Lcd_dis1_i]=s;Lcd_dis1_i++; Lcd_num2_add=Lcd_dis1_i; } else { if(Num_str[Lcd_num2_add]==0) Num_str[Lcd_dis1_i-1]=s; } Dis_str(0x80,Num_str); }if(jjcc==5){ Lcd_dis1_i=4; Lcd_num2_i=0; Lcd_num2_add=4; memset(Num_str,0,16); Num_str[0]='A'; Num_str[1]='n'; Num_str[2]='s'; Num_str[3]=s; Dis_str(0x80,""); Dis_str(0x80,Num_str); }}voidmain(void){ucharnum_key1;init_1602();write_1602dat('0');memset(Num_str,0,16);while(1){ num_key1=saom(); //讀按鍵值 delayms(10); if(num_key1<18) //是否有按鍵按下,小于16時有按鍵按下 { batt=0;delayms(30);batt=1; switch(num_key1) { case11:if(Num_str[Lcd_num2_add]<=0x39&&Num_str[Lcd_num2_add]>=0x30) num2=atof(Num_str+Lcd_num2_add); //從數組中取第二個數字 else break; Lcd_num2_i=0; // XS_JG(0x8a,num2); switch(jjcc) { case1:num1+=num2; //加 break; case2:num1-=num2; //減 break; case3:num1*=num2; //乘 break; case4:num1/=num2; //除 break; } XS_JG(0xc0,num1); Dis_str(0x80+Lcd_dis1_i,"="); jjcc=5;//等號標志 break; case12:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('+'); jjcc=1;Dian_i=0; break; //按下加號鍵 case13:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('-'); jjcc=2;Dian_i=0; break; //按下減號鍵 case14:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('*'); jjcc=3;Dian_i=0; break; //按下乘號鍵 case15:if(Num_str[0]==0||Lcd_num2_i>0) break; fuhao('/'); jjcc=4;Dian_i=0; break; //按下除號鍵 case10:if(Dian_i==0&&(Lcd_num1_i!=0||Lcd_num2_i!=0))//輸入小數點時前面必須有數字 { Dian_i++; //小數點 Num_str[Lcd_dis1_i]='.' ; Lcd_dis1_i++; Dis_str(0x80,Num_str); } break; case16:jjcc=0; Dian_i=0; Lcd_dis1_i=0; Lcd_num1_i=0; Lcd_num2_i=0; Lcd_num2_add=0; memset(Num_str,0,16); Dis_str(0x80,"0");//清除顯示 Dis_str(0xc0,""); /****************

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論