基于ARM的計(jì)算器系統(tǒng)設(shè)計(jì)嵌入式系統(tǒng)開發(fā)課程設(shè)計(jì)_第1頁
基于ARM的計(jì)算器系統(tǒng)設(shè)計(jì)嵌入式系統(tǒng)開發(fā)課程設(shè)計(jì)_第2頁
基于ARM的計(jì)算器系統(tǒng)設(shè)計(jì)嵌入式系統(tǒng)開發(fā)課程設(shè)計(jì)_第3頁
基于ARM的計(jì)算器系統(tǒng)設(shè)計(jì)嵌入式系統(tǒng)開發(fā)課程設(shè)計(jì)_第4頁
基于ARM的計(jì)算器系統(tǒng)設(shè)計(jì)嵌入式系統(tǒng)開發(fā)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、嵌入式系統(tǒng)開發(fā)課程設(shè)計(jì)目錄1 目的及意義- 3 -2 系統(tǒng)的基本原理及設(shè)計(jì)思想- 3 -2.1 基本原理- 3 -2.2 設(shè)計(jì)思想- 5 -3 核心程序設(shè)計(jì)- 7 -3.1 程序流程圖- 7 -3.2 源代碼- 8 -4 結(jié)果及分析- 14 -5 總結(jié)- 15 -參 考 文 獻(xiàn)- 15 -1 目的及意義l 學(xué)習(xí)鍵盤接口的原理l 掌握通過輸入輸出端口擴(kuò)展鍵盤的方法l 編寫矩陣鍵盤的掃描程序,并將按鍵鍵值在數(shù)碼管中顯示,實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的功能2 實(shí)驗(yàn)要求基于jxarm9-2410實(shí)驗(yàn)箱實(shí)現(xiàn)計(jì)算機(jī)器,要求可實(shí)現(xiàn)帶括號(hào)以及優(yōu)先級(jí)的計(jì)算器??蛇\(yùn)算加減乘除等基本運(yùn)算。3 系統(tǒng)的基本原理及設(shè)計(jì)思想3.1 基本

2、原理l 鍵盤原理jxarm9-2410教學(xué)實(shí)驗(yàn)系統(tǒng)的鍵盤電路由一塊74hc273鎖存器和74lvch244緩沖器完成鍵盤識(shí)別。在沒有按鍵的情況下,row0-row3通過上拉來保持高電平。檢測(cè)時(shí)通過將col0-col3中的某一列輸入低電平,如果該列沒有鍵按下時(shí),通過74lvch244讀取到的行值應(yīng)該為高電平,如果該列某行位置有鍵按下,那么該行讀到的值應(yīng)為低電平。因此,采用輪詢方式檢測(cè)鍵盤的方法為:循環(huán)往各列輸入低電平,然后讀取行值,如果為高電平,則判斷下一列,否則,該行有鍵按下,此時(shí)已經(jīng)讀取到了該鍵的行值和列值,然后根據(jù)行值和列值得到鍵碼。l led原理jxarm9-2410擁有六位7段共陽數(shù)碼

3、管。要在某位數(shù)碼管上顯示一個(gè)段碼表中的字符,需要使用地址空間0x10000006選擇位碼,并將待顯示的數(shù)據(jù)存儲(chǔ)在地址空間0x10000004中。jxarm9-2410教學(xué)實(shí)驗(yàn)系統(tǒng)段碼表字符01234567段碼0xc00xf90xa40xb00x990x920x820xf8字符89abcdef段碼0x800x900x880x830xc60xa10x860x8ejxarm9-2410教學(xué)實(shí)驗(yàn)系統(tǒng)位碼表位數(shù)123456位碼0x3e0x3d0x3b0x370x2f0x1fjxarm9-2410教學(xué)實(shí)驗(yàn)系統(tǒng)地址空間分配地址空間說明數(shù)據(jù)寬度讀/寫(屬性)0x10000004數(shù)碼管數(shù)據(jù)寄存器8位w0x100

4、00006數(shù)碼管掃描控制寄存器8位wl 計(jì)算原理定義一個(gè)操作數(shù)棧opnd,一個(gè)操作符棧optr 。思想是:置操作數(shù)棧為空,操作符棧壓入元素#(它具有最高優(yōu)先級(jí)),依次讀入表達(dá)式中的每個(gè)字符ch,如果ch是操作數(shù),則ch壓入操作數(shù)棧,如果ch是操作符,那么將ch和操作符棧頂元素進(jìn)行優(yōu)先級(jí)比較(如優(yōu)先級(jí)高于)。如果優(yōu)先級(jí)大于當(dāng)前棧頂元素,那么將其壓棧,如果其優(yōu)先級(jí)小于當(dāng)前棧頂元素,那么執(zhí)行op=optr.pop();(取當(dāng)前棧頂操作符),a=opnd.pop()(取當(dāng)前棧頂操作數(shù)存入臨時(shí)變量a);b=opnd.pop()(取當(dāng)前棧頂操作數(shù)存入臨時(shí)變量b);c=計(jì)算(a op b); opnd.pu

