




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
基于ARM的計算器設(shè)計摘要通過Sourceinsight4.0進行c++語言代碼的編寫,使用Linux提供的文件IO操作ARM開發(fā)板的屏幕顯示和觸摸板進行輸入。計算器的實現(xiàn)通過兩個棧。一個數(shù)據(jù)棧、一個符號棧、來實現(xiàn)一個能連續(xù)加減乘除并且能夠進行高精度計算的計算器,并且具有基本的清屏功能。能夠自由的關(guān)閉或者開啟按鍵聲音。最終成品實在ARM開發(fā)板上進行運行,使用的c語言在Linux平臺下編寫調(diào)試然后交叉編譯。關(guān)鍵詞:Linux;文件IO;目錄TOC\o"1-3"\h\u摘要 I1緒論 11.1課題來源 11.2課題目的與意義 11.3國內(nèi)外研究現(xiàn)狀 22系統(tǒng)方案設(shè)計 32.1設(shè)計要求 32.2軟件設(shè)計方案 32.2.1軟件方案 32.2.2顯示屏方案 42.2.3數(shù)據(jù)和符號存儲方案 52.3程序設(shè)計思路 53硬件設(shè)計 73.1芯片選用 73.2核心板選用 73.3接口選用 83.4LCD選用 84軟件系統(tǒng)設(shè)計 94.1界面模塊設(shè)計 104.2顯示屏設(shè)計 104.3按鍵聲音設(shè)計 115系統(tǒng)仿真 115.1制作Makefile 115.2交叉編譯 126代碼編譯 137實物制作與調(diào)試 147.1界面測試 147.2觸摸屏測試 157.3高精度算法測試 167.4優(yōu)先級算法測試 167.5音頻模塊測試 157.6計算器綜合測試 188總結(jié) 19參考文獻 21
1緒論課題來源計算器是我們?nèi)粘I钪斜容^常用,也是比較好用的計算工具。多年來,計算器制作工藝,計算器功能的飛速發(fā)展。朝著智能化、高精度、方便攜帶、方便操作、減小大小的方向飛速發(fā)展。市面上出現(xiàn)了各種各樣的計算器,在各個領(lǐng)域被廣泛的使用。電子計算器,在一定程度上解放了人們對計算的腦力運動,在生活中遇見比較繁瑣的計算時,都可以使用計算器來完成。相比人腦計算,我國古時候的珠算,更為方便,快捷。沒有太復(fù)雜的使用技巧。上手也十分的簡單。不需要經(jīng)過系統(tǒng)的學(xué)習(xí)培訓(xùn),也能快速的掌握計算器的使用技巧。完成自己需要的運算功能。相比于國外一些知名品牌的計算器。我國自己研發(fā)生產(chǎn)的計算器還沒有達到他們的水平。但是面對市場對計算器的剛需。已經(jīng)進入了高速發(fā)展的階段。曾經(jīng)我國的芯片制作工藝,很大程度的限制了計算器的發(fā)展。經(jīng)過我國多年的努力,這一限制我國工藝發(fā)展的難題已經(jīng)被逐步克服。但是國產(chǎn)化的計算器芯片任然存在價格昂貴和功能擴展不足的體驗。所以說我國的計算器的發(fā)展確實還存在著很多需要克服的問題。1.2課題目的與意義目的:利用裝載了Linux系統(tǒng)的ARM開發(fā)板,編寫軟件實現(xiàn)能夠進行高精度計算的計算器,研究Linux系統(tǒng)的特性,軟件能正常運轉(zhuǎn)。意義:現(xiàn)存的計算器一般都只實現(xiàn)一個運算符一個運算符的計算而且只支持九位數(shù)以下的運算,對大數(shù)的計算無法實現(xiàn),對一些需要連續(xù)計算的需求完成起來十分的麻煩,要多次的計算,當(dāng)所有運算符計算完,還需要回去查看運算結(jié)果進行總匯,其中計算器大部分只能實現(xiàn)九位數(shù)以下的數(shù)據(jù)運算,使用起來有很大的局限性。因為九位數(shù)是系統(tǒng)int類型的存儲極限如果想實現(xiàn)九位數(shù)以上的數(shù)據(jù)算就只能使用其他的存儲方式,比如可以開一個很大很大的字符串?dāng)?shù)組存儲數(shù)據(jù)的方式。使用這些存儲方式底層代碼會復(fù)雜很多,但在使用體驗上會有很大提升。通過本課題將大學(xué)所學(xué)的知識運用到實際生活中,實現(xiàn)高精度計算器的各種功能。1.3國內(nèi)外研究現(xiàn)狀我國產(chǎn)品市場的威脅主要來自產(chǎn)品質(zhì)量的不穩(wěn)定、技術(shù)創(chuàng)新能力十分的薄弱,與外國知名品牌相比,存在一定差距。曾經(jīng)我國計算器發(fā)展相對歐美日本那些國家來說,發(fā)展比較緩慢的主要原因就是我國的芯片制作、生產(chǎn)、研發(fā)速度還有有所欠缺。所以存在著很多問題:比如我國的芯片相對于國外來說,制作成本更高、搭載功能相對沒有國外完善。但是經(jīng)過我國多年的不屑努力,芯片的研發(fā)、制作工藝被提上日程。我國的芯片近幾年來進入飛速發(fā)展時期,已經(jīng)慢慢拉近了與國外的拉鋸。中國計算器也進入了告訴發(fā)展時期,市面上出現(xiàn)了各種各樣的計算器。功能也越來越完善,使用起來也越來越智能。但目前的主要方向是轉(zhuǎn)向技術(shù),打破技術(shù)和生產(chǎn)的障礙,生產(chǎn)頂級計算器,擴大中國計算器市場的份額。提高計算器產(chǎn)品的性能,提高消費者的認(rèn)可。
2系統(tǒng)方案設(shè)計2.1設(shè)計要求(1)完成軟件界面的設(shè)計。合理的分配屏幕大?。?)完成高精度加減乘除算法。能完成100位以下的大數(shù)運算(3)完成運算符優(yōu)先級算法。能在屏幕上進行連續(xù)加減乘除的運算。(4)完成觸摸屏顯示屏的校準(zhǔn)調(diào)試。能在按下相應(yīng)按鍵后,在輸出模塊上正確的顯示。(5)完成按鍵的音頻功能。能在按下按鍵后,正確的播放音頻(6)軟件可以正常的運行。能正常的進行大數(shù)運算并在屏幕上顯示結(jié)果。2.2軟件設(shè)計方案2.2.1軟件方案方案:通過兩個棧來實現(xiàn)計算器計算時的優(yōu)先級,一個棧存儲數(shù)據(jù),一個棧存儲符號,數(shù)據(jù)棧內(nèi)的每個節(jié)點存儲數(shù)字使用的是字符串?dāng)?shù)組,我們可以初始化的時候,開一個很大很大的字符串?dāng)?shù)組,來完成大數(shù)的存儲,然后運算符的優(yōu)先級,我們可以將一個數(shù)據(jù)節(jié)點壓入棧中,然后判斷數(shù)據(jù)后面的符號,如果是乘與除,我們就將前面壓入棧里的節(jié)點取出,然后將節(jié)點里的數(shù)據(jù)沖字符串轉(zhuǎn)化為整數(shù),使用自己編寫的算法進行運算。之后使用ARM開發(fā)板的系統(tǒng)IO來操作顯示屏和觸摸板來進行顯示和輸入,設(shè)計的過程中使用的是ARM開發(fā)板配套的系統(tǒng)IO,所以沒有考慮到移植性的問題。主要思考的問題是實現(xiàn)高精度模板和觸摸輸入去完成一個計算器。系統(tǒng)框圖如下所示:圖2.1系統(tǒng)框圖2.2.2顯示屏方案方案:可以使用使用ARM提供的系統(tǒng)IO:open函數(shù)通過打開文件的形式來打開顯示屏和觸摸屏,再使用特定的函數(shù)獲取顯示屏和觸摸屏的信息存儲在特定的結(jié)構(gòu)體里面。通過獲取的信息我們知道ARM開發(fā)板的顯示屏大小為800*480,將顯示屏使用映射操作,映射到用戶的虛擬內(nèi)存空間,這樣可以直接通過指針操作虛擬內(nèi)存空間去操作顯示屏,大大提高了顯示的效率,如果不適用映射,我們需要平凡的使用read和write函數(shù)深入內(nèi)核去操作,效率十分的低。把框架使用Windows自帶的3D畫圖將界面的框架畫出來,做成800*480的bmp圖片,因為要契合我們使用的顯示屏大小,如果圖片他大會導(dǎo)致顯示不出來,如果圖片太小會導(dǎo)致屏幕出現(xiàn)有部分黑框的現(xiàn)象不美觀,所以使用3D畫圖畫框架的時候要使用函數(shù)先獲取屏幕大小,再去畫圖。針對bmp圖片,他是完整的圖片格式,無需解壓操作,所以能省去解壓的步驟,使用起來更方便。如果使用jpg的格式就需要在ARM開發(fā)板內(nèi)植入解壓庫去完成解壓。會變得十分復(fù)雜。首先在屏幕上面顯示輸入輸出框架:(1)輸出框:實現(xiàn)大數(shù)的運算為了能有更好顯示完成運算過程,使用三分之一的屏幕進行顯示。(2)輸入框:使用觸摸屏進行輸入,包含常用的運算符和零至十阿拉伯?dāng)?shù)還有清屏按鍵,使用戶能正常使用觸摸屏輸入。使用四三分之二的屏幕進行顯示。顯示屏的具體布局設(shè)計如下:圖2.3計算器界面布局圖2.2.3數(shù)據(jù)和符號存儲方案數(shù)字和符號我準(zhǔn)備使用兩個棧來存放,在數(shù)據(jù)棧的節(jié)點中我們可以開辟一個非常大的字符串?dāng)?shù)組,以字符串的形式來存儲數(shù)字,字符串的形式存儲可以方便獲取整數(shù)的位數(shù),方便后續(xù)的運算符算法的編寫。符號則直接使用符號棧存儲。節(jié)點為一個個帶有運算符號的節(jié)點。2.3程序設(shè)計思路方案一:提供sin、cos、二進制轉(zhuǎn)換等一些功能。但無法這些功能無法提供高精度計算。與預(yù)期的高精度關(guān)鍵字計算器不符合。觀察計算機自帶的計算器,發(fā)現(xiàn)這些功能都有提供。現(xiàn)有的計算器也大多支持這些功能。而且屏幕并不是很大,要使用觸摸屏進行輸入,顯示屏進行顯示。添加這些功能會顯得計算器輸入模塊比較臃腫,操作起來更為復(fù)雜。需要閱讀比較詳細的說明書。方案二:提供高精度算法。優(yōu)化屏幕按鍵分布,優(yōu)化輸出模塊的屏幕分布,提供20位、30位的大數(shù)運算。使用字符串?dāng)?shù)組,開辟一個很大內(nèi)存來存儲數(shù)據(jù),進行小數(shù)運算時會比較浪費內(nèi)存空間,但可以進行計算機自帶的計算器、市面上的計算器沒有提供的大數(shù)運算。進行比較之后,我放棄了一些計算器功能,提供高進度算法,進行加減乘除的大數(shù)運算,優(yōu)化屏幕中的輸入輸出模塊分布,最終選擇使用方案二。
3硬件系統(tǒng)設(shè)計3.1芯片選用本設(shè)計的芯片選用的是三星的Cortex-A53架構(gòu)的S5P6818芯片。 S5P6818是現(xiàn)在比較前衛(wèi)的芯片。采用的是27nm制作工藝。具有8核心A53ARM高性能構(gòu)架。使用起來相當(dāng)順暢,不會有卡頓感。在Lcd液晶顯示屏上,搭載了LVDS還有tgb雙路接口,顯示屏得分辨率可以達到2048*1280。刷新率也可以達到60Hz。Arm有很多系列:a系列、R系列還有M系列等等。其中,Armcortex-a系列側(cè)重于性能,使用a系列的芯片,對用戶的使用體驗是巨大的。而且a系列主要針對基于虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用程序比如:linux。主要應(yīng)用方向有:音頻播放器、視頻播放器、小數(shù)閱讀器等等;Armcortex-b系列則更注重實時性,可以進行大量的實時操作,主要是用在深嵌入式實時應(yīng)用。主要應(yīng)用有:汽車制動系統(tǒng)控制、動力傳動解決方案、數(shù)據(jù)的存儲器等。實時;Rmcortex-m系列是面向微控制處理器的,它的處理器設(shè)計成面積小并且效率搞的模型。能以最少的門目和盡可能的功耗快速執(zhí)行和高確定性的中斷管理。本設(shè)計的芯片就是Armcortex-a系列芯片。3.2核心板選用核心PCB我選用的是aemcortex-a53的核心板,它的性能十分的穩(wěn)定。抗干擾性和導(dǎo)電性能都十分優(yōu)越。同時,它采用了28nm的制作工藝。在多媒體的解碼的性能上表非常十分的出色,幾乎支持所有格式的視頻、音頻和圖片的解碼。它在嵌入式平臺上有著非常出色的性能,能夠完美的展現(xiàn)芯片的眾多功能,大大縮短了用戶的開發(fā)周期。28nm的制作工藝讓其可以擁有很好的布局條件。PCB板可以去嘗試搭載更多更為復(fù)雜的線路。產(chǎn)品具有很高的穩(wěn)定性,能連續(xù)開機幾天幾夜不會出現(xiàn)死機的現(xiàn)象。已經(jīng)擁有完整的生產(chǎn)流水線,價格相對實惠,不會出現(xiàn)缺貨的現(xiàn)象導(dǎo)致計算器無法生產(chǎn)。圖3.1核心板圖S5P6818核心板具有以下特性:擁有比較完美的尺寸大小,在滿足了精細的焊接工藝的同時還能完美的處理Gpio的接口;采用axp228PMU電源管理設(shè)計,運行穩(wěn)定可靠,成本低;可以電源休眠喚醒;可以連接千兆網(wǎng)線;可以通過Linux、android5.1、Ubuntu等平臺完成代碼的編譯然后移植到板子;3.3接口選用開發(fā)板預(yù)留了很多的接口,我選用的是RS232串口,它就是UART0。UART0接口有需要可以使用轉(zhuǎn)接線完成接口的轉(zhuǎn)換,使用起來非常方便。而且具備比較完善的串口功能。是用的比較多的串口。圖3.2UART0圖3.4LCD選用本次設(shè)計使用的是LCD屏幕,液晶屏幕是由800*480的點陣組成。進行圖片顯示時,我們時通過獲取到屏幕信息和圖片信息后,將圖片一個一個像素點我在屏幕上畫出來的。圖3.3LCD電容觸摸屏圖4軟件系統(tǒng)設(shè)計本次設(shè)計的程序設(shè)計是在Windows的Sourceininsight平臺上用C++語言進行編寫的,在Linux系統(tǒng)的Ubuntu中完成本次程序設(shè)計的編譯與下載。本次設(shè)計使用的開發(fā)板是GEC6818,裝載的Linux系統(tǒng)。本次設(shè)計的所有功能都會在這個開發(fā)板上實現(xiàn)。圖4.1GEC6818開發(fā)板實物圖4.1界面模塊設(shè)計打開ARM開發(fā)板,運行已經(jīng)編譯好的main文件,可以看見計算器的輸入輸出顯示界面,采用的是觸摸輸入的操作,所以只需要點擊想要進行的操作,即可進行數(shù)字,符號的輸入,計算結(jié)果等。界面的顯示有兩種方案:方案一:繪制大小與顯示板大小一樣的圖片來顯示,每次按下清屏鍵,使用繪制的圖片直接覆蓋界面,實現(xiàn)清屏操作。方案二:直接操作像素點去覆蓋輸出模塊,將輸出模塊像素點顏色置換為白色,實現(xiàn)清屏操作。比較下兩個方案:方案一和方案二,我發(fā)現(xiàn)二方案會相對于一方案來說更快。直接操作像素點去改變?yōu)榘咨珪确桨付旖?,因為方案一要實現(xiàn),我們先要去把讀取過的圖片信息重新處理一邊,當(dāng)然也可以提前保存圖片的信息。然后才能去通過圖片的信息去操作屏幕點陣,使其還原成初始進入計算器的樣子。如果只考慮效率的問題。我會選擇方案一。但是方案二要使用的話,會大大加大程序的代碼量,而且后續(xù)代碼修改和優(yōu)化也會比較麻煩。而使用方案一,我們只需要把之前的屏幕顯示模塊再運行一次。就可以完成清屏操作。不需要添加太多代碼。只需要調(diào)用之前完成過的程序接口就能完成。而且,二方案提升的效率,我們?nèi)说娜庋凼菬o法分辨的,稍稍提高的那點效率并不能讓人覺得更為流暢。S5P6818核心板的優(yōu)秀性能完全可以做到切換屏幕顯示的圖片讓人感覺是一閃而逝,也不需要擔(dān)心處理太慢的問題。4.2顯示屏設(shè)計進入計算器后先刷新屏幕,將做好的界面圖片再屏幕上進行顯示。然后會打開觸摸屏,對用戶的點擊位置進行獲取,獲取到對應(yīng)的點擊位置之后ARM開發(fā)板會進行對應(yīng)的操作。我們把計算器的輸入模塊觸摸點分為一下三類。第一種是數(shù)字觸摸點:進行的是數(shù)字的輸入,包括零到九是個數(shù)字可以輸入。第二種是運算符操作觸摸點,進行的是輸入數(shù)學(xué)的運算符號輸入,包括加減乘除等運算符。第三個是功能觸摸點,進行的是計算機其他功能的操作,比如清屏操作。顯示樣式如下:圖4.3計算器顯示圖4.3按鍵聲音設(shè)計為了方便辨別按鍵是否按下,我添加了開啟/關(guān)閉按鍵聲音的功能,如果覺得不喜歡可以使用界面上的SD按鍵關(guān)閉按鍵聲音模塊。為了能使計算器同時運行輸入功能和音頻功能,所以需要再進程中重新開啟一個線程,去處理音頻的播放。這里我使用的時mplary解碼器,只需要開啟一個線程,然后去通過指令進行音頻的播放就行了。5系統(tǒng)仿真與測試5.1制作Makefile一個工程中源文件多而復(fù)雜,每次修改之后都需要gcc重新編譯,要連接很多的源文件,會十分的不方便。而且可能會按類型、功能、模塊等區(qū)分之后放在不同的目錄中,這樣我們每次修改源文件后,重新編譯起來會十分的麻煩。所以我們需要制作一個Makefile來簡化編譯過程。當(dāng)一個工程完成了Makefile的編寫后??梢灾苯釉诮K端上敲擊make,就能直接一次性完成Makefile文件中所編寫好的指令。使用起來十分的方便,可以簡化編譯過程。只要源文件名沒有改動,后續(xù)對源文件內(nèi)容進行改動后。我們只需要敲擊makeclean就能刪除之前編譯出來的.out文件。然后敲擊make,就行完成新的編譯。要進行Makefile的編寫,我們先需要在工程文件目錄下建立一個名字Makefile的文件。然后在Makefile文件中,我們可以根據(jù)一些特定的規(guī)則去編寫可以進行源文件的處理、編譯、匯編、鏈接等操作的指令。5.2交叉編譯我們使用的ARM開發(fā)板并沒有搭載編譯器,所以我們時使用sourceinsight4.0進行代碼的編寫,使用ubuntu進行交叉編譯。然后再將編譯好的文件通過tftp協(xié)議移植到開大坂上信息運行的。編譯器的具體版本如下圖所示:圖5.1編譯器版本通過make進行交叉編譯后,代碼沒有報錯也沒有警告,編譯通過。可以去測試計算器功能是否能正常運行了。
6代碼測試7實物制作與調(diào)試先使用較小的數(shù)字去測試計算器加減乘除運行結(jié)果是否正確。如果正確,再使用較大的數(shù)去測試運行結(jié)果是否正確。如果正確,最后測試下運行的極限是多少位。7.1界面測試計算器的測試主要是看界面的圖片的顯示以及觸摸屏是否能正常工作。測試時先使用的圖片編寫好的顯示屏處理源文件單獨拿出來運行。因為只測試界面是否能正常顯示,只需要將部分代碼編譯運行后測試下就可以了。測試時發(fā)現(xiàn)的第一個問題:每次清屏?xí)r會發(fā)現(xiàn)有閃屏的現(xiàn)象。進入屏幕圖片顯示的源代碼文件,刪除自己編寫的放在圖片顯示前面,將屏幕像素點全部置換為白色的函數(shù)去掉之后沒有再發(fā)生閃屏。7.2觸摸屏測試 測試計算器的觸摸模塊是否正確運行,需要將已經(jīng)測試完畢的圖形界面和還未測試的觸摸屏模塊進行編譯和交叉開發(fā),移植到ARM開發(fā)板上進行測試。測試時發(fā)現(xiàn)了第二個問題:界面的按鍵和觸摸點匹配有問題。數(shù)字三的觸摸點偏左,沒有和圖形界面的數(shù)字三校準(zhǔn),所以需要停止測試程序的運行,將設(shè)置的觸摸按鍵進行調(diào)整,更改觸摸點的范圍設(shè)置。需要進入觸摸屏模塊,更改獲取觸摸屏信息后,輸入數(shù)字三的功能位置。 經(jīng)過多次測試和校準(zhǔn),完成了圖形界面數(shù)字三的顯示位置,和觸摸點的正確觸摸位置。 圖6.5寫字板測試圖7.3高精度算法測試完成了前面的觸摸屏和圖形界面的測試。進行高精度算法的模塊測試,我們需要把前面已經(jīng)完成的兩項測試和高精度算法模塊一起拿出來進行測試。我們先進行較小的數(shù)字運算,發(fā)現(xiàn)當(dāng)我進行相加運算的時候出現(xiàn)了問題。發(fā)現(xiàn)第三個問題:計算的結(jié)果顯示為一個出錯的數(shù)。我使用的是字符串來存儲數(shù)字,所以相加時我需要先將存儲再棧中的字符串取出來,然后轉(zhuǎn)化成整數(shù)。再進行相加運算。再字符串轉(zhuǎn)化為整數(shù)時,我編寫的算法用的是將字符串?dāng)?shù)組最末尾的字符取出來減去字符‘0’就可以得到對應(yīng)位置的整數(shù)。然后每取出一個字符,將已經(jīng)得到的整數(shù)乘以十,再加上取出來被轉(zhuǎn)化成整數(shù)的單個字符。這樣我最后得到的完整整數(shù)就是倒敘的,所以產(chǎn)生的結(jié)果出現(xiàn)了問題。使用自己便寫的算法,將倒敘的整數(shù)更正后,計算結(jié)果正確。然后我使用了兩個偏大的數(shù)整數(shù)相加,結(jié)果發(fā)生了錯誤。發(fā)現(xiàn)第四個問題:計算的結(jié)果顯示為一個出錯的數(shù)?;氐礁呔人惴ǖ脑创a文件,思考過后發(fā)現(xiàn)自己開辟的字符串?dāng)?shù)組只允許50位字符串輸入,最后決定將開辟的字符串?dāng)?shù)組位數(shù)增加到10000位,問題解決。圖6.6相冊測試圖圖6.7鏈表功能測試圖根據(jù)圖6.7的結(jié)果可以看出鏈表的功能正常。綜上,相冊功能模塊的功能正常。7.4計算器運算符優(yōu)先級算法測試 將高精度算法加入了優(yōu)先級算法后,將顯示屏木塊、觸摸屏模塊和高精度算法模塊進行交叉編譯,寫入到ARM開發(fā)板進行測試。 通過輸入模塊輸入3+2*3+2后,出現(xiàn)問題。 發(fā)現(xiàn)第五個問題:計算器顯示結(jié)果為一個錯誤的數(shù)。 進入加入了優(yōu)先級的高精度算法。我發(fā)現(xiàn)有優(yōu)先級算法邏輯出現(xiàn)了問題,實現(xiàn)優(yōu)先級算法,我使用了兩個棧,一個數(shù)據(jù)棧存儲輸入的數(shù)字,一個邏輯棧存儲符號。當(dāng)遇見輸入的是數(shù)字時,將數(shù)字壓入數(shù)據(jù)棧中進行存儲。當(dāng)遇見的是符號時如果是加號,會直接壓入符號棧中,如果是乘除取余則直接進行運算,本來應(yīng)該如果遇見乘除,先將數(shù)據(jù)棧中的棧頂節(jié)點存儲的字符串轉(zhuǎn)化為整數(shù),再與下一位輸入進來的數(shù)進行乘除取余運算,因為邏輯上的錯我,我遇見乘除取余后,將后面輸入的2個數(shù)進行了運算。所以導(dǎo)致出錯。經(jīng)過修改后,運算結(jié)果正確。7.4音頻模塊測試 音頻模塊是配合觸摸屏,可以再觸摸按鍵后發(fā)出聲音提示已經(jīng)輸入。所以需要將顯示界面模塊、觸摸屏模塊還有音頻模塊拿出來交叉編譯后運行。 運行音頻模塊的過程中發(fā)現(xiàn)每次按下按鍵,都有正常的音頻輸出。音頻模塊能正常運行。7.5計算器綜合測試將代碼全部連接之后,使用make指令,進行代碼的編譯,使用tftp文件傳輸協(xié)議下載到ARM開發(fā)板上進行運行。進入了計算器的界面,發(fā)現(xiàn)界面顯示正常運行,之后我嘗試了所有按鍵的輸入,按個點擊一遍,觸摸屏的功能可以正常運行,使用小數(shù)進行了加減乘除和取余的基本運算,功能能可能夠正常運行。之后使用了2個大數(shù)進行加減乘除的運算,功能也沒有出現(xiàn)問題。然后我進行了按鍵的連續(xù)快速按下。發(fā)現(xiàn)了問題:按鍵按下后反應(yīng)速度不是很快,如果連續(xù)按動按鈕會出現(xiàn)輸入數(shù)組沒有輸入的情況。進入我編寫的觸摸板模塊源代碼,我發(fā)現(xiàn)代碼數(shù)量過多,并且按下按鍵后我使用了延遲函數(shù),設(shè)置的時0.5秒延遲。所以會出現(xiàn)連續(xù)快速按動時出現(xiàn)問題,我將代碼進行了優(yōu)化后,將延遲函數(shù)更改位0.2秒后。再次編譯,運行代碼。問題解決。圖6.8為運行計算器運行的樣子,圖6.8計算器測試圖1圖6.8計算器測試圖2經(jīng)測試各功能整合之后無異常。
8總結(jié)這次畢業(yè)設(shè)計我選擇的時計算器。在查找了一些資料后發(fā)現(xiàn),我國計算器功能已經(jīng)比較齊全,越來越多種類的計算器被研發(fā)出來,投入生產(chǎn)。在資料中,對相關(guān)的產(chǎn)品進行了深入的分析后,了解了下各個比較知名品牌的計算器所具有的優(yōu)勢。了解很多我平時接觸不到的計算器功能,再知道了大致的實現(xiàn)過程。我決定做一個具有加減乘除取余功能,具有高精度計算功能,能進行連續(xù)的加減乘除的計算器。因為我發(fā)現(xiàn)市面上很多計算器所具備的功能我們生活中使用不到,也很少被使用。所以我選擇了一個被使用的最為常見的功能,進行優(yōu)化后使用c++編寫出程序,完成計算器的開發(fā)。在詳細構(gòu)思了計算器的功能后,我開始對主要功能的核心器件的選擇。發(fā)現(xiàn)我在培訓(xùn)時使用的ARM開發(fā)板就能夠流暢的運行計算器的預(yù)定功能。于是我便選擇了三星的Cortex-A53架構(gòu)的S5P6818芯片的ARM開發(fā)板子。因為板子使用的比較熟練,所以后續(xù)的開發(fā)過程省去了許多麻煩的步驟。硬件的問題被我第一時間解決。很開心,這樣大大加快了我對計算器的開發(fā)速度。對計算器的系統(tǒng)功能代碼進行編寫,按照我預(yù)想的功能,將一個個功能分別處理成一個個模塊進行編寫。這樣可以讓計算器代碼看起來更簡潔。后續(xù)的調(diào)試、修改代碼環(huán)節(jié)也會更加方便。那個模塊出現(xiàn)問題,很快就能找到對應(yīng)的地方進行修改,也能很好的提升我對計算器的編寫。將代碼進行模塊化的分類之后,開始構(gòu)思各個模塊的算法實現(xiàn)。經(jīng)過1天的構(gòu)思,我初步完成了對界面的顯示和觸摸屏輸入的算法構(gòu)思,開始編寫模塊。完成了顯示界面和觸摸屏的編寫后,開始構(gòu)思高精度計算算法。為此我去查閱了算法導(dǎo)論,在其中找到了關(guān)于高進度算法的講解。給了我很大的啟發(fā)。完成高精度算法的編寫后,開始思考如何實現(xiàn)運算符優(yōu)先級算法。最終我選擇了用兩個棧去實現(xiàn),因為棧只能夠?qū)m斣剡M行操作。如果遇見加減我可以直接將加減和加減符號前面的數(shù)字和加減符號后面的數(shù)字直接壓入棧中,直到遇見乘除運算符。當(dāng)遇見乘除運算符時,不需要將符號進行入棧操作,可以直接等待下一個數(shù)字的輸入后,建數(shù)據(jù)棧中的上一個節(jié)點直接取出,進行字符串轉(zhuǎn)換整數(shù)后,進行乘除運算再將結(jié)果壓入數(shù)據(jù)棧中。這樣就完成了運算符優(yōu)先級的算法?;镜墓δ芤呀?jīng)完成。最后思考了下需要優(yōu)化的功能。我添加了清屏操作還有按鍵聲音開啟和關(guān)閉功能,這樣可以很好的提高用戶的體驗。從計算機的功能來分析,可以分為3類:第一種其中有簡單的數(shù)字,主要表現(xiàn)為項目輸入的數(shù)字,也就是說由0-9十個數(shù)字。第二種運算符號,也就是由“+”“-”“*”“\”組成的運算符號。原本預(yù)想的是使用QT來制作計算器界面,為此我特意去買了QT方面的書籍去自主學(xué)習(xí)QT。學(xué)習(xí)的最后階段,一邊做加減乘除的工作,一邊學(xué)習(xí)QT界面,最后一次吃飯的時候,突然一個奇妙的思想出現(xiàn)再我腦海中,直接使用計算器自帶3D畫圖工具把界面化出來,然后直接使用屏幕顯示圖片的方式再屏幕上顯示制作的圖片成為界面,然后在圖片顯示的同時打開觸摸屏,使用觸摸屏校準(zhǔn)顯示的圖片完成顯示和輸入操作。雖然我的技術(shù)和知識還很不夠,但是這個方法讓我省去了很多的時間,來完成計算器顯示和輸入操作的設(shè)計。 經(jīng)過一個多月的時間通過ARM開發(fā)板完成了實物的制作和論文的寫作。一個多月的時間內(nèi),我發(fā)現(xiàn)我的代碼編寫能力、代碼整潔度,都有了很多的提升。學(xué)習(xí)到了很多以前不知道的各種知識和信息。通過這次畢設(shè),對linux系統(tǒng)也變的比以前更為了解。因
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度藥店藥品零售連鎖品牌授權(quán)及供應(yīng)鏈合同
- 二零二五年度涉及知識產(chǎn)權(quán)的方協(xié)議解約及糾紛解決合同
- 不動產(chǎn)買賣合同書及補充協(xié)議條款
- 英文短句記憶技巧教案
- 海底兩萬里觀后感體會
- 農(nóng)業(yè)經(jīng)濟政策解讀方案
- 傳媒廣告行業(yè)廣告效果數(shù)據(jù)分析與優(yōu)化方案
- 互聯(lián)網(wǎng)+健康產(chǎn)業(yè)服務(wù)協(xié)議
- 倉庫庫房租賃合同書
- 童話森林的故事解讀
- 公務(wù)員職務(wù)和級別工資檔次套改及級別對應(yīng)表
- 管道工程預(yù)算
- 公路施工技術(shù)ppt課件(完整版)
- 通信原理英文版課件:Ch6 Passband Data Transmission
- GB∕T 41098-2021 起重機 安全 起重吊具
- 如何發(fā)揮好辦公室協(xié)調(diào)、督導(dǎo)、服務(wù)職能
- 部隊安全教育教案大全
- 班組長管理能力提升培訓(xùn)(PPT96張)課件
- 法蘭蝶閥螺栓配用表
- 垃圾中轉(zhuǎn)站施工方案及施工方法
- 內(nèi)蒙古自治區(qū)小額貸款公司試點管理實施細則
評論
0/150
提交評論