簡易計(jì)算器課程設(shè)計(jì) (3)_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p>  封面—————————————————————P1</p><p>  目錄—————————————————————P2</p><p>  前言—————————————————————P3</p><p>  關(guān)鍵字——————————————————

2、——P3</p><p>  原理與總體方案————————————————P3</p><p>  硬件設(shè)計(jì)———————————————————P6</p><p>  調(diào)試—————————————————————P10</p><p>  測(cè)試與分析——————————————————P11</p><p> 

3、 總結(jié)—————————————————————P13</p><p>  附件—————————————————————P14</p><p><b>  前言</b></p><p>  近幾年,隨著大規(guī)模集成電路的發(fā)展,各種便攜式嵌入式設(shè)備,具有十分廣闊的市場(chǎng)前景。嵌入式系統(tǒng)是一種專用的計(jì)算機(jī)系統(tǒng),作為裝置或設(shè)備的一部分。通常,嵌入式系統(tǒng)

4、是一個(gè)控制程序存儲(chǔ)在ROM中的嵌入式處理器控制板。事實(shí)上,所有帶有數(shù)字接口的設(shè)備,如手表、微波爐、錄像機(jī)、汽車等,都使用嵌入式系統(tǒng),有些嵌入式系統(tǒng)還包含操作系統(tǒng),但大多數(shù)嵌入式系統(tǒng)都是是由單個(gè)程序?qū)崿F(xiàn)整個(gè)控制邏輯。在嵌入式系統(tǒng)中,數(shù)據(jù)和命令通過網(wǎng)絡(luò)接口或串行口經(jīng)過ARM程序處理后,或顯示在LCD上,或傳輸?shù)竭h(yuǎn)端PC上。</p><p>  本文通過周立功的LPC2106芯片完成的簡易計(jì)算器,正是對(duì)嵌入式應(yīng)用的學(xué)習(xí)

5、和探索。</p><p><b>  一、摘要:</b></p><p>  計(jì)算器一般是指“電子計(jì)算器”,是能進(jìn)行數(shù)學(xué)運(yùn)算的手持機(jī)器,擁有集成電路芯片。對(duì)于嵌入式系統(tǒng),以其占用資源少、專用性強(qiáng),在汽車電子、航空和工控領(lǐng)域得到了廣泛地應(yīng)用。本設(shè)計(jì)就是先通過C語言進(jìn)行相應(yīng)程序的編寫然后在ADS中進(jìn)行運(yùn)行最后導(dǎo)入PROTUES進(jìn)行仿真。最后利用ARM中的LPC2106芯片

6、來控制液晶顯示器和4X4矩陣式鍵盤,從而實(shí)現(xiàn)簡單的加、減、乘、除等四則運(yùn)算功能。 </p><p>  關(guān)鍵字:中斷,掃描,仿真,計(jì)算</p><p>  二、原理與總體方案:</p><p>  主程序在初始化后調(diào)用鍵盤程序,再判斷返回的值。若為數(shù)字0—9,則根據(jù)按鍵的次數(shù)進(jìn)行保存和顯示處理。若為功能鍵,則先判斷上次的功能鍵,根據(jù)代號(hào)執(zhí)行不同功能,并將按鍵次數(shù)清零

7、。程序中鍵盤部分使用行列式掃描原理,若無鍵按下則調(diào)用動(dòng)態(tài)顯示程序,并繼續(xù)檢測(cè)鍵盤;若有鍵按下則得其鍵值,并通過查表轉(zhuǎn)換為數(shù)字0—9和功能鍵與清零鍵的代號(hào)。最后將計(jì)算結(jié)果拆分成個(gè)、十、百位,再返回主程序繼續(xù)檢測(cè)鍵盤并顯示;若為清零鍵,則返回主程序的最開始。</p><p>  電路設(shè)計(jì)與原理:通過LPC2106芯片進(jìn)行相應(yīng)的設(shè)置來控制LCD顯示器。而通過對(duì)鍵盤上的值進(jìn)行掃描,把相應(yīng)的鍵值通過MM74C922芯片進(jìn)行