5、sh(c);如果優(yōu)先級(jí)相等,則當(dāng)前操作符出棧。重復(fù)上述操作直到表達(dá)式處理完畢。最后操作數(shù)棧剩余的操作數(shù)就是計(jì)算的最終結(jié)果。3.2 設(shè)計(jì)思想l 系統(tǒng)結(jié)構(gòu)框圖小鍵盤模塊處理模塊顯示模塊鍵盤鍵值待顯示數(shù)值l 系統(tǒng)設(shè)計(jì)思想小鍵盤模塊:計(jì)算器的輸入部分,用于得到用戶輸入的待的表達(dá)式,該模塊調(diào)用系統(tǒng)提供的key_getkeypoll();函數(shù),得到當(dāng)前采集到的鍵值的ascii碼。并將ascii碼傳遞到處理模塊。處理模塊:計(jì)算器的核心部分,該模塊接收小鍵盤模塊傳遞的ascii碼值,進(jìn)行處理,將待顯示數(shù)值的段碼和位碼傳遞到顯示模塊。顯示模塊:計(jì)算器的顯示部分,用于顯示計(jì)算機(jī)的中間數(shù)據(jù)和最終結(jié)果,該模塊接收處理

6、模塊待顯示的數(shù)據(jù),將有效數(shù)據(jù)顯示在led上。完成計(jì)算機(jī)器的功能。l 設(shè)計(jì)方案小鍵盤模塊和顯示模塊采用上述方法,處理模塊采用上述雙棧結(jié)構(gòu)的表達(dá)式計(jì)算器思想。l 備選方案方案一:小鍵盤模塊和顯示模塊采用上述方法,處理模塊采用單棧結(jié)構(gòu)的逆波蘭式算法。方案二:小鍵盤模塊和顯示模塊采用上述方法,處理模塊采用運(yùn)算符號(hào)觸發(fā)。l 用戶說明計(jì)算器鍵盤說明:123+456789ce0()=系統(tǒng)采用jxarm9-2410教學(xué)實(shí)驗(yàn)箱提供的44鍵盤,布局如左圖,由于數(shù)量限制,故只能進(jìn)行加法和乘法兩種運(yùn)算。計(jì)算器led顯示部分說明:系統(tǒng)采用jxarm9-2410教學(xué)實(shí)驗(yàn)箱提供的6位7段數(shù)碼管,布局如上圖,計(jì)算時(shí)可顯示99

7、9999999999之間的任何數(shù)。4 核心程序設(shè)計(jì)4.1 程序流程圖num = (num*10)+(ch-0);開始nnnnnnnyyyyyy調(diào)用ch=key_getkeypoll()函數(shù)ch=0&ch=0&ch=65&ch999999)for(i=0;i=5;i+)*(u8*) 0x10000006) = seg1;*(u8*) 0x10000004) = seg7table14;delay(delaytime);*(u8*) 0x10000006) = seg0;*(u8*) 0x10000004) = seg7table14;delay(delaytime);else for(i=0;i

8、=5;i+) flag=0;if(cur=(num/100000)%10)flag=1;*(u8*) 0x10000006) = seg5;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/10000)%10) | flag)flag=1;*(u8*) 0x10000006) = seg4;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/1000)%10) | flag)flag=1;*(u8*) 0x10000006) = seg3;*(u

9、8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/100)%10) | flag)flag=1;*(u8*) 0x10000006) = seg2;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);if(cur=(num/10)%10) | flag)flag=1;*(u8*) 0x10000006) = seg1;*(u8*) 0x10000004) = seg7tablecur;delay(delaytime);*(u8*) 0x10000006) = seg0;*(u

10、8*) 0x10000004) = seg7tablenum%10;delay(delaytime);/*-棧處理-*/void push(int * stack,int * top,int val)if(stack=num)printf(push val %dn,val);else printf(push sym %cn,val);if(*top = stack_size) return;stack(*top)+ = val;int pop(int * stack,int * top)if(*top=0)return -1;return stack-(*top);5 結(jié)果及分析l 實(shí)驗(yàn)結(jié)果小

11、鍵盤輸入:7+8*6led依次顯示:7,8,6,55小鍵盤輸入:(7+8)*6led依次顯示:7,8,6,90l 實(shí)驗(yàn)結(jié)果分析由實(shí)驗(yàn)結(jié)果可看出,本次系統(tǒng)可以完成簡(jiǎn)單計(jì)算器的功能,可識(shí)別乘法優(yōu)先,并可以對(duì)括號(hào)進(jìn)行配對(duì)和優(yōu)先操作。能正確顯示結(jié)果,以及中間輸入過程。6 總結(jié)本次的嵌入式課程設(shè)計(jì)我們小組的題目是簡(jiǎn)單計(jì)算器,系統(tǒng)主要分為處理模塊(主模塊),led模塊(顯示模塊),小鍵盤(輸入模塊),我們小組根據(jù)成員的自身能力情況分工,除三個(gè)模塊外,另有一人負(fù)責(zé)容錯(cuò)處理和資料整理等一些事項(xiàng)。從抽取題目到課程設(shè)計(jì)驗(yàn)收完畢,我們小組一直共同進(jìn)退,一起分析問題,解決問題,當(dāng)前,在課程設(shè)計(jì)中遇到不少的困難,這些困難我們都通過老師指點(diǎn),共同討論或查閱資料一一解決,在驗(yàn)收通過后,我們感覺到,這些課

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論