課程設(shè)計計算機系統(tǒng)設(shè)計_第1頁
課程設(shè)計計算機系統(tǒng)設(shè)計_第2頁
課程設(shè)計計算機系統(tǒng)設(shè)計_第3頁
課程設(shè)計計算機系統(tǒng)設(shè)計_第4頁
課程設(shè)計計算機系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式系統(tǒng)二課程設(shè)計報告 計算器系統(tǒng)的設(shè)計設(shè)計日期:2011年07月4日 至 2011年07月8日設(shè)計題目: 計算器系統(tǒng)的設(shè)計 設(shè)計的主要內(nèi)容及目標:基于2410試驗箱實現(xiàn)計算器功能,通過輸入輸出端口擴展鍵盤的方法,將按鍵鍵值在數(shù)碼管中顯示,可實現(xiàn)帶括號以及優(yōu)先級的計算器,可運算加減乘除等基本運算。指導(dǎo)教師: 2011年7月4日教師評閱意見書:評閱教師: 2011 年 月 日摘 要基于JXARM9-2410實驗箱實現(xiàn)計算器功能,通過了解鍵盤接口原理以及輸入輸出端口擴展鍵盤的方法,編寫矩陣鍵盤的掃描程序,將按鍵鍵值在數(shù)碼管中顯示,可運算加減乘除等基本運算,也可實現(xiàn)帶括號以及優(yōu)先級的運算。計算時可

2、顯示-999999+999999之間的任何數(shù),由于鍵盤數(shù)量有限,只能進行加法和乘法兩種運算。系統(tǒng)硬件主要分為處理器模塊、LED模塊、鍵盤模塊。軟件主要由主模塊、顯示模塊、按鍵處理模塊組成。關(guān)鍵詞:JXARM9-2410試驗箱,處理模塊,LED模塊,鍵盤模塊1 目的及意義計算器是我們?nèi)粘I詈蜕a(chǎn)工作中重要的工具,能極大的提高我們的計算速度,通過本次課程設(shè)計,對計算器能有更深程度的了解,對今后的學(xué)習(xí)生活一定會有很大的幫助。2 系統(tǒng)的基本原理及設(shè)計思想2.1 基本原理1鍵盤原理JXARM9-2410教學(xué)實驗系統(tǒng)的鍵盤電路由一塊74HC273鎖存器和74LVCH244緩沖器完成鍵盤識別。在沒有按鍵的

3、情況下,ROW0-ROW3通過上拉來保持高電平。檢測時通過將COL0-COL3中的某一列輸入低電平,如果該列沒有鍵按下時,通過74LVCH244讀取到的行值應(yīng)該為高電平,如果該列某行位置有鍵按下,那么該行讀到的值應(yīng)為低電平。因此,采用輪詢方式檢測鍵盤的方法為:循環(huán)往各列輸入低電平,然后讀取行值,如果為高電平,則判斷下一列,否則,該行有鍵按下,此時已經(jīng)讀取到了按鍵的行值和列值,然后根據(jù)行值和列值得到鍵碼。2LED原理JXARM9-2410擁有六位7段數(shù)碼管。要在某位數(shù)碼管上顯示一個段碼表中的字符,需要使用地址空間0x10000006選擇位碼,并將待顯示的數(shù)據(jù)存儲在地址空間0x10000004中。

4、表1 JXARM9-2410教學(xué)實驗系統(tǒng)段碼表字符01234567段碼0xc00xf90xa40xb00x990x920x820xf8字符89ABCDEF段碼0x800x900x880x830xc60xa10x860x8e表2 JXARM9-2410教學(xué)實驗系統(tǒng)位碼表位數(shù)123456位碼0x3e0x3d0x3b0x370x2f0x1f表3 JXARM9-2410教學(xué)實驗系統(tǒng)地址空間分配地址空間說明數(shù)據(jù)寬度讀/寫(屬性)0x10000004數(shù)碼管數(shù)據(jù)寄存器8位W0x10000006數(shù)碼管掃描控制寄存器8位W3計算原理 定義一個操作數(shù)棧Opnd,一個操作符棧Optr。 思想是:置操作數(shù)棧為空,操作