8、運(yùn)算從而讓ARM芯片接收。</p><p>  1.系統(tǒng)整體流程圖:</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  2.</b></p><p><b>  3.寄存器初始化:<

9、;/b></p><p>  2)仿真設(shè)計(jì) </p><p><b>  仿真電路圖:</b></p><p><b>  仿真圖形:</b></p><

10、p>  計(jì)算加法2.計(jì)算減法(結(jié)果為負(fù)數(shù))</p><p>  3.計(jì)算減法(結(jié)果為正數(shù))4.計(jì)算乘法</p><p>  5.計(jì)算除法 (除法只能進(jìn)行整除,無小數(shù)) </p><p>  注:本設(shè)計(jì)不能進(jìn)行連續(xù)運(yùn)算,只能進(jìn)行當(dāng)次運(yùn)算,且只能進(jìn)行單行顯示。進(jìn)行除法時(shí)會(huì)自動(dòng)取整,無小數(shù)。顯示器上不會(huì)顯示加減乘除等運(yùn)算符號(hào),只有操作數(shù)和操作結(jié)果。&l

11、t;/p><p><b>  三、硬件設(shè)計(jì):</b></p><p><b>  3.1元件清單:</b></p><p>  注:無實(shí)物,以電路設(shè)計(jì)圖為依準(zhǔn)。</p><p>  3.2鍵盤接口電路:</p><p>  計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立

12、按鍵的方式,在這種情況下,編程會(huì)很簡單,但是會(huì)占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4×4個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。</p><p>  矩陣鍵盤的工作原理:</p><

13、;p>  計(jì)算器的鍵盤布局如圖2.1所示:一般有16個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P口實(shí)現(xiàn)16個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。</p><p>  圖2.1矩陣鍵盤布局圖</p><p>  電路中采用4*4鍵盤作為輸入電路模塊的話,電路連線會(huì)比較簡單,而且這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。但是在硬件電路設(shè)計(jì)的過程中,實(shí)驗(yàn)室沒有提供矩陣鍵盤

14、,所以我們將4*4的矩陣鍵盤換成了16個(gè)獨(dú)立按鍵。采用獨(dú)立按鍵的方式的話,會(huì)占用大量的I/O 口資源,但是在這種情況下,編程會(huì)很簡單。</p><p>  矩陣鍵盤內(nèi)部電路圖如圖2.2所示。</p><p>  圖2.2 矩陣鍵盤內(nèi)部電路圖</p><p><b>  3.3顯示模塊:</b></p><p>  本設(shè)計(jì)

15、采用LCD1液晶顯示屏來顯示輸出數(shù)據(jù)。通過D0-D7引腳向LCD1寫指令字或?qū)憯?shù)據(jù)以使LCD1實(shí)現(xiàn)不同的功能或顯示相應(yīng)數(shù)據(jù)。LCD1管腳圖如圖2.3所示。</p><p>  圖2.3 LCD1管腳圖</p><p>  3.4各模塊的特性與作用:</p><p>  3.4.1LPC2106的特性及引腳功能:</p><p>  LPC2

16、106 是基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的32 位ARM CPU 的微處理器,并帶有256kB 嵌入的高速Flash 存儲(chǔ)器。128 位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32 位代碼能夠最大時(shí)鐘速率下運(yùn)行,并具有廣泛應(yīng)用。含向量中斷控制器,多個(gè)串行接口,兩個(gè)三十二位定時(shí)器,片內(nèi)晶振的操作頻率范圍:10MHZ-25MHZ,兩個(gè)低功耗模式:空閑和掉電.</p><p>  CPU操作電壓范圍:1.65V-1.95V<

17、;/p><p>  圖2.4 LPC2106管腳圖</p><p><b>  管腳說明:</b></p><p>  V3、V18:供電電壓</p><p>  Vss、DBGSEL:接地</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 </p><

