電子設(shè)計(jì)-基于STC89C52RC單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì)_第1頁(yè)
電子設(shè)計(jì)-基于STC89C52RC單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì)_第2頁(yè)
電子設(shè)計(jì)-基于STC89C52RC單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì)_第3頁(yè)
電子設(shè)計(jì)-基于STC89C52RC單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì)_第4頁(yè)
電子設(shè)計(jì)-基于STC89C52RC單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

.電子設(shè)計(jì)實(shí)驗(yàn)名稱:基于STC89C52RC單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì) 姓 名: _學(xué) 號(hào):指導(dǎo)老師: 目錄一、可行性研究.3二、設(shè)計(jì)方案簡(jiǎn)述.4 2.1、功能介紹.4基本功能.4擴(kuò)展功能.4 2.2、總體設(shè)計(jì)方案.5總體設(shè)計(jì)思路.5方案論證與比較.6系統(tǒng)組成.7三、詳細(xì)設(shè)計(jì).12 1.各個(gè)模塊設(shè)計(jì).12 輸入模塊:鍵盤(pán)掃描.13 運(yùn)算模塊:?jiǎn)纹瑱C(jī)控制.14 顯示模塊:LCD1602顯示.15 2.硬件電路設(shè)計(jì).16 硬件連接.16 3.元件的介紹17 STC89C52單片機(jī)組成.17 復(fù)位和復(fù)位電路.18 LCD1602顯示器.19 4.PCB設(shè)計(jì)以及結(jié)果顯示.225、 總結(jié)24附錄主要程序代碼.25一、設(shè)可行性分析:1.2.1 經(jīng)濟(jì)可行性由于只是實(shí)驗(yàn)性質(zhì)的編程,所以在設(shè)計(jì)和開(kāi)發(fā)都不需要過(guò)多的經(jīng)費(fèi),但是系統(tǒng)投入運(yùn)行以后,硬件維護(hù)和損耗所造成的耗費(fèi)是必須的,但是數(shù)目也不會(huì)很大。所以經(jīng)過(guò)初步分析,經(jīng)濟(jì)上基本上是可行的1.2.2技術(shù)可行性在技術(shù)方面,因?yàn)槎紝W(xué)習(xí)了C語(yǔ)言,硬件課程設(shè)計(jì)等課程,對(duì)于開(kāi)發(fā)語(yǔ)言c語(yǔ)言也有一定的掌控能力,應(yīng)該能夠完成相應(yīng)的任務(wù)。1.2.3 運(yùn)行可行性該成果簡(jiǎn)單易操作,非常容易使用。1.2.4 法律可行性由于我們需要完成的功能相對(duì)簡(jiǎn)單,沒(méi)有太多涉及到很專業(yè)方面的內(nèi)容,更沒(méi)有計(jì)劃將系統(tǒng)利用到商業(yè)用途,所以不存在侵權(quán)或者版權(quán)糾紛方面的問(wèn)題。1.2.5結(jié)論該系統(tǒng)的軟硬件都比較容易理解和實(shí)現(xiàn),所以,具有實(shí)現(xiàn)一計(jì)算器的可行性。二、設(shè)計(jì)方案簡(jiǎn)述2.1功能概述系統(tǒng)基本功能:(1)由于設(shè)計(jì)的計(jì)算器要進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,經(jīng)綜合分析后,最后采用LCD 顯示數(shù)據(jù)和結(jié)果。(2)采用鍵盤(pán)輸入方式,鍵盤(pán)包括數(shù)字鍵(09)、符號(hào)鍵(+、-、)、清除鍵(onc)和等號(hào)鍵(=),故只需要16 個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算鍵盤(pán)。(3)在執(zhí)行過(guò)程中,開(kāi)機(jī)顯示零,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過(guò)LCD顯示出來(lái),當(dāng)鍵入+、-、*、/運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號(hào)就會(huì)在LCD上輸出運(yùn)算結(jié)果。(4)錯(cuò)誤提示:當(dāng)計(jì)算器執(zhí)行過(guò)程中有錯(cuò)誤時(shí),會(huì)在LCD上顯示相應(yīng)的提示,如:當(dāng)輸入的數(shù)值或計(jì)算得到的結(jié)果大于計(jì)算器的表示范圍時(shí),計(jì)算器會(huì)在LCD上提示overflow;當(dāng)除數(shù)為0時(shí),計(jì)算器會(huì)在LCD上提示error。擴(kuò)展功能:加上括號(hào)的混合運(yùn)算2.2總體設(shè)計(jì)思路本設(shè)計(jì)主要采用以下基本模塊來(lái)實(shí)現(xiàn):控制器模塊,輸入模塊,輸出模塊和電源模塊。通過(guò)對(duì)控制器進(jìn)行編程。使其對(duì)輸入模塊的信號(hào)進(jìn)行處理計(jì)算,然后通過(guò)輸出模塊反饋給使用者以計(jì)算結(jié)果。STC89C52單片機(jī)4*4鍵盤(pán)LCD顯示 晶振電路復(fù)位電路線路原理框圖方案論證與比較控制部分的設(shè)計(jì)方案論證與選擇根據(jù)設(shè)計(jì)要求,控制器主要用于紅外信號(hào)的接收和辨認(rèn)、控制步進(jìn)電機(jī)的動(dòng)作,控制顯示步進(jìn)電機(jī)的轉(zhuǎn)速等。對(duì)于控制器的選擇有以下三種方案。方案一:采用計(jì)算器專用芯片實(shí)現(xiàn)。用計(jì)算器專用芯片進(jìn)行設(shè)計(jì)并編程實(shí)現(xiàn)。這種設(shè)計(jì)方案計(jì)算效率高、速度快、而且成本也相對(duì)較低,是廠家做計(jì)算器的最佳方案。但是本人對(duì)計(jì)算器專用芯片掌握的不夠,還不足以實(shí)現(xiàn)設(shè)計(jì)計(jì)算器,所以這個(gè)方案不可去。 方案二:采用FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)作為系統(tǒng)的控制器。FPGA將所有器件集成到一塊芯片上,體積小,節(jié)省空間,提高了穩(wěn)定性;直接面向用戶,具有極大的靈活性和通用性,使用方便,硬件測(cè)試和實(shí)現(xiàn)快捷,開(kāi)發(fā)效率高,工作可靠性好??梢詫?shí)現(xiàn)各種復(fù)雜的邏輯功能,規(guī)模大,密度高,采用并行的輸入輸出方式,系統(tǒng)處理速度高,適合作為大規(guī)模實(shí)時(shí)系統(tǒng)的控制核心。由FPGA內(nèi)部編程實(shí)現(xiàn)計(jì)算器功能,本設(shè)計(jì)對(duì)數(shù)據(jù)處理速度的要求不是很高,F(xiàn)PGA的高速處理的優(yōu)勢(shì)得不到充分的體現(xiàn),由于其集成度高,使其成本偏高,同時(shí)由于芯片的引腳較多,實(shí)物電路板布線復(fù)雜,加重了電路設(shè)計(jì)和實(shí)際焊接的工作。并且FPGA的價(jià)格相對(duì)較高,性價(jià)比太低。 方案三、用單片機(jī)實(shí)現(xiàn)。由于單片機(jī)集成了運(yùn)算器電路、控制電路、存儲(chǔ)器、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器以及輸入/輸出口電路等,所以用單片機(jī)設(shè)計(jì)控制電路省去了很多分立元器件。由于單片機(jī)是可編程芯片,并且它可以運(yùn)用C語(yǔ)言編寫(xiě),對(duì)于一些復(fù)雜的計(jì)算功能,可以調(diào)用C語(yǔ)言庫(kù)函數(shù)。使編寫(xiě)程序變得非常簡(jiǎn)單。所以該課題用單片機(jī)實(shí)現(xiàn),不僅功能易于實(shí)現(xiàn),而且精確度高,穩(wěn)定性好,抗干擾能力強(qiáng)。并且由于其成本低、體積小、技術(shù)成熟和功耗小等優(yōu)點(diǎn),且技術(shù)比較成熟。性價(jià)比也相當(dāng)高。更重要的是本人經(jīng)過(guò)幾年的學(xué)習(xí),對(duì)單片機(jī)已有深刻的理解,并且可以靈活運(yùn)用。綜上所述,并通過(guò)各個(gè)方面綜合比較為達(dá)到最佳效果。我們采用方案三利用單片機(jī)控制器。顯示電路的設(shè)計(jì)方案論證與選擇方案一:數(shù)碼管顯示方案。數(shù)碼管顯示使用兩個(gè)四位一體動(dòng)態(tài)數(shù)碼管顯示方案,此設(shè)計(jì)電路如圖所示。采用動(dòng)態(tài)數(shù)碼管顯示,具有程序簡(jiǎn)單, 對(duì)外界環(huán)境要求低,易于維護(hù),同時(shí)其精度比較高,精確可靠,操作簡(jiǎn)單。顯示直觀的特點(diǎn)。但只能顯示數(shù)字和一些代碼,不能顯示漢字及一些常用的符號(hào),且硬件設(shè)計(jì)比較復(fù)雜。方案二;LCD1602顯示器所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個(gè)字符。目前字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫(xiě)的控制程序可以很方便地應(yīng)用于大部分的字符型液晶。字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來(lái)的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,引腳定義如下表所示: HD44780內(nèi)置了DDRAM、CGROM和CGRAM。 DDRAM就是顯示數(shù)據(jù)RAM,用來(lái)寄存待顯示的字符代碼。共80個(gè)字節(jié),其地址和屏幕的對(duì)應(yīng)關(guān)系如下表: HD44780的指令集1.清屏指令 功能: 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入空白的ASCII碼20H; 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; 將地址計(jì)數(shù)器(AC)的值設(shè)為0。 2.光標(biāo)歸位指令 功能: 把光標(biāo)撤回到顯示器的左上方; 把地址計(jì)數(shù)器(AC)的值設(shè)置為0; 保持DDRAM的內(nèi)容不變 3.進(jìn)入模式設(shè)置指令 功能:設(shè)定每次定入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫(xiě)入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示: 位名設(shè)置 I/D 0=寫(xiě)入新數(shù)據(jù)后光標(biāo)左移 1=寫(xiě)入新數(shù)據(jù)后光標(biāo)右移 S0=寫(xiě)入新數(shù)據(jù)后顯示屏不移動(dòng) 1=寫(xiě)入新數(shù)據(jù)后顯示屏整體右移1個(gè)字 4.顯示開(kāi)關(guān)控制指令 功能:控制顯示器開(kāi)/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下: 位名設(shè)置 D0=顯示功能關(guān) 1=顯示功能開(kāi) C0=無(wú)光標(biāo) 1=有光標(biāo) B0=光標(biāo)閃爍 1=光標(biāo)不閃爍 5.設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令 功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下: S/C R/L設(shè)定情況 0 0光標(biāo)左移1格,且AC值減1 0 1光標(biāo)右移1格,且AC值加1 1 0顯示器上字符全部左移一格,但光標(biāo)不動(dòng) 1 1顯示器上字符全部右移一格,但光標(biāo)不動(dòng) 6.功能設(shè)定指令 功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下: 位名設(shè)置 DL 0=數(shù)據(jù)總線為4位 1=數(shù)據(jù)總線為8位 N 0=顯示1行 1=顯示2行 F0=57點(diǎn)陣/每字符 1=510點(diǎn)陣/每字符 7.設(shè)定CGRAM地址指令 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。 8.設(shè)定DDRAM地址指令 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。 (注意這里我們送地址的時(shí)候應(yīng)該是0x80+Address,這也是前面說(shuō)到寫(xiě)地址命令的時(shí)候要加上0x80的原因) 9.讀取忙信號(hào)或AC地址指令 功能: 讀取忙碌信號(hào)BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時(shí)無(wú)法接收單片機(jī)送來(lái)的數(shù)據(jù)或指令; 當(dāng)BF=0時(shí),液晶顯示器可以接收單片機(jī)送來(lái)的數(shù)據(jù)或指令; 讀取地址計(jì)數(shù)器(AC)的內(nèi)容。 10.數(shù)據(jù)寫(xiě)入DDRAM或CGRAM指令一覽 功能: 將字符碼寫(xiě)入DDRAM,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符; 將使用者自己設(shè)計(jì)的圖形存入CGRAM。 11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽 功能:讀取DDRAM或CGRAM中的內(nèi)容。 基本操作時(shí)序: 讀狀態(tài) 輸入:RS=L,RW=H,E=H 輸出:DB0DB7=狀態(tài)字 寫(xiě)指令 輸入:RS=L,RW=L,E=下降沿脈沖,DB0DB7=指令碼 輸出:無(wú) 讀數(shù)據(jù) 輸入:RS=H,RW=H,E=H 輸出:DB0DB7=數(shù)據(jù) 寫(xiě)數(shù)據(jù) 輸入:RS=H,RW=L,E=下降沿脈沖,DB0DB7=數(shù)據(jù) 輸出:無(wú) 2.2.2.3、鍵盤(pán)設(shè)計(jì)方案與選擇方案一:獨(dú)立鍵盤(pán)。獨(dú)立鍵盤(pán)為一端接地,另一端接I/O口,并且要接上拉電阻。這種鍵盤(pán)的硬件都很容易實(shí)現(xiàn),但每一個(gè)按鍵就要用一個(gè)I/O口,適合本次設(shè)計(jì)。方案二:通過(guò)PS2協(xié)義,用鍵盤(pán)同單片機(jī)相接,從而實(shí)現(xiàn)單片機(jī)與鍵盤(pán)通信。其電路如圖所示?,F(xiàn)在PC機(jī)廣泛采用的PS/2接口為miniDIN 6引腳的連接器。1數(shù)據(jù)線(DATA);未用;3電源地(GND);4電源(+5 V);5時(shí)鐘(CLK);6未用。由此圖可知,使用鍵盤(pán)硬件結(jié)構(gòu)比較簡(jiǎn)單,但鍵盤(pán)的體積太大,所以此系統(tǒng)不采用此方案。方案三:自制編碼鍵盤(pán)。編碼鍵盤(pán)的電路如圖所示,這種鍵盤(pán)有編程簡(jiǎn)單,占用資源少,但其硬件比較復(fù)雜,要用很多的二極管,不是很理想。 方案四:4*4矩陣式鍵盤(pán)。其電路圖如圖所示,這種鍵盤(pán)的硬件簡(jiǎn)單,使用的I/O口也不多,而且這種鍵盤(pán)的編程方法已很成熟。本次設(shè)計(jì)也可以采用這種矩陣式鍵盤(pán)。其電路圖如圖主體設(shè)計(jì)部分:(1)、系統(tǒng)模塊圖:(2)、算術(shù)運(yùn)算程序流程圖:(3)、系統(tǒng)總流程圖:(4)、硬件設(shè)計(jì):(一)、總體硬件設(shè)計(jì):本設(shè)計(jì)選用AT89C51單片機(jī)為主控單元; 顯示部分:采用LCD靜態(tài)顯示;按鍵部分:采用4*4鍵盤(pán);用MM74C922為4*4鍵盤(pán)掃描IC,讀取輸入的鍵值。總體設(shè)計(jì)效果如下圖:(二)、單片機(jī)接口電路說(shuō)明:1、手動(dòng)上電復(fù)位電路:當(dāng)VCC上電時(shí),C充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位;幾個(gè)毫秒后,C充滿,10K電阻上電流降為0,電壓也為0,使得單片機(jī)進(jìn)入工作狀態(tài)。工作期間,按下S,C放電。S松手,C又充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位。幾個(gè)毫秒后,單片機(jī)進(jìn)入工作狀態(tài)。 2、內(nèi)部時(shí)鐘模式電路:當(dāng)單片機(jī)工作于內(nèi)部時(shí)鐘模式的時(shí)候,只需在XTAL1和XTAL2引腳連接一個(gè)晶體振蕩器或者陶瓷振蕩器,并接兩個(gè)電容后接地即可,在使用時(shí)對(duì)于電容的選擇有一定的要求:當(dāng)外接晶體振蕩器的時(shí)候,電容值一般選擇C1=C2=30+10pF或30-10pF;當(dāng)外接陶瓷振蕩器的時(shí)候,電容值一般選擇C1=C2=40+10pF或40-10pF;3、 STC89C52介紹:STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門(mén)狗電路,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。和atmel的對(duì)比STC89C52RC單片機(jī):8K字節(jié)程序存儲(chǔ)空間;512字節(jié)數(shù)據(jù)存儲(chǔ)空間;內(nèi)帶4K字節(jié)EEPROM存儲(chǔ)空間;可直接使用串口下載;AT89S52單片機(jī):8K字節(jié)程序存儲(chǔ)空間;256字節(jié)數(shù)據(jù)存儲(chǔ)空間;沒(méi)有內(nèi)帶EEPROM存儲(chǔ)空間; 4、 LCD1602介紹:1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:VSS為電源地第2腳:VDD接5V電源正極第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì) 產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。第5腳:RW為讀寫(xiě)信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫(xiě)操作。第6腳:E(或EN)端為使能(enable)端。第714腳:D0D7為8位雙向數(shù)據(jù)端。第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極602LCD的特性n+5V電壓,對(duì)比度可調(diào)n內(nèi)含復(fù)位電路n提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能n有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAMn內(nèi)建有192個(gè)5X7點(diǎn)陣的字型的字符發(fā)生器CGROMn8個(gè)可由用戶自定義的5X7的字符發(fā)生器CGRAM讀的時(shí)候,先讀左邊那列,再讀上面那行,如:感嘆號(hào)!的ASCII為0x21,字母B的ASCII為0x42(前面加0x表示十六進(jìn)制)1602通過(guò)D0D7的8位數(shù)據(jù)端傳輸數(shù)據(jù)和指令。顯示模式設(shè)置: (初始化)0011 0000 0x38 設(shè)置162顯示,57點(diǎn)陣,8位數(shù)據(jù)接口;顯示開(kāi)關(guān)及光標(biāo)設(shè)置: (初始化)0000 1DCB D顯示(1有效)、C光標(biāo)顯示(1有效)、B光標(biāo)閃爍(1有效)0000 01NS N=1(讀或?qū)懸粋€(gè)字符后地址指針加1 &光標(biāo)加1),N=0(讀或?qū)懸粋€(gè)字符后地址指針減1 &光標(biāo)減1),S=1 且 N=1 (當(dāng)寫(xiě)一個(gè)字符后,整屏顯示左移)s=0 當(dāng)寫(xiě)一個(gè)字符后,整屏顯示不移動(dòng)數(shù)據(jù)指針設(shè)置:數(shù)據(jù)首地址為80H,所以數(shù)據(jù)地址為80H+地址碼(0-27H,40-67H)其他設(shè)置:01H(顯示清屏,數(shù)據(jù)指針=0,所有顯示=0);02H(顯示回車(chē),數(shù)據(jù)指針=0)。(三)、鍵盤(pán)接口電路:計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤(pán)的方案。矩陣鍵盤(pán)采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤(pán),在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤(pán)上按鍵的個(gè)數(shù)就為44個(gè)。這種行列式鍵盤(pán)結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。矩陣鍵盤(pán)的工作原理:計(jì)算器的鍵盤(pán)布局如圖1所示:一般有16個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P口實(shí)現(xiàn)16個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。圖 1 矩陣鍵盤(pán)布局圖矩陣鍵盤(pán)內(nèi)部電路圖如圖2所示: (四)、LCD顯示模塊:本設(shè)計(jì)采用LCD液晶顯示器來(lái)顯示輸出數(shù)據(jù)。通過(guò)D0-D7引腳向LCD寫(xiě)指令字或?qū)憯?shù)據(jù)以使LCD實(shí)現(xiàn)不同的功能或顯示相應(yīng)數(shù)據(jù)。圖5 LCD 模塊(五)運(yùn)算模塊(單片機(jī)控制):MCS-51 單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O等一臺(tái)計(jì)算機(jī)所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM/EPROM)、并行I/O 口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過(guò)不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,通過(guò)使用單片機(jī)編寫(xiě)的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機(jī)作為計(jì)算器的主要功能部件,可以很快地實(shí)現(xiàn)運(yùn)算功能。PCB設(shè)計(jì):1、實(shí)驗(yàn)現(xiàn)象、數(shù)據(jù)記錄數(shù)碼顯示及運(yùn)算最多九位顯示及運(yùn)算當(dāng)超出時(shí)溢出顯示五、總結(jié)在實(shí)驗(yàn)中遇到了這樣那樣的問(wèn)題,軟件的編輯中使得c語(yǔ)言的應(yīng)用更加熟練;在硬件的實(shí)現(xiàn)中又出現(xiàn)了軟件和硬件不統(tǒng)一的問(wèn)題,本實(shí)驗(yàn)我做了兩次,第一次的時(shí)候STC89C52單片機(jī)的P2口的P2.0P2.7分別對(duì)應(yīng)連接到LCD1602的D7D0口,這就使得在寫(xiě)程序的時(shí)候需要把所有讀寫(xiě)的數(shù)據(jù)以及地址都按位取反,改寫(xiě)程序比較復(fù)雜,最終調(diào)試失敗,又改變了硬件電路。最終成功; 本次設(shè)計(jì)不管在軟件,或是在硬件方面都讓我受益匪淺,讓我所學(xué)的知識(shí)得以應(yīng)用到實(shí)踐,經(jīng)過(guò)這次創(chuàng)新性實(shí)驗(yàn),也令我看到了很多的不足,在實(shí)驗(yàn)中的一些程序不能夠及時(shí)編輯正確,需要很長(zhǎng)時(shí)間的設(shè)計(jì)。硬件中我對(duì)單片機(jī)實(shí)驗(yàn)板上的很多硬件不是很清楚,使得在下載程序后,又進(jìn)行了很長(zhǎng)時(shí)間的調(diào)整。六、主要程序代碼Key.C #include #define uchar unsigned char #define uint unsigned int #define KEYDATA P1 uchar key; uchar dis_buff; void Delay1(uint x) uint i,j; for(i=0;ix;i+) for(j=0;j4)|0xf0); if(temp=1)key=0; else if(temp=2)key=1; else if(temp=4)key=2; else if(temp=8)key=3; else key=16; KEYDATA=0x0f; Delay1(1); temp=KEYDATA; temp=temp&0x0f; temp=(temp|0xf0); if(temp=1)key+=12; else if(temp=2)key+=8; else if(temp=4)key+=4; else if(temp=8)key+=0; else key=16; if(key16) dis_buff=key; return dis_buff; uchar KeyDown(void) uchar keyFlag; uchar temp; KEYDATA=0xf0; if(KEYDATA!=0xf0) temp=KEYDATA; Delay1(200); if(temp=KEYDATA) keyFlag=1; else keyFlag=0; else keyFlag=0; return keyFlag; 1602. C #include #include #define uchar unsigned char #define uint unsigned int sbit rs=P25; sbit rw=P26; sbit e=P27; sbit bf=P07; void delay1ms(void) uchar i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; void delay(uchar n) uchar i; for(i=0;in;i+) delay1ms(); uchar BusyTest(void) bit result1; rs=0; rw=1; e=1; _nop_(); _nop_(); _nop_(); _nop_(); result1=bf; e=0; return result1; void WriteCommand(uchar command) while(BusyTest()=1); rs=0; rw=0; e=0; _nop_(); _nop_();P0=command;_nop_();e=1;_nop_();e=0;void WriteAddress(uchar addr) WriteCommand(addr|0x80); void WriteData(uchar d)while(BusyTest()=1);rs=1;rw=0;e=0;_nop_();P0=d;e=1;_nop_();e=0;void LcdInit(void)delay(15);WriteCommand(0x38);delay(5);WriteCommand(0x38);delay(5); WriteCommand(0x38);delay(5);WriteCommand(0x06);delay(5);WriteCommand(0x01);delay(5);WriteCommand(0x0c);delay(5);WriteCommand(0x0e);delay(5);Main.c#include#define uchar unsigned char#define uint unsigned intuchar position=0x00;uchar string30;/存放輸入的表達(dá)式uchar code warn=ERROR;uchar code num=q,7,4,1,0,8,5,2,=,9,6,3,s,k,c,j;uchar Curtime7=50,15,13,7,5,1,8;uchar opr15; /操作符int opt15; /操作數(shù)uchar iopt,iopr; /記錄操作數(shù)和操作符數(shù)組的下標(biāo)bit flag=0; /標(biāo)記是否輸入“(”操作符 循環(huán)嵌套long result=0; uchar pp; /記錄表達(dá)式的字符位置bit equal=0; /標(biāo)記是否開(kāi)始計(jì)算int op=0;/用來(lái)記錄合成的數(shù)值bit normal=1;/用來(lái)記錄是否正常,正常就進(jìn)行運(yùn)算,否則停止運(yùn)算uchar operate;/用來(lái)標(biāo)記操作數(shù)和操作符的堆棧bit equalFlag=0;/用來(lái)標(biāo)記等號(hào)是否按下,按下之后為1相當(dāng)于清屏uchar shift=0; /shift鍵 sbit m1=P37; sbit m2=P36;sbit m3=P35; /用來(lái)標(biāo)識(shí)shift鍵是否按下,按下則滅uchar pzp=0;/用來(lái)保存修改狀態(tài)下等號(hào)的位置uchar WriteAddress(uchar addr);uchar WriteData(uchar d);uchar WriteCommand(uchar command);void LcdInit();uchar KeyDown(void);uchar KeyScan(void);void Init(void) int i; position=0x00; for(i=0;i30;i+) stringi=a; flag=0; pp=0; equal=0; normal=1; shift=0; opr0=0; iopt=0; iopr=0; pzp=0; op=0;void DisplayNumble(long numble) /顯示結(jié)果,把結(jié)果轉(zhuǎn)換為字符串形式在輸出 uchar numx8=a,a,a,a,a,a,a,a; uchar i=1,j=0x42; LcdInit(); WriteCommand(0x0c);/關(guān)光標(biāo)顯示 WriteAddress(0x40);WriteData(=); if(numble0) numxi=numble%10; i+; numble=numble/10; i=i-1; while(numxi!=a) WriteAddress(j+); WriteData(numxi+0x30); i-; void DisplayError(void) /顯示錯(cuò)誤uchar i;i=0;normal=0;while(warni!=0)WriteAddress(0x40+i);WriteData(warni);i+;void Calculate(void)/計(jì)算int m;switch(opriopr%10)case 0:flag=1;break;case 1:m=opt-iopt+opt-iopt;optiopt+=m;break;case 2:m=optiopt-2-optiopt-1;iopt=iopt-2;optiopt+=m; break;case 3:m=opt-iopt*opt-iopt;optiopt+=m;break;case 4:m=optiopt-2/optiopt-1;if(optiopt-1=0)DisplayError();elseiopt=iopt-2;optiopt+=m; break; void InsertOpr(uchar operate)reentrantif(operate/10opriopr/10|operate=10)opr+iopr=operate;elseif(iopr!=0)Calculate();if(operate=15)iopr-;if(flag=0)InsertOpr(operate);elseflag=0; /用來(lái)使遞歸結(jié)束elseif(iopr=0)iopr+=1;opriopr=operate;uchar KeyChar(void)uchar ch; uchar n=KeyScan();if(shift!=2)switch(n) case 0:if(shift=0)ch=q; /q表示清除else ch=w;break; /w表示修改case 12:shift=(shift+1)%3;ch=m;break;case 13:if(shift=0)ch=(;else ch=);break;case 14:if(shift=0)ch=*;else ch=/;break;case 15:if(shift=0)ch=+;else ch=-;break;default:ch=numn;break;else ch=t;return ch;void WriteNum(uchar num,uchar add) /顯示數(shù)字WriteAddress(add);WriteData(num/10+0x30);WriteAddress(add+1);WriteData(num%10+0x30);void Display()WriteNum(Curtime6,0x00);WriteAddress(0x02);WriteData(-);WriteNum(Curtime4,0x03);WriteAddress(0x05);WriteData(-);WriteNum(Curtime3,0x06);WriteAddress(0x09);WriteData(D);WriteAddress(0x0a);WriteData(a);WriteAddress(0x0b);WriteData(y);WriteNum(Curtime5,0x0d);WriteNum(Curtime2,0x44);WriteAddress(0x46);WriteData(:);WriteNum(Curtime1,0x47);WriteAddress(0x49);WriteData(:);WriteNum(Curtime0,0x4a);void main(void)Init();LcdInit();while(1)switch(shift)case 0:m1=1;m2=0;m3=0;break;case 1:m1=0;m2=1;m3=0;break;case 2:m1=0;m2=0;m3=1;break;if(shift!=2) if(KeyDown()=1)uchar ch;ch=KeyChar();if(ch!=t) if(ch!=)/為按下鍵記錄表達(dá)式if(equalFlag=1) /進(jìn)行過(guò)運(yùn)算之后,再運(yùn)算則初始化Init();LcdInit();equalFlag=0;if(ch!=m&ch!=q&ch!=w) /m模式選擇、q清除鍵,w修改鍵stringpp+=ch; if(pp-pzp=1) pzp=pp;WriteAddress(position);position+=1;if(position=15)WriteCommand(0x07);Write

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論