版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
嵌入式系統(tǒng)綜合設(shè)計(jì)課程設(shè)計(jì)(報(bào)告)題目:基于STM32的簡易計(jì)算器
《嵌入式系統(tǒng)綜合實(shí)踐》課程設(shè)計(jì)(報(bào)告)摘要單片機(jī)的出現(xiàn)是計(jì)算機(jī)技術(shù)高速發(fā)展的產(chǎn)物,它是嵌入式控制系統(tǒng)的核心?,F(xiàn)在已經(jīng)廣泛的應(yīng)用到我們?nèi)粘I畹暮芏囝I(lǐng)域中,比如:科技設(shè)備、電子設(shè)備、通信工程、汽車產(chǎn)業(yè),工業(yè)等。本設(shè)計(jì)的簡易計(jì)算器就是利用STM32單片機(jī)作為核心控制器制作而成的。最近學(xué)習(xí)了STM32多功能開發(fā)板,想通過STM32開發(fā)板來做一個項(xiàng)目?,F(xiàn)如今計(jì)算器的應(yīng)用很廣泛,大到科研計(jì)算,小到算術(shù)結(jié)賬,日常生活中都免不了用到它。所以選擇制作一個簡易的計(jì)算器來作為自己的設(shè)計(jì)。從而檢查一下自己對這塊板子的理解和自己的動手實(shí)踐能力。制作這個項(xiàng)目我還用到了微控制器、LCD液晶顯示屏、觸摸屏、FSMC。每一個器件我都細(xì)心了解,熟練的應(yīng)用它們,最終完成了我的課題設(shè)計(jì)。關(guān)鍵詞:STM32計(jì)算器觸摸屏
目錄第1章 概述 概述課題背景古代有四大發(fā)明聞名于世,當(dāng)然最早的計(jì)算器也誕生于中國。在中國古代,最早采用的一種用來計(jì)算的工具叫籌策,又稱算籌。這種算籌的制作材料有木頭、獸骨等,但大多數(shù)是用竹子制成的。大約二百七十枚一束,體積很小,利于人們隨身攜帶。直到現(xiàn)代,我們?nèi)栽谑褂玫闹樗惚P,珠算盤是中國古代計(jì)算工具里的一項(xiàng)有利發(fā)明。明代時候的珠算盤與我們現(xiàn)今用的就已經(jīng)基本相同??梢娖鋵?shí)用性。17世紀(jì)初,西方國家的計(jì)算工具取得了迅速的發(fā)展,在計(jì)算工具領(lǐng)域里出現(xiàn)了一些新的發(fā)明,英國數(shù)學(xué)家納皮爾發(fā)明了“納皮爾算籌”,英國牧師奧卻德發(fā)明了圓柱形對數(shù)計(jì)算尺,這種計(jì)算尺得到了廣泛的應(yīng)用,它不僅能計(jì)算加減乘除,平方,開方運(yùn)算,而且可以計(jì)算函數(shù)運(yùn)算。這些計(jì)算工具的使用與發(fā)展為現(xiàn)代計(jì)算器的發(fā)展奠定了良好的基礎(chǔ)。16世紀(jì)40年代,年僅19歲的偉大法國科學(xué)家帕斯卡引用算盤的原理,發(fā)明了第一部機(jī)械式計(jì)算機(jī),在他發(fā)明的計(jì)算器中有一些相互關(guān)聯(lián)的齒輪,一個齒輪轉(zhuǎn)過十位,就會使另一個齒輪轉(zhuǎn)過一位,這樣,人們就可以像撥打電話號碼那樣,把數(shù)字撥進(jìn)去,計(jì)算結(jié)果就會出現(xiàn)在顯示界面上,但是這種計(jì)算器只能進(jìn)行加減運(yùn)算。1694年,萊布尼茲在德國將它改造成可以進(jìn)行乘除的計(jì)算器。后來,一直到了20世紀(jì)50年代末,電子計(jì)算器才被發(fā)明出來。隨著社會的不斷發(fā)展科技的不斷創(chuàng)新。計(jì)算器已在數(shù)十年間遍布千家萬戶對于計(jì)算器的百年歷史,1946年2月15日在美國賓夕法尼亞大學(xué)世界上第一臺電子計(jì)算器ENIAC正式投入了運(yùn)行。在隆重的揭幕儀式上ENIAC表演了它的“絕招”在1秒鐘內(nèi)進(jìn)行5000次加法運(yùn)算,在1秒鐘內(nèi)進(jìn)行500次乘法運(yùn)算,這比當(dāng)時最快的電器計(jì)算器的運(yùn)算速度要抉1000多倍。全場起立歡呼科學(xué)技術(shù)進(jìn)入了一個新的歷史發(fā)展時期。數(shù)學(xué)家把聰明給了電子計(jì)算器,電子計(jì)算器將使數(shù)學(xué)家變得更加聰明。而且電子計(jì)算器不僅是一種工具,它與其它的工具都不相同,電子計(jì)算器是人腦的一個側(cè)面的延伸。因?yàn)殡娮佑?jì)算器不僅具有非凡的計(jì)算能力,速度之快令人望塵莫及而且還能夠仿真人的某些思維功能按照一定的規(guī)則進(jìn)行邏輯判和邏輯推理代替人的部分腦力勞動。1976年數(shù)學(xué)家憑借電子計(jì)算器去證明四色定理“依靠機(jī)器完成了人沒有能夠完成的事情”轟動了整個國際數(shù)學(xué)界。計(jì)算器的未來是小型化和輕便化,現(xiàn)在市面上出現(xiàn)的使用太陽能電池的計(jì)算器,使用ASIC設(shè)計(jì)的計(jì)算器,如使用純軟件實(shí)現(xiàn)的計(jì)算器等未來的智能化計(jì)算器將是我們的發(fā)展方向更希望成為應(yīng)用廣泛的計(jì)算工具。1.2課題研究的現(xiàn)狀現(xiàn)在所說的計(jì)算器一般是指“電子計(jì)算器”,該名詞由日文傳入中國。計(jì)算器是能進(jìn)行數(shù)學(xué)運(yùn)算的手持機(jī)器,擁有集成電路芯片,結(jié)構(gòu)簡單,功能較弱,但由于它使用方便、操作簡單、價格低廉,因而廣泛運(yùn)用于商業(yè)交易中,也是必.備的辦公用品之一。隨著電子技術(shù)的飛速發(fā)展,為了進(jìn)行大量的運(yùn)算,電子計(jì)算器應(yīng)用于各個領(lǐng)域,從而使電子計(jì)算器的應(yīng)用更為廣泛,不僅改變傳統(tǒng)意義的手持計(jì)算器功能,使計(jì)算器支持彩屏的顯示,界面更友好,可擴(kuò)展性能更強(qiáng),為生活和工作帶來了便捷。本文設(shè)計(jì)的是一種基于STM32的簡易計(jì)算器的設(shè)計(jì),通過觸摸屏進(jìn)行人機(jī)交互,按鍵可以直接顯示到觸摸屏上,不需要傳統(tǒng)的機(jī)械按鍵。它與傳統(tǒng)的機(jī)械按鍵不同,傳統(tǒng)的機(jī)械按鍵需要占用大量的單片機(jī)I/O口,而觸摸屏不同,它只需要通過SPI接口和單片機(jī)通信就可以。1.3系統(tǒng)功能1、本設(shè)計(jì)的計(jì)算器完成一些簡單數(shù)學(xué)的運(yùn)算,加減乘除。并將表達(dá)式和結(jié)果實(shí)時顯示在液晶屏上。2、實(shí)現(xiàn)基本的四則運(yùn)算,并能并能在觸摸屏幕上顯示表達(dá)式和結(jié)果。3、能實(shí)現(xiàn)小數(shù),負(fù)數(shù)的運(yùn)算。4、能實(shí)時顯示計(jì)算器表達(dá)式和結(jié)果,能精確到小數(shù)點(diǎn)后六位。第2章總體設(shè)計(jì)方案2.1設(shè)計(jì)方案論證2.1.1單片機(jī)的選型單片機(jī)選用意法半導(dǎo)體基于ARMCortex-M3內(nèi)核的STM32F103ZET6,意法半導(dǎo)體的單片機(jī)具有良好的性能,低功耗,易開發(fā),性價比高。而且其體系和構(gòu)架的相關(guān)資料豐富,用它能快速的開發(fā)出整個系統(tǒng)。2.1.2顯示屏的選型如今的液晶顯示屏種類多樣,選用的是2.8寸的TFT液晶屏,320x480的分辨率,支持16位色,16位數(shù)據(jù)接口,該屏幕自帶觸摸控制功能,可以直接在屏幕上通過觸摸來控制所顯示的按鍵。2.1.3外部存儲器的選型這里用的外部存儲器是FSMC。由于其每一個存儲器模塊都有其獨(dú)立的片選控制,由于其每一個存儲器模塊都有獨(dú)立的片選配置,因此它的每一個存儲器模塊都可以獨(dú)立配置,而且它還具有接口方便,體積小,斷電不丟失數(shù)據(jù)等特點(diǎn),所以能在工業(yè)自動化控制方面和儀器儀表中得到廣泛的應(yīng)用。2.2系統(tǒng)總體設(shè)計(jì)根據(jù)設(shè)計(jì)要求和模塊選型所確定的系統(tǒng)總體方案設(shè)計(jì)如圖2.1所示,此系統(tǒng)主要是在觸摸屏上顯示數(shù)學(xué)表達(dá)式,所以硬件電路比較簡單。STM32最小系統(tǒng)和顯示屏之間利用FSMC進(jìn)行16位并行接口通信。觸摸模塊LCD顯示模塊FSMC模塊STM32系統(tǒng)開發(fā)板觸摸模塊LCD顯示模塊FSMC模塊STM32系統(tǒng)開發(fā)板圖2.1系統(tǒng)總體方案設(shè)計(jì)圖
第3章硬件設(shè)計(jì)3.1微控制器簡介為了進(jìn)行大量浮點(diǎn)數(shù)的運(yùn)算,并且能很好的支持彩屏的顯示,我們選用了計(jì)算能力較強(qiáng)的基ARMCortex-M3系列的STM32F103ZET6作為微控制器。Cortex-M3是ARM公司研發(fā)的一個系列,主要應(yīng)用于微控制開發(fā)領(lǐng)域,采用的架構(gòu)是ARMv7-M,它包括16位所有的Thumb指令集,還包括基本的32位Thumb-2指令集架構(gòu)。Thumb-2在Thumb指令集架構(gòu)上進(jìn)行了多方面的改進(jìn),它與Thumb比較,不僅具有超高的代碼密度,而且還可以提供16/32位指令的超高性能。ARM的Cortex-M3處理器是現(xiàn)在比較高端的嵌入式ARM處理器,它為實(shí)現(xiàn)MCU的需要提供了諸多便捷,例如:低成本的平臺,引腳數(shù)目縮減,還把系統(tǒng)的功耗降低了,并且同時還提供了超高的計(jì)算性能和先進(jìn)的中斷響應(yīng)。基于AVRCortex-M3的RISC處理器是32位,它能供應(yīng)多余的代碼效率,在一般8位和16位系統(tǒng)的存儲結(jié)構(gòu)上發(fā)揮了ARM內(nèi)核的超高性能。3.2LCD液晶顯示簡介薄膜晶體管即TFT,即每個液晶的像素點(diǎn)都是依靠在像素點(diǎn)后面的薄膜晶體管來驅(qū)動,這樣就能夠達(dá)到高對比度、高亮度、高速度、顯示屏幕畫面,是至今為止最優(yōu)秀的LCD彩色顯示設(shè)備之一,其效果非常接近于CRT顯示器,是目前大部分臺式機(jī)子和筆記本電腦上的主要顯示設(shè)備。TFT的每個像素點(diǎn)都是依靠集成在自身上的TFT來管理,是有源像素點(diǎn)。所以,不但可以把速度極大提高,而且也可以把其亮度和對比度大大的提高,同時達(dá)到超高水平的還有分辨率。TFT優(yōu)點(diǎn):TFT的亮度好,對比度高,層次感強(qiáng)。缺點(diǎn)是高耗電且高成本。TFT型的液晶顯示器主要構(gòu)造有:導(dǎo)光板、螢光管、濾光板、偏光板、配向膜、玻璃基板、薄模式晶體管、液晶材料等等。我們這里使用的TFTLCD模塊是ILI9486型號的,其有下面一些特點(diǎn):(1)顯示屏2.8寸。(2)分辨率是320x480。(3)自身攜帶觸摸屏,能夠用來當(dāng)作控制輸入。(4)16位的真彩顯示。(5)通用的接口為顯示部分是16位的并行接口,觸摸控制模塊是SPI接口。這個模塊使用的是DST2001PHTFTLCD,DST2001PH的應(yīng)用控制器是ILI9320。TFTLCD模塊使用的是80并口方式與外部進(jìn)行連接,80并口(16位數(shù)據(jù)線模塊)有以下這些信號線:1.CS:TFTLCD片選信號。2.RD:從TFTLCD讀取數(shù)據(jù)。3.WR:向TFTLCD寫入數(shù)據(jù)。4.RST:硬復(fù)位TFTLCD。5.RS:數(shù)據(jù)/命令標(biāo)志(1,讀寫數(shù)據(jù):0,讀寫命令;)。6.D[15:0]:16位雙向數(shù)據(jù)線。這個模塊的控制器是ILI9320,此控制器TFTLCD模塊的RST信號線是直接連接在STM32復(fù)位腳上的,而不是被軟件控制,這樣就可以省下來一個IO口。除此之外我們還需要一個背光控制線來這里控制TFTLCD的背光。因此,我們總共需要21個IO口。3.3觸摸屏模塊簡介我們這里TFTLCD選用的觸摸屏是電阻式觸摸屏,下面我們簡單的介紹一下電阻式觸摸屏的原理。電阻式觸摸屏是應(yīng)用壓力感應(yīng)來進(jìn)行控制的。電阻式觸摸屏的主要模塊是一塊與顯示器表面非常適合的薄膜電阻屏,這是一種具有多層的復(fù)合薄膜,它的基層是由硬塑料平板和一層玻璃構(gòu)成,表面還涂有一層非常透明的氧化金屬導(dǎo)電層,在上面還鋪有一層外表面硬化處理、光滑防磨擦的硬塑料層、在它的內(nèi)表面還涂有一層涂層,在它們之間有非常多的細(xì)小(小于1/1000英寸)的透明隔離點(diǎn),用來把兩層導(dǎo)電層隔開絕緣。當(dāng)你用手指觸摸屏幕時,兩層導(dǎo)電層在觸摸點(diǎn)這個位置就有了接觸,引發(fā)電阻發(fā)生變化,在X和Y兩個方向上產(chǎn)生信號,然后把信號傳送到觸摸屏控制器,控制器偵測到這一接觸信號后,會馬上計(jì)算出坐標(biāo)(X,Y)的位置,然后再根據(jù)獲得的位置坐標(biāo)來模擬鼠標(biāo)的方式運(yùn)作,這就是電阻觸摸屏技術(shù)的基本原理。電阻屏有如下的特點(diǎn):其工作環(huán)境狀態(tài)是與外界環(huán)境完全隔離的,所以不怕污垢、水汽和塵土??梢杂萌魏挝矬w來與其觸摸,還可以用來寫字,畫圖,這是它的一大優(yōu)勢。電阻觸摸屏的精確度只由A/D轉(zhuǎn)換的精確度來決定,所以可以很容易的達(dá)到4096*4096。圖3.1四線電阻式觸摸屏的結(jié)構(gòu)圖計(jì)算觸點(diǎn)的X,Y坐標(biāo)方法步驟如下所示:1.計(jì)算Y坐標(biāo),在Y+電極要施加驅(qū)動電壓Vdrive,Y-電極需要接地,用X+當(dāng)作引出端測量得到接觸點(diǎn)的電壓值,因?yàn)镮TO層均勻?qū)щ姡杂|點(diǎn)電壓與Vdrive電壓之比即觸點(diǎn)Y坐標(biāo)與屏高度之比。2.計(jì)算X坐標(biāo),在X+電極要施加驅(qū)動電壓Vdrive,X-電極需要接地,用Y+當(dāng)作引出端測量得到接觸點(diǎn)的電壓值,因?yàn)镮TO層均勻?qū)щ姡杂|點(diǎn)電壓與Vdrive電壓之比即觸點(diǎn)X坐標(biāo)與屏寬度之比。四線電阻式觸摸屏既能夠得到觸點(diǎn)的(X,Y)坐標(biāo),也能夠測得觸點(diǎn)的壓力,原因是toplayer施壓后,上下層ITO就會發(fā)生接觸,在觸點(diǎn)上本來是有電阻存在的。如圖3.2所示,壓力越大,接觸面積越充分,電阻越小,我們就可以通過測量這個電阻的大小就能夠得到壓力的大小。圖3.2四線電阻式觸摸屏觸電感應(yīng)圖TFTLCD模塊自帶的觸摸屏控制芯片是XPT20-46。XPT20-46是一個有4導(dǎo)線制的觸摸屏控制器,內(nèi)含12位分辨率125KHz轉(zhuǎn)換速率非常接近A/D轉(zhuǎn)換器。XPT20-46能夠支持1.5~5.25的低電壓I/O接口。XPT20-46可以通過執(zhí)行兩次A/D轉(zhuǎn)換就能夠查出被按的屏幕位置,除此之外,還能夠測量壓在觸摸屏上的壓力。內(nèi)部自帶的2.5V參考電壓能夠當(dāng)作輔助輸入、溫度測量和電池監(jiān)測模式之用、電池監(jiān)測的電壓范圍是0V~6V。XPT20-46的片內(nèi)集成還有一個溫度傳感器。在2.7V的正常工作狀態(tài)下,關(guān)閉參考電壓,功耗可以小于0.75mW。XPT20-46采用微小的封裝形式:TSSOP-16、QFN-16(0.75mm厚度)和VFBGA-48。工作溫度范圍:-40℃~+85℃。3.4FSMC簡介FSMC(FlexibleStaticMemoryController,可變靜態(tài)存儲控制器))是STM32系列中內(nèi)部集成256KB以上Flash,后綴為xC、xD和xE的高存儲密度微控制器特有的存儲控制機(jī)制。之所以稱為“可變”,是因?yàn)榻?jīng)過對特殊功能寄存器的設(shè)置,F(xiàn)SMC可以根據(jù)不一樣的外部存儲器類型,發(fā)出以之對應(yīng)的地址、數(shù)據(jù)、控制信號類型來匹配信號的速度,從而使STM32系列微控制器不僅可以應(yīng)用各種不同類型、不同速度的外部靜態(tài)存儲器,而且還可以在不增加外部器件的情況下,同時還可以擴(kuò)展多種不同類型的靜態(tài)存儲器,從而滿足系統(tǒng)設(shè)計(jì)對存儲容量、產(chǎn)品體積和成本的綜合要求。主要功能:具有靜態(tài)存儲器接口的器件,包括:靜態(tài)隨機(jī)存儲器(SRAM)、只讀存儲器(ROM)、NOR閃存、PSRAM(4個存儲器塊)。兩個NAND閃存塊,支持硬件ECC,而且可以檢測高達(dá)8K字節(jié)數(shù)據(jù)。16位的PC卡兼容設(shè)備。支持對同步設(shè)備的成組訪問模式,如PSRAM和NOR閃存。8或16位數(shù)據(jù)總線。每個存儲器塊都有其相對獨(dú)立的片選控制。每個存儲器塊都能夠獨(dú)立配置。時序可以編程從而能支持各種不同的器件:總線恢復(fù)周期能編程(高達(dá)15個周期)、等待周期能編程(高達(dá)15個周期)、寫使能延遲和輸出使能可編程(高達(dá)15個周期)、相對獨(dú)立的讀寫時序和協(xié)議,還能夠支持寬范圍的存儲器和時序。PSRAM和SRAM器件使用的寫使能和字節(jié)選擇輸出。將32位的AHB訪問請求,轉(zhuǎn)換到連續(xù)是8位或16位的,對外部8位或16位器件的訪問。擁有16個字節(jié),每個字節(jié)32位寬的寫入FIFO,可以在寫入較慢存儲器時釋放AHB進(jìn)行其具體操作。在重新開始一次新的FSMC操作之前,要把FIFO先清空。3.5整體系統(tǒng)硬件設(shè)計(jì)3.5.1單片機(jī)設(shè)計(jì)如圖3.3,是STM32F103ZET6的最小系統(tǒng)原理圖,10K電阻接一個復(fù)位引腳NRST到VCC,再接一個104的電容到地,這樣即可構(gòu)成上電復(fù)位的電路。OSC_OUT和OSC_IN中間并聯(lián)一個8MHz的晶振,再在晶振的兩端分別接上20pF的電容到地,這樣即可構(gòu)成單片機(jī)的外部振蕩電路。 圖3.3STM32F103ZET6的最小系統(tǒng)原理圖3.5.2電源部分設(shè)計(jì)整個系統(tǒng)由電腦的USB接口供電,再由系統(tǒng)中的AMS1117—3.3穩(wěn)壓芯片降壓到3.3V,供給單片機(jī)和觸屏系統(tǒng)應(yīng)用。電路圖如圖3.4所示。圖3.4電源設(shè)計(jì)的電路圖3.5.3單片機(jī)和觸摸屏接口設(shè)計(jì)系統(tǒng)的觸摸屏接口如圖3.5所示。各引腳定義如下:LCD_CS:TFTLCD片選信號。LCD_RD:從TFTLCD讀取數(shù)據(jù)。LCD_WR:向TFTLCD寫入數(shù)據(jù)。LCD_D[15:0]:16位雙向數(shù)據(jù)線。LCD_BL:觸摸屏背光源的控制引腳。RESET:硬復(fù)位TFTLCD。LCED_RS:命令/數(shù)據(jù)標(biāo)志(0,讀寫命令;1,讀寫數(shù)據(jù))。T_SCK:觸摸屏?xí)r鐘信號端。T_CS:觸摸屏片選端。T_MOSI:觸摸屏串行數(shù)據(jù)輸入端。T_MISO:觸摸屏串行數(shù)據(jù)輸出端。T_PEN:觸摸屏中斷輸出端。圖3.5系統(tǒng)的觸摸屏接口圖第4章軟件設(shè)計(jì)4.1系統(tǒng)各個模塊初始化系統(tǒng)在復(fù)位或上位之后,最先進(jìn)行的就是系統(tǒng)各個模塊的初始化,其各個模塊的初始化流程圖如圖4.1所示:開始開始系統(tǒng)初始化系統(tǒng)初始化延時初始化延時初始化LCD初始化LCD初始化觸摸屏初始化觸摸屏初始化顯示計(jì)算器的輸入界顯示計(jì)算器的輸入界計(jì)算結(jié)果計(jì)算結(jié)果圖4.1各個模塊的初始化流程圖4.2顯示模塊程序設(shè)計(jì)LCD初始化流程圖如圖4.2所示:開始開始設(shè)置IO口設(shè)置IO口向LCD寫入初始程序向LCD寫入初始程序開啟背光源開啟背光源圖4.2LCD初始化流程圖4.3觸摸模塊程序設(shè)計(jì)首先要由單片機(jī)進(jìn)行檢測觸摸屏是否已經(jīng)校準(zhǔn),如果沒有校準(zhǔn),那么將進(jìn)入校準(zhǔn)模式進(jìn)行校準(zhǔn)。觸摸屏模塊初始化流程圖如圖4.3所示:開始開始屏幕是否已校準(zhǔn)屏幕是否已校準(zhǔn)否按鍵是否按下是按鍵是否按下是設(shè)置IO口設(shè)置IO口清屏否清屏圖4.3觸摸屏模塊初始化流程圖4.4實(shí)現(xiàn)運(yùn)算表達(dá)式的程序設(shè)計(jì)程序設(shè)計(jì)流程圖如圖4.4所示:開始開始字符是否為“(”字符是否為“(”是否字符是否為數(shù)字字符是否為數(shù)字是否下一個字符是“+”“—”或“*”“/”下一個字符是“+”“—”或“*”“/”把累加數(shù)組所有節(jié)點(diǎn)進(jìn)行累加,返回計(jì)算結(jié)果把數(shù)字添加到累加組遞歸,返回括號里結(jié)果把累加數(shù)組所有節(jié)點(diǎn)進(jìn)行累加,返回計(jì)算結(jié)果把數(shù)字添加到累加組遞歸,返回括號里結(jié)果把結(jié)果替換累加數(shù)組最后一個節(jié)點(diǎn)是把結(jié)果替換累加數(shù)組最后一個節(jié)點(diǎn)字符是否為“+”或“—”字符是否為“+”或“—”結(jié)束結(jié)束提取累加數(shù)組最后一個元素,調(diào)用否提取累加數(shù)組最后一個元素,調(diào)用是下一個字符是否為數(shù)字下一個字符是否為數(shù)字是設(shè)置tmp.point為(表示異常),返回否設(shè)置tmp.point為(表示異常),返回字符是否為“(”字符是否為“(”是圖4.4程序設(shè)計(jì)流程圖第5章系統(tǒng)調(diào)試校準(zhǔn)界面如圖5.1所示;當(dāng)把程序燒進(jìn)板子時,會出現(xiàn)校準(zhǔn)頁面,經(jīng)校準(zhǔn)后才能進(jìn)入計(jì)算頁面。圖5.1校準(zhǔn)界面圖進(jìn)入界面如圖5.2所示:圖5.2進(jìn)入界面圖簡單的四則運(yùn)算表達(dá)式運(yùn)算,精確到小數(shù)點(diǎn)后六位,如圖5.3所示:圖5.3表達(dá)式運(yùn)算圖當(dāng)輸入錯誤的表達(dá)式時,會自動報(bào)錯(error后的數(shù)字是本項(xiàng)目的小bug),如圖5.4和圖5.5所示:圖5.4自動報(bào)錯圖圖5.5自動報(bào)錯圖
總結(jié)回顧這半個月的時間,在這段時間里,從簡單的了解單片機(jī)到后來能熟練的應(yīng)用到自己的項(xiàng)目中,自己感覺很是欣慰,收獲了不小的成就。隨著信息科學(xué)技術(shù)的飛速發(fā)展,高科技產(chǎn)品也越來越多樣化,從而使我們的生活條件也取得的質(zhì)的改善。而單片機(jī)只是這方面的一小部分,還有更多的東西需要我們?nèi)W(xué)習(xí)。本次實(shí)驗(yàn)中,由于本人能力有限,只設(shè)計(jì)了一個簡單的計(jì)算器,只能夠簡單的“+”、“-”、“*”、“/”、“㎡”和“√”,而且在進(jìn)行減法運(yùn)算時,只能夠大數(shù)減小數(shù),未能做到顯示負(fù)數(shù),在進(jìn)行開方和除法運(yùn)算時,只能進(jìn)行整數(shù)計(jì)算,無法顯示小數(shù)部分。在使用EMWIN設(shè)計(jì)界面時,也只是用到了它的基本顯示函數(shù),未能深入的使用到其它更為有效的函數(shù)。
參考文獻(xiàn)[1]李法春.單片機(jī)原理及接口案例教程[M].北京.機(jī)械工業(yè)出版社,2006.[2]彭剛.基于ARMCortex-M3的STM32系列嵌入式微控制器應(yīng)用實(shí)踐[M].北京.電子工業(yè)出版社,2011.[3]王永虹.STM32系列ARMCortex-M3核微控制器原理與實(shí)踐[M].北京.北京航空航天大學(xué)出版社,2009.[4]劉波文.ARMCortex-M3應(yīng)用開發(fā)實(shí)例詳解[J].北京.電子工業(yè)出版社,2011.[5]JosephYiu.ARMCortex-M3權(quán)威指南[M].北京.北京航空航天大學(xué)出版社,2009.[6]劉軍.STM32[M].北京.北京航空航天大學(xué)出版社,2011.[7]王麗濱,趙云鵬.基于STM32科學(xué)計(jì)算器系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].衛(wèi)星電視與寬帶多媒體,2020(07):68-69.[8]孫業(yè)友.船用天文定位計(jì)算器的研制[D].天津理工大學(xué),2015.[9]周孟強(qiáng),魏遠(yuǎn)江,李剛.基于單片機(jī)控制的數(shù)字計(jì)算器[J].電子制作,2018(07):77-79.附錄主程序:#include"stm32_sysclk.h"#include"stm32_common.h"#include"stm32_led.h"#include"stm32_key.h"#include"stm32_buzzer.h"#include"stm32_exti.h"#include"stm32_usart.h"#include"stm32_lcd.h"#include"stm32_sram.h"#include"stm32_touchpad.h"#include"stm32_game.h"#include"stm32_calculator.h"intmain(void){ Sysclk_Init(9); _Delay_Init(72); Nvic_Set_Group(0); Led_Init(); Usart1_Init(72,115200); Lcd_Init(); Tp_Init(); Calculator_Init(); Show_Calculator(); return0; }/******************************Function: Tp_Adjust*Description:屏幕校準(zhǔn)*Input:NULL*Output:NULL*Return:成功返回0否則返回非0*Others:NULL*****************************/u8Tp_Adjust(void){ u16pos_temp[4][2];//存放4個調(diào)試點(diǎn)的坐標(biāo)值X和Y的數(shù)組 u8cnt=0;//記錄數(shù)組的行 u16d1,d2; u32tem1,tem2; floatfac; u16outtime=0; cnt=0;Lcd_Clear_All(WHITE);//清屏 Tp_Draw_Adjustpoint(20,20,&Adjust_pen); Lcd_Display_String(100,120,(char*)"ClickTheAdjustPointToAdjustTouchPad.",&Adjust_pen); Tpad_param.penStat=0;//消除觸發(fā)信號// Tpad_param.xfac=0;//xfac用來標(biāo)記是否校準(zhǔn)過,所以校準(zhǔn)之前必須清掉!以免錯誤 while(1)//如果連續(xù)10秒鐘沒有按下,則自動退出 { Tp_Scan(touchpad_add);//掃描物理坐標(biāo) if(Adjust_flag==1)//可以進(jìn)行測試操作,即按鍵滿足了(按下-抬起)的操作 { outtime=0; Adjust_flag=0;//測試標(biāo)志位清0 pos_temp[cnt][0]=Tpad_param.currX; pos_temp[cnt][1]=Tpad_param.currY;//記錄測試點(diǎn)的坐標(biāo) cnt++; switch(cnt) { case1: //得到了第1個測試點(diǎn) Tp_Draw_Adjustpoint(20,20,&Clear_adjust_pen);//清除點(diǎn)1 Tp_Draw_Adjustpoint(460,20,&Adjust_pen);//畫點(diǎn)2 break; case2://得到了第2個測試點(diǎn) Tp_Draw_Adjustpoint(460,20,&Clear_adjust_pen);//清除點(diǎn)2 Tp_Draw_Adjustpoint(20,300,&Adjust_pen);//畫點(diǎn)3 break; case3: //得到了第3個測試點(diǎn) Tp_Draw_Adjustpoint(20,300,&Clear_adjust_pen);//清除3 Tp_Draw_Adjustpoint(460,300,&Adjust_pen);//畫點(diǎn)4 break; case4: //4個測試點(diǎn)的坐標(biāo)值已經(jīng)全部獲取 //對邊相等 tem1=abs(pos_temp[0][0]-pos_temp[1][0]);//x1-x2 tem2=abs(pos_temp[0][1]-pos_temp[1][1]);//y1-y2 tem1*=tem1; tem2*=tem2; d1=sqrt(tem1+tem2);//得到1,2的距離 tem1=abs(pos_temp[2][0]-pos_temp[3][0]);//x3-x4 tem2=abs(pos_temp[2][1]-pos_temp[3][1]);//y3-y4 tem1*=tem1; tem2*=tem2; d2=sqrt(tem1+tem2);//得到3,4的距離 fac=(float)d1/d2; if(fac<0.95||fac>1.05||d1==0||d2==0)//不合格 { cnt=0;//一定注意要清0,重新開始調(diào)試 Tp_Draw_Adjustpoint(460,300,&Clear_adjust_pen);//清除點(diǎn)4 Tp_Draw_Adjustpoint(20,20,&Adjust_pen);//畫點(diǎn)1 continue;//直接跳出本次while循環(huán),重新開始調(diào)試 } tem1=abs(pos_temp[0][0]-pos_temp[2][0]);//x1-x3 tem2=abs(pos_temp[0][1]-pos_temp[2][1]);//y1-y3 tem1*=tem1; tem2*=tem2; d1=sqrt(tem1+tem2);//得到1,3的距離 tem1=abs(pos_temp[1][0]-pos_temp[3][0]);//x2-x4 tem2=abs(pos_temp[1][1]-pos_temp[3][1]);//y2-y4 tem1*=tem1; tem2*=tem2; d2=sqrt(tem1+tem2);//得到2,4的距離 fac=(float)d1/d2; if(fac<0.95||fac>1.05)//不合格 { cnt=0;//一定注意要清0,重新開始調(diào)試 Tp_Draw_Adjustpoint(460,300,&Clear_adjust_pen);//清除點(diǎn)4 Tp_Draw_Adjustpoint(20,20,&Adjust_pen);//畫點(diǎn)1 continue;//直接跳出本次while循環(huán),重新開始調(diào)試 }//正確了 //對角線相等 tem1=abs(pos_temp[1][0]-pos_temp[2][0]);//x1-x3 tem2=abs(pos_temp[1][1]-pos_temp[2][1]);//y1-y3 tem1*=tem1; tem2*=tem2; d1=sqrt(tem1+tem2);//得到1,4的距離 tem1=abs(pos_temp[0][0]-pos_temp[3][0]);//x2-x4 tem2=abs(pos_temp[0][1]-pos_temp[3][1]);//y2-y4 tem1*=tem1; tem2*=tem2; d2=sqrt(tem1+tem2);//得到2,3的距離 fac=(float)d1/d2; if(fac<0.95||fac>1.05)//不合格 { cnt=0;//一定注意要清0,重新開始調(diào)試 Tp_Draw_Adjustpoint(460,300,&Clear_adjust_pen);//清除點(diǎn)4 Tp_Draw_Adjustpoint(20,20,&Adjust_pen);//畫點(diǎn)1 continue;//直接跳出本次while循環(huán),重新開始調(diào)試 }//正確了 Tpad_param.xfac=(float)(480-40)/(pos_temp[1][0]-pos_temp[0][0]);//得到xfac--x方向的觸摸地址與屏幕地址的比例系數(shù) printf("%f\r\n",Tpad_param.xfac);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 掛車司機(jī)合同范本
- 改造安裝合同范本
- 商場買賣合同范本
- 垃圾拉運(yùn)合同范本
- 培訓(xùn)生安全協(xié)議書
- 基金電子合同范本
- 墻磚鋪貼合同范本
- 山西特崗協(xié)議書
- 拼多多理賠協(xié)議書
- 換貨合同協(xié)議模板
- 廣東省廣州市越秀區(qū)2024-2025學(xué)年上學(xué)期期末考試九年級數(shù)學(xué)試題
- 課標(biāo)考試2025年版《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)》測試卷試題庫(和答案)
- DL∕T 5210.6-2019 電力建設(shè)施工質(zhì)量驗(yàn)收規(guī)程 第6部分:調(diào)整試驗(yàn)
- 高中物理學(xué)業(yè)水平測試常用公式及知識點(diǎn)
- 肝膽科學(xué)科發(fā)展規(guī)劃
- 2024年保安員資格考試初級理論知識試題庫及答案(共290題)
- 心腦血管疾病的健康管理
- 2024年浙江省大學(xué)生物理競賽
- 普通診所污水、污物、糞便處理方案 及周邊環(huán)境情況說明
- 國開02150-計(jì)算機(jī)網(wǎng)絡(luò)(本)機(jī)考復(fù)習(xí)資料
- 設(shè)計(jì)變更通知單四篇
評論
0/150
提交評論