18、;p>  XTAL2:來自反向振蕩器的輸出。</p><p>  P0.0-P0.14作為GPIO接口,P0.15作為EINT2接口。</p><p>  3.4.2 LCD的特性:</p><p>  LCD 顯示屏可以采用字符顯示,當(dāng)使用字符顯示方式時(shí),可以直接用外碼作為輸入數(shù)據(jù),由顯示屏自動(dòng)給出顯示字模數(shù)據(jù),而無需由微處理器提供字模。</p>

19、<p>  3.4.3 數(shù)字式鍵盤的特性:</p><p>  數(shù)字式鍵盤的實(shí)質(zhì)仍是行列式鍵盤,4 根行線和4 根列線通過下拉電阻接地,在其表面貼有標(biāo)示對(duì)應(yīng)按鍵的膜,使得易于觀察和操作,更加貼近使用者的需求。</p><p>  3.4.4 MM74C922的特性及其引腳功能:</p><p>  MM74C922具有功耗低,電壓為3-5V,三態(tài)門輸出

20、,與LPTTL兼容,輸出鎖存按下最后的鍵,用一個(gè)電容器就可以消除鍵盤抖動(dòng),兩鍵輪回,行具有上拉功能,具有芯片內(nèi)或芯片外時(shí)鐘,最大開關(guān)電阻為管腳說明:</p><p>  A-D為行鍵掃描電平輸出端,1-4為列鍵輸入讀取端;</p><p>  OSC為振蕩器的外接引線端,可用外部的輸入脈沖或電容器;</p><p>  OE為數(shù)據(jù)輸出端,低電平有效;DAV為數(shù)據(jù)輸出

21、有效,高電平有效;VCC為電源端,接3-5V;GND為接地端。</p><p>  本設(shè)計(jì)中選用LPC2106的P0.0~P0.10 與LCD 顯示屏相連,它們所輸出信號(hào)控制顯示屏上的顯示,其中P0.0~P0.7 分別接顯示屏的D0~D7,P0.8~P0.10分別接顯示屏的RS、RW、E 接口;選用LPC2106的P0.11~P0.14 連續(xù)4 個(gè)IO口與芯片MM74C922和計(jì)算器鍵盤相連,可通過反轉(zhuǎn)法檢測(cè)到按

22、下按鍵的鍵碼,再通過查鍵盤對(duì)應(yīng)的字符編碼使LCD 顯示,其中A~D依次接鍵盤的4 根行線,1~4依次接鍵盤的4 根列線。</p><p><b>  管腳說明:</b></p><p>  A-D為行鍵掃描電平輸出端,1-4為列鍵輸入讀取端;</p><p>  OSC為振蕩器的外接引線端,可用外部的輸入脈沖或電容器;</p>&

23、lt;p>  OE為數(shù)據(jù)輸出端,低電平有效;DAV為數(shù)據(jù)輸出有效,高電平有效;VCC為電源端,接3-5V;GND為接地端。</p><p>  本設(shè)計(jì)中選用LPC2106的P0.0~P0.10 與LCD 顯示屏相連,它們所輸出信號(hào)控制顯示屏上的顯示,其中P0.0~P0.7 分別接顯示屏的D0~D7,P0.8~P0.10分別接顯示屏的RS、RW、E 接口;選用LPC2106的P0.11~P0.14 連續(xù)4 個(gè)

24、IO口與芯片MM74C922和計(jì)算器鍵盤相連,可通過反轉(zhuǎn)法檢測(cè)到按下按鍵的鍵碼,再通過查鍵盤對(duì)應(yīng)的字符編碼使LCD 顯示,其中A~D依次接鍵盤的4 根行線,1~4依次接鍵盤的4 根列線。</p><p><b>  四、調(diào)試:</b></p><p><b>  4.1 GPIO:</b></p><p>  LPC200

25、0系列ARM的GPIO具有如下特性:</p><p>  可以獨(dú)立控制每個(gè)GPIO口的方向(輸入/輸出模式);</p><p>  可以獨(dú)立設(shè)置每個(gè)GPIO的輸出狀態(tài)(高/低電平);</p><p>  所有GPIO口在復(fù)位后默認(rèn)為輸入狀態(tài)。</p><p>  每個(gè)作為GPIO功能的引腳受到四個(gè)寄存器控制,分別為控制方向的IOxDIR、控制