5、符棧壓入元素“#”(它具有最高優(yōu)先級),依次讀入表達式中的每個字符CH,如果CH是操作數(shù),則CH壓入操作數(shù)棧,如果CH是操作符,那么將CH和操作數(shù)棧頂元素進行優(yōu)先級比較(如X優(yōu)先級高于+)。 如果優(yōu)先級大于當前棧頂元素,那么將其壓棧,如果優(yōu)先級小于當前棧頂元素,那么執(zhí)行op=optr.pop();(取當前棧頂操作符),a=opnd.pop()(取當前棧頂操作數(shù)存入臨時變量a);b=opnd,pop()(取當前棧頂操作數(shù)存入臨時變量b);c=計算(a op b);opnd.push(c);如果優(yōu)先級相等,則當前操作符出棧。 重復(fù)上述操作直到表達式處理完畢。 最后操作數(shù)棧剩余的操作數(shù)就是計算的最終

6、結(jié)果。2.2設(shè)計思想1.系統(tǒng)結(jié)構(gòu)框圖本系統(tǒng)由小鍵盤模塊,處理模塊,顯示模塊組成。其結(jié)構(gòu)框圖如圖1所示:小鍵盤模塊處理模塊顯示模塊鍵盤鍵值待顯示數(shù)值圖1 系統(tǒng)結(jié)構(gòu)框圖2系統(tǒng)設(shè)計思想 小鍵盤模塊:計算器的輸入部分,用于得到用戶輸入的表達式,該模塊調(diào)用系統(tǒng)提供的Key_GetKeyPoll();函數(shù),得到當前采集到的鍵值的ASCII碼,并將ASCII碼傳遞到處理模塊。處理模塊:計算器的核心部分,該模塊接收小鍵盤模塊傳遞的ASCII碼值,進行處理,將待顯示數(shù)值的段碼和位碼傳遞到顯示模塊。顯示模塊:計算器的顯示部分,用于顯示計算機的中間數(shù)據(jù)和最終結(jié)果,該模塊接收處理模塊待顯示的數(shù)據(jù),將有效數(shù)據(jù)顯示在LE

7、D上。完成計算機器的功能。3設(shè)計方案 方案一:小鍵盤模塊和顯示模塊采用上述方法,處理模塊采用單棧結(jié)構(gòu)的逆波蘭式算法。 方案二:小鍵盤模塊和顯示模塊采用上述方法,處理模塊采用運算符號觸發(fā)。4用戶說明 計算器鍵盤說明:123+456×789CE0()=系統(tǒng)采用JXARM9-2410教學(xué)實驗箱提供的4*4鍵盤,布局如圖,由于數(shù)量限制,故只能進行加法和乘法兩種算法。 計算器LED顯示部分說明: 系統(tǒng)采用JXARM9-2410教學(xué)實驗箱提供的6位7段數(shù)碼管,計算式可顯示-999999+999999之間的任何數(shù)。3 核心程序設(shè)計調(diào)用按鍵函數(shù),判斷相應(yīng)按鍵鍵值,調(diào)用相應(yīng)的子程序,通過計算將最后結(jié)果

