版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于單片機(jī)的計(jì)算器設(shè)計(jì)Page1基于單片機(jī)的計(jì)算器設(shè)計(jì)基于單片機(jī)的計(jì)算器設(shè)計(jì)課題名稱:基于單片機(jī)的計(jì)算器設(shè)計(jì)姓名:學(xué)號(hào):班級(jí):專業(yè):院系:指導(dǎo)教師:年月日目錄第一章 緒論 11.1前言 1第二章方案設(shè)計(jì) 22.1功能要求 22.2方案論證 22.3單片機(jī)簡介 22.4HYPERLINK第三章系統(tǒng)硬件的設(shè)計(jì) 53.1系統(tǒng)總體方案設(shè)計(jì) 53.2矩陣鍵盤介紹 6HYPERLINK3.5獨(dú)立按鍵 12第四章系統(tǒng)軟件設(shè)計(jì) 144.1軟件系統(tǒng)介紹 144.2主程序介紹 144.3主流程圖 14結(jié)論 15致謝 16參考文獻(xiàn) 17HYPERLINK附錄一:原理圖、仿真圖 18附錄二:實(shí)物圖、上位機(jī)圖 21HYPERLINK附錄四:程序 22PagePage1摘要本設(shè)計(jì)以STC89C52RC單片機(jī)作為計(jì)算器的微處理器;采用4*4矩陣按鍵作為數(shù)據(jù)輸入,以LCD1602實(shí)現(xiàn)信息交互。矩陣按鍵的設(shè)計(jì):在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。采用低功耗的字符型液晶作為顯示器件,1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。顯示更為直觀。該系統(tǒng)基于可靠地硬件設(shè)計(jì)和穩(wěn)定的軟件算法實(shí)現(xiàn)題目的基本要求。關(guān)鍵詞:STC89C52RC;矩陣按鍵;LCD1602,液晶。AbstractThedesignofSTC89C52RCsinglechipcalculatorprocessorusing4*4matrixkeysasadatainput,LCD1602interaction.Designofmatrixkeys:whentherearenumberofkeysinthekeyboard,inordertoreducetheI/Oportuse,usuallybuttonsarrangedinamatrixform.Matrixkeyboard,eachintersectionofhorizontalandverticallinesnotdirectlyconnected,butakeytobeconnected.Inthisway,aport(suchastheP1)canconstitutea4*4=16key,thantheportlinesdirectlytothekeyboard1timemoreandmorelines,moreobviousdifference,addedaline,forexample,canconstitutea20-keykeyboard,anddirectlywiththeportlinescanonlybeextrakeys(9).Therefore,comparisonofnumberofkeysrequiredforquitesometime,makingthekeyboardmatrixmethodisreasonable.Lowpowerconsumption-charactercanbeusedasadisplaydevice,1602LCDalsocalled1602-character,itisaspecificallydesignedtodisplayletters,numbers,symbols,suchasthedot-matrixLCDmodules.Showmoreintuitive.Thesystemisbasedonreliablehardwaredesignandthebasicrequirementsofstablesoftwaretopics.Keywords:STC89C52RC;Matrixkeypad;LCD1602;LCD緒論1.1前言計(jì)算器是日常工作和學(xué)習(xí)生活中的常用工具,人們利用它代替了許多復(fù)雜計(jì)算,包括加減乘除和其他運(yùn)算。尤其是小型計(jì)算器,它攜帶方便,在生活中用起來方便快捷,成為了財(cái)政、學(xué)習(xí)、生意上都青睞的必需品。它的需求廣泛,在計(jì)算器的發(fā)展上存在很大的空間和市場意義。單片機(jī)在我國的各行各業(yè)得到了廣泛使用,單片機(jī)的出現(xiàn)是計(jì)算機(jī)制造技術(shù)高速發(fā)展的產(chǎn)物,它是嵌入式控制系統(tǒng)的核心。如今,它已經(jīng)廣泛應(yīng)用到我們生活中的各個(gè)領(lǐng)域,如:電子、科技、通信、汽車、工業(yè)等。一般只需幾塊錢,有著經(jīng)濟(jì)廉價(jià)的優(yōu)勢,用單片機(jī)可以很方便的實(shí)現(xiàn)計(jì)算器的設(shè)計(jì)。使用單片機(jī)來設(shè)計(jì)計(jì)算器有以下優(yōu)點(diǎn):(1)能明顯地降低控制器硬件成本。速度更快、功能更新的新一代微處理機(jī)不斷涌現(xiàn),硬件費(fèi)用會(huì)變得很便宜。體積小、重量輕、耗能少是它們的共同優(yōu)點(diǎn)。(2)可顯著改善控制的可靠性。集成電路和大規(guī)模集成電路的平均無故障時(shí)大大長于分立元件電子電路。(3)硬件電路易標(biāo)準(zhǔn)化。在電路集成過程中采用了一些屏蔽措施,可以避免電力電子電路中過大的瞬態(tài)電流、電壓引起的電磁干擾問題,因此可靠性比較高。(4)采用微處理機(jī)的數(shù)字控制,使信息的雙向傳遞能力大大增強(qiáng),容易和上位系統(tǒng)機(jī)聯(lián)接,可隨時(shí)改變控制參數(shù)。(5)可以設(shè)計(jì)適合于眾多電力電子系統(tǒng)的統(tǒng)一硬件電路,其中軟件可以模塊化設(shè)計(jì),拼裝構(gòu)成適用于各種應(yīng)用對(duì)象的控制算法;以滿足不同的用途。軟件模塊可以方便地增加、更改、刪減,或者當(dāng)實(shí)際系統(tǒng)變化時(shí)徹底更新。方案設(shè)計(jì)2.1功能要求能夠讀取矩陣按鍵的數(shù)據(jù)輸入,并對(duì)輸入數(shù)據(jù)進(jìn)行存儲(chǔ),通過單片機(jī)實(shí)現(xiàn)對(duì)儲(chǔ)存數(shù)據(jù)的數(shù)學(xué)運(yùn)算,并通過LCD1602液晶與用戶實(shí)現(xiàn)信息交互。軟件對(duì)數(shù)學(xué)運(yùn)算的支持包括負(fù)數(shù)、小數(shù)的計(jì)算,對(duì)不符合要求的輸入數(shù)據(jù),能通過LCD1602實(shí)現(xiàn)報(bào)錯(cuò)功能。2.2方案論證方案一:采用獨(dú)立按鍵實(shí)現(xiàn)數(shù)據(jù)輸入,軟件編寫簡便,但需要大量可用IO口,占用了大量資源。方案二:采用矩陣按鍵實(shí)現(xiàn)數(shù)據(jù)輸入,軟件編程稍復(fù)雜,但是16個(gè)按鍵僅僅只需要八個(gè)IO口,相比獨(dú)立按鍵,節(jié)約了一半的硬件資源。方案三:信息交互采用數(shù)碼管,數(shù)碼管由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,多用于顯示數(shù)字,筆畫等。方案四:信息交互采用LCD,它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。顯示更為直觀。以上4種方案都可以實(shí)現(xiàn)本次畢業(yè)設(shè)計(jì)的基本硬件需求。出于綜合考慮,我們采用方案二實(shí)現(xiàn)數(shù)據(jù)輸入,節(jié)約硬件IO資源,采用方案四實(shí)現(xiàn)信息交互,顯示更加直觀。2.3單片機(jī)簡介STC89C52RC是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有8K字節(jié)系統(tǒng)可編程Flash存儲(chǔ)器。使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。1.增強(qiáng)型8051單片機(jī),6時(shí)鐘/機(jī)器周期和12時(shí)鐘/機(jī)器周期可以任意選擇,指令代碼完全兼容傳統(tǒng)8051.[1]
2.工作電壓:5.5V~3.3V(5V單片機(jī))/3.8V~2.0V(3V單片機(jī))3.工作頻率范圍:0~40MHz,相當(dāng)于普通8051的0~80MHz,實(shí)際工作頻率可達(dá)48MHz4.用戶應(yīng)用程序空間為8K字節(jié)5.片上集成512字節(jié)RAM6.通用I/O口(32個(gè)),復(fù)位后為:P0/P1/P2/P3是準(zhǔn)雙向口/弱上拉,P0口是漏極開路輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為I/O口用時(shí),需加上拉電阻。7.ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程序,數(shù)秒即可完成一片8.具有EEPROM功能9.共3個(gè)16位定時(shí)器/計(jì)數(shù)器。即定時(shí)器T0、T1、T210.外部中斷4路,下降沿中斷或低電平觸發(fā)電路,PowerDown模式可由外部中斷低電平觸發(fā)中斷方式喚醒11.通用異步串行口(UART),還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè)UART12.工作溫度范圍:-40~+85℃(工業(yè)級(jí))/0~75℃(商業(yè)級(jí))13.PDIP封裝2.4管腳說明1電源:
①VCC-芯片電源,接+5V;
②VSS-接地端;
2.時(shí)鐘:
XTAL1、XTAL2-晶體振蕩電路反相輸入端和輸出端。
3.控制線:
控制線共有4根:
①RST(Reset)功能:復(fù)位信號(hào)輸入端。
②VPD功能:在Vcc掉電情況下,接備用電源。
EA/Vpp:內(nèi)外ROM選擇/片內(nèi)EPROM編程電源。
①EA功能:內(nèi)外ROM選擇端。
②Vpp功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,施加編程電源Vpp。
4.I/O口線:P0、P1、P2、P3共四個(gè)八位口。
P0口是三態(tài)雙向口,通稱數(shù)據(jù)總線口,因?yàn)橹挥性摽谀苤苯佑糜趯?duì)外部存儲(chǔ)器的讀/寫操作。P0口也用以輸出外部存儲(chǔ)器的低8位地圖1址。由于是分時(shí)輸出,故應(yīng)在外部加鎖存器將此地址數(shù)據(jù)鎖存,地址鎖存,信號(hào)用ALE。
P1口是專門供用戶使用的I/O口,是準(zhǔn)雙向口。
P2口是從系統(tǒng)擴(kuò)展時(shí)作高8位地址線用。不擴(kuò)展外部存儲(chǔ)器時(shí),P2口也可以作為用戶I/O口線使用,P2口也是準(zhǔn)雙向口。
P3口是雙功能口,該口的每一位均可獨(dú)立地定義為第一I/O功能或第二I/O功能。作為第一功能使用時(shí)操作同P1口。主要特性8K字節(jié)程序存儲(chǔ)空間;512字節(jié)數(shù)據(jù)存儲(chǔ)空間;內(nèi)帶4K字節(jié)EEPROM存儲(chǔ)空間;可直接使用串口下載;圖2-1單片機(jī)引腳圖系統(tǒng)硬件的設(shè)計(jì)3.1系統(tǒng)總體方案設(shè)計(jì)硬件設(shè)計(jì):由矩陣按鍵實(shí)現(xiàn)數(shù)據(jù)輸入、LCD1602實(shí)現(xiàn)信息交互,經(jīng)過C語言編程,使硬件實(shí)現(xiàn)簡單的計(jì)算器功能。本設(shè)計(jì)通過使用STC89C51單片機(jī)芯片來設(shè)計(jì)電路,編制程序,仿真,調(diào)試,完成整個(gè)系統(tǒng)的功能。整個(gè)控制系統(tǒng)主要包括三個(gè)模塊:矩陣按鍵模塊、LCD1602顯示模塊、串口調(diào)試模塊。圖3-1系統(tǒng)模塊組成圖3.2矩陣鍵盤介紹矩陣鍵盤是單片機(jī)外部設(shè)備中所使用的排布類似于矩陣的鍵盤組。矩陣鍵盤程序則實(shí)現(xiàn)了矩陣鍵盤的功能。矩陣鍵盤減少了I/O的占用,在需要的鍵數(shù)比較多時(shí),采用矩陣法是很合理的。結(jié)構(gòu)組成:在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。識(shí)別方法:矩陣式結(jié)構(gòu)的鍵盤顯然比獨(dú)立按鍵要復(fù)雜一些,識(shí)別也要復(fù)雜一些,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時(shí),所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。行掃描法:行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法,介紹過程如下。1、判斷鍵盤中有無鍵按下將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2、判斷閉合鍵所在的位置在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。軟件編程:第一步,使行線為編程的輸入線,列線是輸出線,拉低所有的列線,判斷行線的變化,如果有按鍵按下,按鍵按下的對(duì)應(yīng)行線被拉低,否則所有的行線都為高電平。第二步,在第一步判斷有鍵按下后,延時(shí)10ms消除機(jī)械抖動(dòng),再次讀取行值,如果此行線還處于低電平狀態(tài)則進(jìn)入下一步,否則返回第一步重新判斷。第三步,開始掃描按鍵位置,采用逐行掃描,每間隔1ms的時(shí)間,分別拉低第一列,第二列,第三列,第四列,無論拉低哪一列其他三列都為高電平,讀取行值找到按鍵的位置,分別把行值和列值儲(chǔ)存在寄存器里。第四步,從寄存器中找到行值和列值并把其合并,得到按鍵值,對(duì)此按鍵值進(jìn)行編碼,按照從第一行第一個(gè)一直到第四行第四個(gè)逐行進(jìn)行編碼,編碼值從“0000”至“1111”,再進(jìn)行譯碼,最后顯示按鍵號(hào)碼。圖3-2矩陣按鍵電路圖HYPERLINK3.3串口調(diào)試串行接口是一種可以將接受來自CPU的并行數(shù)據(jù)字符轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù)流發(fā)送出去,同時(shí)可將接受的串行數(shù)據(jù)流轉(zhuǎn)換為并行的數(shù)據(jù)字符供給CPU的器件。一般完成這種功能的電路,我們稱為串行接口電路。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。串口通信(SerialCommunications)的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。串口通信是指外設(shè)和計(jì)算機(jī)間,通過數(shù)據(jù)信號(hào)線、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。通信原理:串口通信(SerialCommunications)的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時(shí)用另一根線接收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。比如IEEE488定義并行通行狀態(tài)時(shí),規(guī)定設(shè)備線總長不得超過20米,并且任意兩個(gè)設(shè)備間的長度不得超過2米;而對(duì)于串口而言,長度可達(dá)1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成,分別是地線、發(fā)送、接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時(shí)在另一根線上接收數(shù)據(jù)。其他線用于握手,但不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對(duì)于兩個(gè)進(jìn)行通信的端口,這些參數(shù)必須匹配。a,波特率:這是一個(gè)衡量符號(hào)傳輸速率的參數(shù)。指的是信號(hào)被調(diào)制以后在單位時(shí)間內(nèi)的變化,即單位時(shí)間內(nèi)載波參數(shù)變化的次數(shù),如每秒鐘傳送240個(gè)字符,而每個(gè)字符格式包含10位(1個(gè)起始位,1個(gè)停止位,8個(gè)數(shù)據(jù)位),這時(shí)的波特率為240Bd,比特率為10位*240個(gè)/秒=2400bps。一般調(diào)制速率大于波特率,比如曼徹斯特編碼)。通常電話線的波特率為14400,28800和36600。波特率可以遠(yuǎn)遠(yuǎn)大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB設(shè)備的通信。b,數(shù)據(jù)位:這是衡量通信中實(shí)際數(shù)據(jù)位的參數(shù)。當(dāng)計(jì)算機(jī)發(fā)送一個(gè)信息包,實(shí)際的數(shù)據(jù)往往不會(huì)是8位的,標(biāo)準(zhǔn)的值是6、7和8位。如何設(shè)置取決于你想傳送的信息。比如,標(biāo)準(zhǔn)的ASCII碼是0~127(7位)。擴(kuò)展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡單的文本(標(biāo)準(zhǔn)ASCII碼),那么每個(gè)數(shù)據(jù)包使用7位數(shù)據(jù)。每個(gè)包是指一個(gè)字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗(yàn)位。由于實(shí)際數(shù)據(jù)位取決于通信協(xié)議的選取,術(shù)語“包”指任何通信的情況。c,停止位:用于表示單個(gè)包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺(tái)設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì)。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時(shí)也越慢。d,奇偶校驗(yàn)位:在串口通信中一種簡單的檢錯(cuò)方式。有四種檢錯(cuò)方式:偶、奇、高和低。當(dāng)然沒有校驗(yàn)位也是可以的。對(duì)于偶和奇校驗(yàn)的情況,串口會(huì)設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用一個(gè)值確保傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對(duì)于偶校驗(yàn),校驗(yàn)位為0,保證邏輯高的位數(shù)是偶數(shù)個(gè)。如果是奇校驗(yàn),校驗(yàn)位為1,這樣就有3個(gè)邏輯高位。高位和低位不真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗(yàn)。這樣使得接收設(shè)備能夠知道一個(gè)位的狀態(tài),有機(jī)會(huì)判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。通訊結(jié)構(gòu):串口通信是指外設(shè)和計(jì)算機(jī)間,通過數(shù)據(jù)信號(hào)線、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)?。串口是?jì)算機(jī)上一種非常通用的設(shè)備通信協(xié)議。大多數(shù)計(jì)算機(jī)(不包括筆記本電腦)包含兩個(gè)基于RS-232的串口。串口同時(shí)也是儀器儀表設(shè)備通用的通信協(xié)議;很多GPIB兼容的設(shè)備也帶有RS-232口。同時(shí),串口通信協(xié)議也可以用于獲取遠(yuǎn)程采集設(shè)備的數(shù)據(jù)。RS-232(ANSI/EIA-232標(biāo)準(zhǔn))是IBM-PC及其兼容機(jī)上的串行連接標(biāo)準(zhǔn)。可用于許多用途,比如連接鼠標(biāo)、打印機(jī)或者M(jìn)odem,同時(shí)也可以接工業(yè)儀器儀表。用于驅(qū)動(dòng)和連線的改進(jìn),實(shí)際應(yīng)用中RS-232的傳輸長度或者速度常常超過標(biāo)準(zhǔn)的值。RS-232只限于PC串口和設(shè)備間點(diǎn)對(duì)點(diǎn)的通信。RS-232串口通信最遠(yuǎn)距離是50英尺。圖3-3串口調(diào)試電路圖3.4液晶顯示模塊LCD1602A是一種工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。在日常生活中,我們對(duì)液晶顯示器并不陌生。液晶顯示模塊已作為很多電子產(chǎn)品的通過器件,如在計(jì)算器、萬用表、電子表及很多家用電子產(chǎn)品中都可以看到,顯示的主要是數(shù)字、專用符號(hào)和圖形。在單片機(jī)的人機(jī)交流界面中,一般的輸出方式有以下幾種:發(fā)光管、LED數(shù)碼管、液晶顯示器。發(fā)光管和LED數(shù)碼管比較常用,軟硬件都比較簡單。在單片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):由于液晶顯示器每一個(gè)點(diǎn)在收到信號(hào)后就一直保持那種色彩和亮度,恒定發(fā)光,而不像陰極射線管顯示器(CRT)那樣需要不斷刷新新亮點(diǎn)。因此,液晶顯示器畫質(zhì)高且不會(huì)閃爍。液晶顯示器都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡單可靠,操作更加方便。液晶顯示器通過顯示屏上的電極控制液晶分子狀態(tài)來達(dá)到顯示的目的,在重量上比相同顯示面積的傳統(tǒng)顯示器要輕得多。相對(duì)而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而耗電量比其它顯示器要少得多。(1)引腳說明:第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。(2)1602LCD的RAM地址映射以及標(biāo)準(zhǔn)字庫表LCD1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符圖有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母。它的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的(說明:1為高電平,0為低電平)。指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。指令3:光標(biāo)和顯示模式設(shè)置I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移。S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示。C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo)。B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標(biāo)或顯示移位S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。指令6:功能設(shè)置命令DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線。N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示。F:低電平時(shí)顯示5X7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符(有些模塊是DL:高電平時(shí)為8位總線,低電平時(shí)為4位總線)。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀出忙信號(hào)和光標(biāo)地址。BF為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙,模塊就能接收相應(yīng)的命令或者數(shù)據(jù)。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。本設(shè)計(jì)的灰度調(diào)節(jié)是采用10k電阻和1.5k電阻分壓的形式,灰度適中。液晶顯示電路如下圖3-4液晶顯示電路3.5獨(dú)立按鍵單片機(jī)鍵盤有獨(dú)立鍵盤和矩陣式鍵盤兩種:獨(dú)立鍵盤每一個(gè)I/O口上只接一個(gè)按鍵,按鍵的另一端接電源或接地(一般接地),這種接法程序比較簡單且系統(tǒng)更加穩(wěn)定;而矩陣式鍵盤式接法程序比較復(fù)雜,但是占用的I/O少。根據(jù)本設(shè)計(jì)的需要這里選用了獨(dú)立式鍵盤接法。獨(dú)立式鍵盤的實(shí)現(xiàn)方法是利用單片機(jī)I/O口讀取口的電平高低來判斷是否有鍵按下。將常開按鍵的一端接地,另一端接一個(gè)I/O口,程序開始時(shí)將此I/O口置于高電平,平時(shí)無鍵按下時(shí)I/O口保護(hù)高電平。當(dāng)有鍵按下時(shí),此I/O口與地短路迫使I/O口為低電平。按鍵釋放后,單片機(jī)內(nèi)部的上拉電阻使I/O口仍然保持高電平。我們所要做的就是在程序中查尋此I/O口的電平狀態(tài)就可以了解我們是否有按鍵動(dòng)作了。在用單片機(jī)對(duì)鍵盤處理的時(shí)候涉及到了一個(gè)重要的過程,那就是鍵盤的去抖動(dòng)。這里說的抖動(dòng)是機(jī)械的抖動(dòng),是當(dāng)鍵盤在未按到按下的臨界區(qū)產(chǎn)生的電平不穩(wěn)定正常現(xiàn)象,并不是我們在按鍵時(shí)通過注意可以避免的。這種抖動(dòng)一般10~200毫秒之間,這種不穩(wěn)定電平的抖動(dòng)時(shí)間對(duì)于人來說太快了,而對(duì)于時(shí)鐘是微秒的單片機(jī)而言則是慢長的。硬件去抖動(dòng)就是用部分電路對(duì)抖動(dòng)部分加之處理,軟件去抖動(dòng)不是去掉抖動(dòng),而是避抖動(dòng)部分的時(shí)間,等鍵盤穩(wěn)定了再對(duì)其處理。所以這里選擇了軟件去抖動(dòng),實(shí)現(xiàn)法是先查尋按鍵當(dāng)有低電平出現(xiàn)時(shí)立即延時(shí)10~200毫秒以避開抖動(dòng)(經(jīng)典值為20毫秒),延時(shí)結(jié)束后再讀一次I/O口的值,這一次的值如果為1表示低電平的時(shí)間不到10~200毫秒,視為干擾信號(hào)。當(dāng)讀出的值是0時(shí)則表示有按鍵按下,調(diào)用相應(yīng)的處理程序。硬件電路如圖所示:圖3-5按鍵控制電路系統(tǒng)軟件設(shè)計(jì)4.1軟件系統(tǒng)介紹軟件的編程設(shè)計(jì)是單片機(jī)系統(tǒng)設(shè)計(jì)的核心部分,也是能否實(shí)現(xiàn)預(yù)定功能的關(guān)鍵。單片機(jī)編程常用的語言是C語言和匯編語言,最終都要轉(zhuǎn)為IntelHEX格式或二進(jìn)制格式(Binary)文件拷入單片機(jī)芯片內(nèi)。這里我們使用的是C語言進(jìn)行編程設(shè)計(jì)。4.2主程序介紹主程序如圖4-1所示,本程序運(yùn)行于Rtx51Tny實(shí)時(shí)系統(tǒng)上,它是一種實(shí)時(shí)操作系統(tǒng)(RTOS),可以用它來建立多個(gè)任務(wù)(函數(shù))同時(shí)執(zhí)行的應(yīng)用。初始化函數(shù)包括IO初始化、LCD1602液晶顯示模塊初始化。完成初始化任務(wù),程序執(zhí)行線程1,并刪除線程0任務(wù),線程1為設(shè)計(jì)者基本信息,執(zhí)行一次,啟動(dòng)線程2,刪除本線程,線程2計(jì)算器的基本功能。除此外,本程序?qū)?yīng)多個(gè)驅(qū)動(dòng)程序作為子程序。4.3主流程圖圖4-1程序流程圖結(jié)論經(jīng)過一段時(shí)間的努力,在黃亞輝老師和同學(xué)們的幫助及指導(dǎo)下基本完成了本次設(shè)計(jì)的工作。在本次畢業(yè)設(shè)計(jì)中,我通過基于單片機(jī)的設(shè)計(jì)和應(yīng)用,對(duì)于單片機(jī)工作原理,功能有了宏觀的了解,并對(duì)單片機(jī)C語言程序的應(yīng)用有了更進(jìn)一步的認(rèn)識(shí)。在利用單片機(jī)設(shè)計(jì)簡易LCD液晶顯示屏的整個(gè)設(shè)計(jì)過程中,從電路的設(shè)計(jì),元器件的選用,電路的調(diào)試,我都能獨(dú)立的設(shè)計(jì)與制作,這讓我對(duì)于理論和實(shí)際相結(jié)合有了新的認(rèn)識(shí)。本次課題的任務(wù)是使用STC89C52RC單片機(jī)實(shí)現(xiàn)一個(gè)簡單的計(jì)算器設(shè)計(jì),根據(jù)實(shí)際情況,從系統(tǒng)的穩(wěn)定性,方案實(shí)施的難易度等多方面考慮,硬件設(shè)計(jì)中我采用了STC89C52RC單片機(jī)來作為控制的核心,用矩陣按鍵作為數(shù)據(jù)輸入、LCD1602用于信息交互,具有電路簡單,成本低,實(shí)用性高等特點(diǎn);軟件設(shè)計(jì)上,以Rtx51Tny實(shí)時(shí)系統(tǒng)為平臺(tái),多個(gè)驅(qū)動(dòng)程序作為子程序,代碼簡介明了,便于調(diào)試修改,運(yùn)行穩(wěn)定。除此外,通過C#程序語言設(shè)計(jì)了一個(gè)針對(duì)于本課題的上位機(jī)程序,實(shí)現(xiàn)多種程序語言之間的相互交流,同時(shí)也極大地提升了自我的技術(shù)能力。完成這次畢業(yè)設(shè)計(jì)后,我發(fā)現(xiàn)對(duì)單片機(jī)原理有了更新的認(rèn)識(shí),懂得了這些器件在實(shí)際生產(chǎn)中的最基礎(chǔ)的應(yīng)用,掌握計(jì)算機(jī)的一些畫圖軟件的應(yīng)用。致謝經(jīng)過一段時(shí)間的努力,在黃亞輝老師和同學(xué)們的幫助及指導(dǎo)下基本完成了本次設(shè)計(jì)的工作。本課題在選題及研究過程中得到黃亞輝老師的悉心指導(dǎo)。黃亞輝多次詢問研究進(jìn)程,并為我指點(diǎn)迷津,幫助我開拓研究思路,精心點(diǎn)撥、熱忱鼓勵(lì)。黃亞輝老師一絲不茍的作風(fēng),嚴(yán)謹(jǐn)求實(shí)的態(tài)度,踏踏實(shí)實(shí)的精神,不僅授我以文,而且教我做人,雖歷時(shí)三載,卻給以終生受益無窮之道。對(duì)黃亞輝的感激之情是無法用言語表達(dá)的。在此,我還要感謝為我提供幫助的同學(xué)們,正是由于你們的幫助和支持,我才能克服一個(gè)一個(gè)的困難和疑惑,直至本文的順利完成.參考文獻(xiàn)[1]查兵,崔浩.單片機(jī)原理[J].中國高新技術(shù),2011年1期[2]金仁貴.單片機(jī)應(yīng)用系統(tǒng)的開發(fā)方法[J].電腦知識(shí)與技術(shù):學(xué)術(shù)交流,2006年12期[3]嚴(yán)懷龍.基于單片機(jī)的數(shù)據(jù)采集系統(tǒng)[J].廣西輕工業(yè),2006年6期[4]楊美仙.單片機(jī)的發(fā)展及其應(yīng)用[J].科技信息(學(xué)術(shù)研究),2007[5]張志利.基于RS232協(xié)議的單片機(jī)多機(jī)通信網(wǎng)絡(luò)研究[J].自動(dòng)化技術(shù)與應(yīng)用,2009附錄附錄一:原理圖、仿真圖圖1Altiumdesigner設(shè)計(jì)的電路原理圖圖2PROTUES仿真運(yùn)行圖附錄二:實(shí)物圖、上位機(jī)圖圖3實(shí)物圖圖4基于單片機(jī)的計(jì)算器設(shè)計(jì)上位機(jī)附錄三:運(yùn)行效果圖圖5運(yùn)行效果圖附錄四:程序Main.c#include<lcd1602.h>//LCD1602顯示模塊驅(qū)動(dòng)程序#include<Key_Switch.h>//按鍵掃描處理函數(shù)#include<rtx51tny.h> //rtx51tny實(shí)時(shí)系統(tǒng)驅(qū)動(dòng)文件voidmain_task(void)_task_0//進(jìn)程0{IO_Init();//初始化IO口LCD_init();//初始化LCD1602os_create_task(1);//啟動(dòng)線程1LCD_DISPLAY_taskos_wait(K_TMO,2,0);//延時(shí)20毫秒os_delete_task(0);//刪除本線程}voidLCD_DISPLAY_task(void)_task_1//進(jìn)程1{ucharTemp;for(;Temp<1;Temp++)LCD_My();LCD_write_command(0x01);//顯示我的學(xué)號(hào)os_wait(K_TMO,2,0);//延時(shí)20毫秒os_create_task(2);//啟動(dòng)線程2Key_Switch_taskos_delete_task(1);//刪除本線程}voidKey_Switch_task(void)_task_2//進(jìn)程2{while(1){Key_Switch_Num();//進(jìn)入矩陣按鍵掃描}}lcd1602.c#include<lcd1602.h>ucharLCD_addr=0;/**********************************************函數(shù)名:LCD_init功能:LCD1602的初始化************************************************/voidLCD_init(void){LCD_RW=0;LCD_write_command(0x38);//設(shè)置1602的顯示光標(biāo)功能Delay_xMs(1);LCD_write_command(0x0e);//顯示開及光標(biāo)設(shè)置Delay_xMs(1);LCD_write_command(0x06);//顯示光標(biāo)移動(dòng)設(shè)置Delay_xMs(1);LCD_write_command(0x01);//顯示清屏Delay_xMs(1);}/**********************************************函數(shù)名:LCD_write_command行參:command要定入的指令功能:向LCD1602的寫1個(gè)指令************************************************/voidLCD_write_command(ucharcommand){LCD_RS=0;//選擇寫指令LCD_EN=0;//使能初使化LCD_DB=command;//發(fā)送指令LCD_EN=1;//開使能Delay_xMs(1);//延時(shí)LCD_EN=0;//關(guān)使能}/**********************************************函數(shù)名:LCD_write_data行參:dat要寫入的數(shù)據(jù)功能:向LCD1602的寫1個(gè)數(shù)據(jù)************************************************/voidLCD_write_data(uchardate){LCD_RS=1;//選擇寫數(shù)據(jù)LCD_EN=0;//使能初使化LCD_DB=date;//發(fā)送指令LCD_EN=1;//開使能Delay_xMs(1);//延時(shí)LCD_EN=0;//關(guān)使能}/**********************************************函數(shù)名:LCD_write_data行參:功能:顯示我的學(xué)號(hào)************************************************/voidLCD_My(void){ucharcodettt[]="XieChenJun";//13ucharcodekkk[]="201415030115";//12uinti=0;LCD_write_command(0x80);//0x80第一行從頂頭開始顯示,加n,后移n位顯示for(i=0;i<12;i++){LCD_write_data(ttt[i]);Delay_xMs(50);}Delay_xMs(20);LCD_write_command(0x80+64);//0x80+64,第二行從頂頭開始顯示,加64再加n,第二行從n開始顯示。for(i=0;i<12;i++){LCD_write_data(kkk[i]);Delay_xMs(50);}LCD_write_data(0x80);Delay_xMs(20);}Switch.c#include<Key_Switch.h>uintNum_flag=0,Math_flag=0,SUM_flag=0;doubleSUM,Vualt1,Vualt2;voidKey_Switch_Num(void){ucharKey_Num;doubleVualt_buff;uchari;ucharcodelimit[]="DateLimit";//13charsx[20];if(P1!=0xf0){Delay_xMs(1);if(P1!=0xf0){if(SUM_flag==1){LCD_write_command(0x01);Delay_xMs(10);SUM_flag=0;}P1=0xfe;switch(P1)//檢測第一行按鍵狀態(tài){case0xee:Key_Num='/';break;case0xde:Key_Num='=';break;case0xbe:Key_Num='0';Vualt_buff=0;break;default:P1=0xf0;break;}P1=0xfd;switch(P1)//檢測第二行按鍵狀態(tài){case0xed:Key_Num='*';break;case0xdd:Key_Num='3';Vualt_buff=3;break;case0xbd:Key_Num='2';Vualt_buff=2;break;case0x7d:Key_Num='1';Vualt_buff=1;break;default:P1=0xf0;break;}P1=0xfb;switch(P1)//檢測第三行按鍵狀態(tài){case0xeb:Key_Num='-';break;case0xdb:Key_Num='6';Vualt_buff=6;break;case0xbb:Key_Num='5';Vualt_buff=5;break;case0x7b:Key_Num='4';Vualt_buff=4;break;default:P1=0xf0;break;}P1=0xf7;switch(P1)//檢測第四行按鍵狀態(tài){case0xe7:Key_Num='+';break;case0xd7:Key_Num='9';Vualt_buff=9;break;case0xb7:Key_Num='8';Vualt_buff=8;break;case0x77:Key_Num='7';Vualt_buff=7;break;default:P1=0xf0;break;}}}elseif(Clear_Key==0)Key_Num='C';//清除所有信息elseif(Beep_Key==0)Key_Num='B';//使用蜂鳴器elseif(ClearoBit_Key==0)Key_Num='S';//重新輸入一位數(shù)據(jù)elseP1=0xf0;if(Key_Num=='0'||Key_Num=='1'||Key_Num=='2'||Key_Num=='3'||Key_Num=='4'||Key_Num=='5'||Key_Num=='6'||Key_Num=='7'||Key_Num=='8'||Key_Num=='9')//獲取計(jì)算的數(shù)值{if(Num_flag==0)Vualt1=Vualt1*10+Vualt_buff;elseif(Num_flag==1)Vualt2=Vualt2*10+Vualt_buff;//將數(shù)據(jù)整合計(jì)算LCD_write_command(0x80+LCD_addr);LCD_write_data(Key_Num);//顯示輸入值LCD_addr++;//地址移位if(LCD_addr>=16){LCD_addr=0;LCD_write_command(0x01);Delay_xMs(10);//對(duì)地址量限幅}}elseif(Key_Num=='+'||Key_Num=='-'||Key_Num=='*'||Key_Num=='/'){//獲取計(jì)算形式if(Math_flag==0){LCD_write_command(0x80+LCD_addr);LCD_write_data(Key_Num);LCD_addr++;//地址移位Num_flag=1;//表示已產(chǎn)生一次計(jì)算形式switch(Key_Num){case'+':Math_flag=1;break;case'-':Math_flag=2;break;case'*':Math_flag=3;break;case'/':Math_flag=4;b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019年6月高考真題江蘇卷英語試卷
- 2024年滁州市南譙區(qū)第五人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2024年湘潭市婦幼保健院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2024年07月浙江浙江民泰商業(yè)銀行社會(huì)招考(722)筆試歷年參考題庫附帶答案詳解
- 2024年淳安縣第一人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2024年淮南礦業(yè)集團(tuán)有限公司第一礦工醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2024年07月浙江中國郵政儲(chǔ)蓄銀行浙江省分行校園招考筆試歷年參考題庫附帶答案詳解
- 2024年??谑行阌^(qū)秀英社區(qū)衛(wèi)生服務(wù)站高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 七年級(jí)人教版上冊第三單元 第一課 家住平原說課稿
- 2023年廣西職業(yè)院校技能大賽中職組《分布式智能設(shè)備組網(wǎng)技術(shù)》賽項(xiàng)樣題
- 國家開放大學(xué)本科《西方行政學(xué)說》期末紙質(zhì)考試總題庫珍藏版
- 2024至2030年中國甲醇內(nèi)燃機(jī)行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃報(bào)告
- 海南省瓊海市五年級(jí)數(shù)學(xué)期末自測模擬試題詳細(xì)答案和解析
- 垃圾清運(yùn)服務(wù)投標(biāo)方案技術(shù)方案
- 電子工程師職位合同
- 2025屆青海省西寧二十一中學(xué)七年級(jí)數(shù)學(xué)第一學(xué)期期末考試試題含解析
- 湖北省宜昌市2025屆九年級(jí)物理第一學(xué)期期末達(dá)標(biāo)測試試題含解析
- 宜賓市翠屏區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末生物試題【帶答案】
- DL-T5394-2021電力工程地下金屬構(gòu)筑物防腐技術(shù)導(dǎo)則
- 八年級(jí)下冊語文教材分析
評(píng)論
0/150
提交評(píng)論