26、輸出電平狀態(tài)的IOxSET和IOxCLR、反映引腳電平狀態(tài)的IOxPIN。這四個(gè)寄存器構(gòu)成一組,而一組寄存器控制著一個(gè)端口(P0、P1、P2或P3)。</p><p><b>  注意事項(xiàng):</b></p><p>  引腳設(shè)置為輸出方式時(shí),輸出狀態(tài)由IOxSET和IOxCLR中最后操作的寄存器決定。</p><p>  LPC2000系列AR

27、M大部分的I/O引腳為推挽方式輸出,但是具有總線功能的I/O引腳為開漏輸出(P0.2/3和P0.11/14)。使用這些開漏輸出的引腳作為GPIO功能,并用于高電平輸出或者引腳狀態(tài)輸入時(shí),要接上拉電阻才能正常使用。</p><p>  推挽輸出的I/O引腳正常拉出/灌入電流均為4mA,短時(shí)間極限值為40mA。</p><p>  復(fù)位后,大部分引腳默認(rèn)作為GPIO功能,并且均為輸入狀態(tài)。但是

28、,有部分引腳在復(fù)位后默認(rèn)作為第二功能(如:P0.27~P0.30在復(fù)位后默認(rèn)為A/D輸入引腳)。</p><p>  4.2硬件和程序原理:</p><p>  在鍵盤按鍵后,產(chǎn)生一個(gè)中斷,mcu對(duì)鍵盤進(jìn)行掃描,確定按下的鍵,如果不是等號(hào),就把按下的字符依次存入數(shù)組,并在lcd顯示表達(dá)式,如果是等號(hào),就計(jì)算出數(shù)組中存入的表達(dá)式的值,并顯示在lcd中。</p><p>

29、;  計(jì)算表達(dá)式值的方法:把表達(dá)式中的表示數(shù)值的字符轉(zhuǎn)成數(shù)值存入一個(gè)數(shù)值數(shù)組,把表達(dá)式中的表示運(yùn)算符的字符存入運(yùn)算符數(shù)組;</p><p>  關(guān)于四則運(yùn)算優(yōu)先級(jí)算法:依次檢索運(yùn)算符數(shù)組,當(dāng)遇到 * 號(hào) 或者 / 號(hào)的時(shí)候,就先計(jì)算乘法或除法,算出結(jié)果后存入數(shù)值數(shù)組相應(yīng)位置,然后刪除此運(yùn)算符和多余的數(shù)值,再重復(fù)檢索,直到數(shù)值數(shù)組中只有一個(gè)數(shù)值為止,這個(gè)數(shù)值即是運(yùn)算結(jié)果。</p><p> 

30、 調(diào)用stdio.h庫里的sprintf函數(shù),把數(shù)值轉(zhuǎn)化成字符數(shù)組,然后顯示到lcd中。</p><p><b>  五、測(cè)試與分析:</b></p><p>  5.1 ADS1.2新建工程:</p><p>  5.2 Proteus實(shí)時(shí)仿真:</p><p><b>  六、總結(jié):</b>&l

31、t;/p><p>  對(duì)我們而言,知識(shí)上的收獲重要,精神上的豐收更加可喜。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次實(shí)習(xí)必將成為我人生旅途上一個(gè)非常美好的回憶!</p><p>  通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問

32、題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。</p><p><b>  附件:</b></p><p><b>  代碼:</b></p><p>  #include "config.h&quo

33、t;</p><p>  #include "math.h"</p><p><b>  //宏定義</b></p><p>  #define LCD_RS 1<<0</p><p>  #define LCD_RW 1<<1</p>

34、<p>  #define LCD_E 1<<2</p><p>  #define D7 1<<10 //判斷LCD忙碌</p><p><b>  //函數(shù)聲明</b></p><p>  void system_init(void);</p>&l