8、顯示在數(shù)碼管上,具體流程圖如圖2。開始調(diào)用CH=Key_GetkeyPoll()函數(shù)CH>=0&&CH<=9處理左括號Push(Sym,&SymTop,();處理右括號Push(Num,&NumTop,ResTmp);處理加號Push(Sym,&SymTop,+);處理乘號Push(Sym,&SymTop,*);CE計算器清零NumTop=0;SymTop=0;計算Calculate(Pop(Num,&NumTop)顯示當前數(shù)值display(num);Num=(num*10)+(ch-0)Ch=70Ch=66Ch=68Ch=

9、69Ch=65YNYYNCh=67YNYNYNYNN圖2 程序流程圖4 結(jié)果及分析4.1實驗結(jié)果 小鍵盤輸入:7+8*6 LED依次顯示:7,8,6,55 小鍵盤輸入:(7+8)*6 LED依次顯示:7,8,6,904.2實驗結(jié)果分析 由實驗結(jié)果可看出,本次系統(tǒng)可以完成簡單計算器的功能,可識別乘法優(yōu)先,并可以對括號進行配對和優(yōu)先操作。能正確顯示結(jié)果,以及中間輸入過程。5 課程設(shè)計體會 本次的嵌入式課程設(shè)計的題目是簡單計算器,系統(tǒng)只要分為處理模塊(主模塊),LED模塊(顯示模塊),小鍵盤模塊(輸入模塊)。 在課程設(shè)計中遇到不少的困難,這些困難都通過老師指點,共同討論或查閱資料一一解決,在驗收通過

10、后,我感覺到,這次課程設(shè)計是對我的努力的肯定。系統(tǒng)最終很成功,這些都離不開老師和自身的努力。本次的課程設(shè)計對我以后的工作學(xué)習(xí)和深造,起到了不可多得的作用。6 源代碼/*-包含文件-*/#include "def.h"#include "2410lib.h"#include "option.h"#include "2410addr.h"#include "interrupt.h"#define SEG0 0x3e#define SEG1 0x3d#define SEG2 0x3b#define S

11、EG3 0x37#define SEG4 0x2f#define SEG5 0x1f/*-棧定義-*/#ifndef STACK_SIZE#define STACK_SIZE 64#endifint NumSTACK_SIZEint NumTop=0;int SymSTACK_SIZE;int SymTop=0;void Push(int * stack,int * top,int val);int Pop(int * stack,int * top);/*-聲明-*/#define DELAYTIME 1extern unsigned char seg7table16;void Delay(

12、int time);void display(int num);int Calculate(int right,int left,int symbol);/*-主函數(shù)-*/void Main(void)/*-配置系統(tǒng)時鐘, 初始化端口, 初始化串口-*/ ChangeClockDivider(1,1); ChangeMPllValue(0xa1,0x3,0x1); Port_Init(); Uart_Init(0,115200); Uart_Select(0);PRINTF("n歡迎使用計算器n");/* - */ char number255; char sign;int

13、 now=0;int num=0;int SymTmp;int ResTmp;int Flag = 0; while(1) unsigned char ch; ch=Key_GetKeyPoll(); Delay(1);Delay(DELAYTIME);if(ch>='0'&&ch<='9')num = (num*10)+(ch-'0');Flag = 1; if(ch>=65&&ch<=70) if(Flag) Push(Num,&NumTop,num); num = 0; Fla

14、g = 0; switch(ch) case 65: /對(的處理(左括號) Push(Sym,&SymTop,'('); break; case 66: /對)的處理(右括號)while(SymTop!=0&&(SymTmp=Pop(Sym,&SymTop)!='(') ResTmp=Calculate(Pop(Num,&NumTop),Pop(Num,&NumTop),SymTmp); Push(Num,&NumTop,ResTmp); break; case 67: / 對+(加號)的處理 if(Sy

15、mTop!=0 && SymSymTop-1!='(') ResTmp=Calculate(Pop(Num,&NumTop),Pop(Num,&NumTop),Pop(Sym,&SymTop); Push(Num,&NumTop,ResTmp); Push(Sym,&SymTop,'+'); break; case 68: / 對*(乘號)的處理 if(SymTop!=0&&SymSymTop-1!='('&&SymSymTop-1!='+')

16、ResTmp=Calculate(Pop(Num,&NumTop),Pop(Num,&NumTop),Pop(Sym,&SymTop); Push(Num,&NumTop,ResTmp); Push(Sym,&SymTop,'*'); break; case 69: / 對CE的處理 NumTop = 0; SymTop = 0; num = 0; break; case 70: / 對=號處理 if(SymTop!=0) while(SymTop!=0&&(SymTmp=Pop(Sym,&SymTop)!=

17、9;(' ) ResTmp=Calculate(Pop(Num,&NumTop),Pop(Num,&NumTop),SymTmp); Push(Num,&NumTop,ResTmp); num = Pop(Num,&NumTop); break; display(num); /*-計算-*/int Calculate(int right,int left,int symbol)int result = 0;switch(symbol)case '+':result = left+right;break;case '*':r

18、esult = left*right;break;return result;/*-LED顯示-*/void display(int num)int i;int cur;int flag=0;if(num>999999)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&l

19、t;=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;*(U8*) 0x10000004) = seg7tablecur;Delay(DELAYTIME);if(cur=(num/100)%10) |

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論