35、t;p>  void LCDInit(void);</p><p>  void __irq IRQ_EINT2(void);</p><p>  int ucKeyScan(void);</p><p>  char translate();</p><p>  void arithmetic(long x,long y);<

36、/p><p>  char txt1[]="error!",</p><p>  txt2[]="data overflow",</p><p>  txt3[]="";</p><p><b>  //全局變量定義</b></p><p>

37、  long add1=0,add2=0;</p><p>  int operators=0,iny=0;</p><p>  uint8 num=0,x,y,sign=0,count=0,k=0,repeat=0,flag=0;</p><p>  unsigned int code[4]={0x0E00000,0x0D00000,0x0B00000,0x070

38、0000};//列線掃描電壓,分為第1,2,3,4根列線</p><p>  unsigned int ucRow,ucLine; //行號(hào),列號(hào)。</p><p>  /***********************************************************************</p><p>  * 名 稱:De

39、layNS()</p><p>  * 功 能:長軟件延時(shí)</p><p>  * 入口參數(shù):dly延時(shí)參數(shù),值越大,延時(shí)越久</p><p><b>  * 出口參數(shù):無</b></p><p>  *******************************************************

40、*****************</p><p>  void DelayNS(uint32 dly)</p><p>  { uint32 i;</p><p>  for(; dly>0; dly--)</p><p><b>  {</b></p><p>  for(i=

41、0; i<500; i++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /***********************************************************************</p><p>

42、  * 名 稱:Busy()</p><p>  * 功 能:LCD是否忙碌</p><p>  ************************************************************************</p><p>  void Busy()</p><p><b>  {&l

43、t;/b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  IOCLR = LCD_RS;</p><p>  IOSET = LCD_RW;</p><p>  if(!(IOPIN&D7))

44、break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /***********************************************************************</p><p>  * 名 稱:C

45、ommand()</p><p>  * 功 能:LCD命令</p><p>  ************************************************************************</p><p>  void Command(char com)</p><p><b>  {&l

46、t;/b></p><p><b>  Busy();</b></p><p>  IOCLR = 0x0FFF;</p><p>  IOCLR = LCD_RS;</p><p>  IOCLR = LCD_RW;</p><p>  IOSET = LCD_E;</p>

47、<p>  IOSET = com<<3;</p><p>  IOCLR = LCD_E;</p><p><b>  }</b></p><p>  /***********************************************************************</p>&

48、lt;p>  * 名 稱:LCDInit()</p><p>  * 功 能:LCD初始化</p><p><b>  * 入口參數(shù):</b></p><p><b>  * 出口參數(shù):無</b></p><p>  ********************************

49、****************************************</p><p>  void LCDInit()</p><p><b>  { </b></p><p>  Command(0x0C); //顯示開/關(guān)控制命令</p><p>  Command(0x38); //功能設(shè)置命

50、令:數(shù)據(jù)線長度為8位</p><p>  // Command(0x80); //地址命令</p><p>  Command(0x06); //輸入方式設(shè)置</p><p><b>  }</b></p><p>  /***********************************************

51、************************</p><p>  * 名 稱:write()</p><p>  * 功 能:LCD寫數(shù)據(jù)</p><p>  ************************************************************************</p><p>  v

52、oid write(char data)</p><p><b>  {</b></p><p><b>  Busy();</b></p><p>  IOCLR = 0x0FFF;</p><p>  IOSET = LCD_RS;</p><p>  IOCLR = L

53、CD_RW;</p><p>  IOSET = LCD_E;</p><p>  IOSET = data<<3;</p><p>  DelayNS(1);</p><p>  IOCLR = LCD_E; </p><p><b>  }</b></p&

54、gt;<p>  /***********************************************************************</p><p>  * 名 稱:display()</p><p>  * 功 能:LCD顯示</p><p>  *******************************

55、*****************************************</p><p>  void display(long a)</p><p><b>  {</b></p><p>  long temp,b,c=-1;</p><p>  uint8 lenth=1,i,j;</p>

56、<p>  // Command(0x01);</p><p><b>  if(a<0)</b></p><p><b>  {</b></p><p><b>  a=a*c;</b></p><p>  write('-');</p

57、><p><b>  }</b></p><p><b>  temp=a;</b></p><p>  while((temp=temp/10)!=0) lenth++;</p><p>  for(i=lenth;i>0;i--)</p><p><b> 

58、 {</b></p><p><b>  b=1;</b></p><p>  for(j=0;j<i-1;j++) b=b*10;</p><p>  write(0x30+a/b);</p><p><b>  a=a%b;</b></p><p>&l

59、t;b>  }</b></p><p>  }//為低電平,其他為高電平。 </p><p><b>  //主函數(shù)</b></p><p>  int main()</p><p><b>  { </b></p><p>  sy

60、stem_init();</p><p>  LCDInit();</p><p><b>  while(1) </b></p><p>  ucKeyScan();</p><p>  return(0);</p><p><b>  }</b></p>&

61、lt;p>  /***********************************************************************</p><p>  * 名稱:system_init()</p><p>  * 功能:system初始化函數(shù)</p><p>  ***********************************

62、*************************************</p><p>  void system_init()</p><p><b>  {</b></p><p><b>  //引腳功能選擇</b></p><p>  PINSEL0 = 0x80000000; //

63、設(shè)置P0.15為EINT2,其余為GPIO</p><p>  PINSEL1 = 0x00000000;//設(shè)置P0.15~P0.31為GPIO</p><p>  IODIR = 0x0f007ff; //設(shè)置P0.0-P0.10,P0.20-P0.23為輸出,其余為輸入</p><p>  IOCLR = 0x80000000; </p>

64、<p><b>  //向量中斷初始化</b></p><p>  VICIntSelect =0x00; //設(shè)置P0.15為IRQ中斷</p><p>  VICVectAddr0 = (uint32)IRQ_EINT2;</p><p>  VICVectCntl0 = 0x30;</p><

65、p>  VICIntEnable = 1<<16; //使能EINT2</p><p><b>  //外部中斷初始化</b></p><p>  EXTMODE = 1<<2; //設(shè)置為EINT2下降沿觸發(fā)</p><p>  EXTPOLAR = 0; </p><p&

66、gt;  EXTINT = 1<<2; //清除EINT2中斷標(biāo)志</p><p><b>  }</b></p><p>  /***********************************************************************</p><p>  * 名稱:ucKeyS

67、can()</p><p>  * 功能:鍵盤掃描函數(shù)當(dāng)有外部中斷2時(shí)調(diào)用此函數(shù),使用列掃描的方式獲取鍵碼,鍵碼</p><p>  由2位數(shù)字組成。高位為行號(hào)低位為列號(hào)。</p><p>  ************************************************************************&

68、lt;/p><p>  int ucKeyScan()</p><p><b>  {</b></p><p>  unsigned int ucTemp=0; //掃描狀態(tài)暫存。</p><p>  for(ucLine=0;ucLine<4;ucLine++)//行掃描</p><

69、p><b>  {</b></p><p>  IOSET=code[ucLine]; //輸出掃描電位。</p><p>  IOCLR=(~code[ucLine])&0xF00000;</p><p>  //ucTemp=IOPIN>>24;</p><p>  if(ucTe

70、mp!=0x0F) //判斷該列是否有按鍵按下。</p><p>  continue;</p><p>  } //返回按鍵編碼。格式為2位數(shù),高位為列號(hào),低位為行號(hào)。</p><p><b>  }</b></p><p>  /**************************************

71、*********************************</p><p>  * 名稱:IRQ_EINT2()</p><p>  * 功能:EINT2中斷服務(wù)程序</p><p>  ************************************************************************</p>&l

72、t;p>  void __irq IRQ_EINT2(void)</p><p><b>  {</b></p><p>  unsigned int ucTemp2=0,a;</p><p>  ucTemp2=IOPIN>>24; </p><p>  switch(uc

73、Temp2)</p><p><b>  {</b></p><p>  case 0x0E: ucRow=00;break; //判斷列號(hào)。</p><p>  case 0x0D: ucRow=10;break;</p><p>  case 0x0B: ucRow=20;break;</p>&

74、lt;p>  case 0x07: ucRow=30;break;</p><p>  default: ucRow=40;break;</p><p><b>  }</b></p><p>  num=ucRow+ucLine;</p><p>  if(repeat==1&num!=23&

75、x!=3) //計(jì)算結(jié)束后,若輸入數(shù)字,在輸入前清屏</p><p><b>  {</b></p><p>  Command(0x01);</p><p>  add1=add2=sign=0;</p><p><b>  count=0;</b></p><p>&

76、lt;b>  repeat=0;</b></p><p>  DelayNS(10); //延時(shí)讓LCD反應(yīng)</p><p><b>  }</b></p><p>  switch(num)</p><p><b>  {</b></p><p>  

77、case 00:write('7');k=8;break;</p><p>  case 01:write('4');k=5;break;</p><p>  case 02:write('1');k=2;break;</p><p>  case 03:Command(0x01);k=0;add1=add2=sign

78、=0;break;</p><p>  case 10:write('8');k=9;break;</p><p>  case 11:write('5');k=6;break;</p><p>  case 12:write('2');k=3;break;</p><p>  case 13:

79、write('0');k=1;break;</p><p>  case 20:write('9');k=10;break;</p><p>  case 21:write('6');k=7;break;</p><p>  case 22:write('3');k=4;break;</p>

80、<p><b>  case 23:</b></p><p>  if(repeat==0) //是否重復(fù)</p><p><b>  {</b></p><p>  write('=');</p><p><b>  count=1;</b&

81、gt;</p><p><b>  repeat=1;</b></p><p>  arithmetic(add1,add2);</p><p><b>  }</b></p><p>  else count=0;</p><p>  break; </p&

82、gt;<p><b>  case 30:</b></p><p>  if(sign==0)</p><p><b>  {</b></p><p>  write('/');</p><p><b>  sign=1;</b></p>

83、;<p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 31:</b></p><p>  if(sign==0)</p><p><b>  {</b></p>

84、<p>  write('X');</p><p><b>  sign=2;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 32:</b>

85、;</p><p>  if(sign==0)</p><p><b>  {</b></p><p>  write('-');</p><p><b>  sign=3;</b></p><p><b>  }</b></p&g

86、t;<p><b>  break;</b></p><p><b>  case 33:</b></p><p>  if(sign==0)</p><p><b>  {</b></p><p>  write('+');</p>

87、<p><b>  sign=4;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(sign==0)</p>&l

88、t;p>  a=0; //第一個(gè)算數(shù)</p><p>  else if(count==0)</p><p>  a=1; //第二個(gè)算數(shù)</p><p><b>  else </b></p><p><b>  a=2;</b></p>

89、;<p>  if(a==0&k!=0)</p><p>  {add1=10*add1+k-1;flag=1;}</p><p>  else if(a==1&k!=0)</p><p>  {add2=10*add2+k-1;flag=2;}</p><p><b>  k=0;</b>

90、</p><p>  //arithmetic(add1,add2);</p><p>  while((EXTINT&0x04)!=0)//等待外部中斷信號(hào)恢復(fù)為高電平</p><p><b>  {</b></p><p>  EXTINT=0x04;//清除EINT2中斷標(biāo)志</p>

91、;<p><b>  }</b></p><p>  VICVectAddr=0x00;//通知VIC向量中斷結(jié)束</p><p><b>  }</b></p><p>  /**********算術(shù)運(yùn)算函數(shù)*************/</p><p>  void arit

92、hmetic(long x,long y)</p><p><b>  {</b></p><p>  long result;</p><p>  switch(sign)</p><p><b>  {</b></p><p><b>  case 0:<

93、/b></p><p>  result=x; break;</p><p><b>  case 1:</b></p><p>  result=x/y;break;</p><p><b>  case 2:</b></p><p>  result=x*y;br

94、eak;</p><p><b>  case 3:</b></p><p>  result=x-y;break;</p><p><b>  case 4:</b></p><p>  result=x+y;break;</p><p><b>  }</

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)論