

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《單片機原理及接口技術》課程設計</p><p> 題目: 簡易計算器設計 </p><p> 班 級: 電子1547 </p><p> 姓 名: </p>
2、<p> 學 號: </p><p> 指導教師: </p><p> 時 間: 2013年12月 </p><p><b> 目錄</b></p><p> 一、選題的背景和意義-------
3、------------1</p><p> 1.1選題的背景-------------------------------------1</p><p> 1.2選題的意義-------------------------------------1</p><p> 二、總體設計-------------------------------1</p&g
4、t;<p> 2.1設計任務---------------------------------------1</p><p> 2.2方案選擇---------------------------------------1</p><p> 三、硬件設計-------------------------------2</p><p> 3.1
5、元器件名稱--------------------------------------------------------2</p><p> 3.2 計算器按鍵介紹--------------------------------------------------2</p><p> 3.3硬件系統(tǒng)框圖、單元電路--------------------------3</p>
6、;<p> 四、軟件設計-------------------------------3</p><p> 4.1 軟件調試步驟-----------------------------------------------------3</p><p> 4.2軟件設計流程圖------------------------------------------------
7、---4</p><p> 五、結束語------------------------------------5</p><p> 六、參考文獻--------------------------------5</p><p> 七、附錄---------------------------------------6</p><p>&
8、lt;b> 一、背景和意義</b></p><p> 1.1、選題的背景:</p><p> 當今時代,是一個新技術層出不窮的時代。在電子領域,尤其是自動化智能控制領域,傳統(tǒng)的分立元件或數字邏輯電路構成的控制系統(tǒng)正以前所未見的速度被單片機智能控制系統(tǒng)所取代。單片機具有體積小、功能強、成本低、應用面廣等優(yōu)點,可以說,智能控制與自動控制的核心就是單片機。目前,一個學習與
9、應用單片機的高潮正在工廠、學校及企事業(yè)單位大規(guī)模地興起。過去習慣于傳統(tǒng)電子領域的工程師、技術員正面臨著全新的挑戰(zhàn),如不能在較短時間內學會單片機,勢必會被時代所遺棄,只有勇敢地面對現實,挑戰(zhàn)自我,加強學習,爭取在較短的時間內將單片機技術融會貫通,才能跟上時代的步伐。</p><p> 1.2、選題的意義:</p><p> 單片機課程設計是單片機原理課程的實踐性環(huán)節(jié)。是在我們學習了《單片
10、機原理》等課程的基礎上進行的綜合性訓練,我們組這次訓練的課題是基于單片機簡易計算器。此次進行的綜合性訓練,不僅培養(yǎng)了我如何合理運用課本中所學到的理論知識與實踐緊密結合,獨立解決實際問題的能力。</p><p><b> 二、總體設計</b></p><p> 本設計主要是依據單片機的原理來進行簡易計算器的設計,設計采用了80C51單片機作為計算器的主控制器,LM0
11、20 L作為顯示器,4×4 keypad-smallcalc鍵盤作為輸入按鍵,通過軟硬件相結合,來實現整數的“加”、“減”、“乘”、“除”運算。</p><p><b> 2.1設計任務 </b></p><p> 本設計主要通過單片機的原理和應用,以電子技術基礎的基本理論為指導,利用Protues仿真軟件和Keil編程軟件來設計簡易計算器。&
12、lt;/p><p> 其主要設計要求有: </p><p> 1、對計算器硬件系統(tǒng)的設計; </p><p> 2、運用keil進行計算器軟件系統(tǒng)的設計; </p><p> 3、在protues仿真平臺上,對軟件進行調試及仿真; </p><
13、p> 4、軟硬件結合之后,進行整體電路的調試與測試。</p><p><b> 2.2 方案選擇</b></p><p><b> ?。?)方案一 </b></p><p> 根據功能和指標要求,本系統(tǒng)選用MCS-51系列單片機AT89C51為主控機。通過擴展必要的外圍接口電路,實現對計算器的設計。計
14、算器電路包括三個部分:顯示電路、4*4鍵掃描電路、單片機微控制電路。用七段數碼管作為顯示電路,矩陣鍵盤作為輸入電路。</p><p><b> ?。?)方案二 </b></p><p> 根據計算器的功能要求,選擇AT89C51為主控機,通過擴展必要的外圍接/口電路,實現對計算器的設計。外部主要由4*4矩陣鍵盤和一個液晶顯示屏構成,內部由一塊AT89C51
15、單片機構成。計算器電路包括四個部分:選用LCD作為顯示部分,矩陣鍵盤作為輸入部分,運算模塊,單片機控制部分。</p><p><b> 最終選擇方案二。</b></p><p><b> 三、硬件設計</b></p><p><b> 3.1 元器件名稱</b></p><p
16、> (1)80C51.BUS</p><p><b> (2)74LS00</b></p><p> (3)74LS373</p><p><b> (4)6264</b></p><p><b> (5)7407</b></p><p>
17、; (6)KEYPAD-SMALLCALC</p><p> 3.2 計算器按鍵介紹</p><p> 計算器所需按鍵有:數字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’ 功能鍵:’+’, ’-‘ , ’*’, ’/ ’ ,
18、60;’ = ’, ’ C( 清零)’ 共計16個按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行和四列的8個公共端分別接P1.0~P1.7,這樣掃描P1口就可以完成對矩陣鍵盤的掃描,通過對16個按鍵進行編碼,從而得到鍵盤的口地址,對比P1口的掃描結果和各按鍵的地址,我們就可以得到是哪個鍵按下,從而完成鍵盤掃描的功能。鍵盤電路設計 鍵盤輸入采用4*4的矩陣鍵盤。4
19、*4鍵盤分別與PC0~PC7相連。PC0~PC3作為輸入口(回送線),PC4~PC7作為輸出口(掃描線)。16個按鍵分別用于控制數字“0~9”以及數學運算符號“+、-、*、/”。</p><p> 3.3硬件系統(tǒng)框圖、單元電路</p><p><b> 軟件設計</b></p><p> 4.1 軟件調試步驟 </p>
20、<p> 1)打開軟件后,在Project菜單中選擇New Project命令,打開一個新項目。保存此項目,輸入工程文件名后,并保存工程文件的目錄。</p><p> 2)為項目文件選擇一個目標器件,即選擇8051的類型。在Data base 列表框中選擇“ATML 89C51”,確定。 </p><p> 上述設置好后,創(chuàng)建源程序文件并輸入程序代碼。輸入好代碼后點擊“文
21、件/保存”。</p><p> 4)把源文件添加到項目中,用鼠標指在目標工作區(qū)的目標1,點擊右鍵在彈出的菜單中選擇添加文件到源代碼組,在彈出的添加文件框中,選擇需要添加到項目中的文件。 </p><p> 5)開始編譯,對項目文件進行編譯。若沒有錯誤后進行硬件調試。</p><p> 4.2軟件設計流程圖</p><p><b&g
22、t; 五、結束語</b></p><p> 課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。隨著科學技術發(fā)展的日新日異,單片機已經成為當今計算機應用中空前活躍的領域, 在生活中可以說得是無處不在。因此作為電子信息工程專業(yè)的學生來說掌握單片機的開發(fā)技術是十分重要的。 </p>&l
23、t;p> 我的題目是簡易計算器,對于我們這些實踐中的新手來說,這是一次考驗。怎么才能找到課堂所學與實際應用的最佳結合點?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計劃更具有序性,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設計我學到很多很多的東西,學會了怎么樣去制定計劃,怎么樣去實現這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識,掌握了一種系
24、統(tǒng)的研究方法,可以進行一些簡單的編程。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。同時在設計的過程中發(fā)現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,對單片機匯編語言掌握得不夠好。 這次課程設計通過我們小
25、組的努力終于順利完成了,在設計中遇到了很多編程問題,最后在老師的辛勤指導下,終于迎刃而解,在此我表示感謝!同時,對給過我?guī)椭乃型瑢W和指導老師再次表示忠心的感謝!</p><p><b> 六、參考文獻</b></p><p> 1、《典型模塊設計實例導航》編著:求是科技</p><p> 2、《基于Proteus的8051單片機實例教
26、程》主編:李學禮</p><p> 3、《單片機c語言程序設計實訓100例》主編:彭偉</p><p> 4、《單片機實訓教程》主編:貢雪梅</p><p> 5、《Proteus教程》主編:朱清慧</p><p> 6、《單片機技術“做中學”案例教程》主編:陳石勝</p><p><b> 七、附
27、錄</b></p><p><b> 儀器名稱及數量</b></p><p><b> 顯示、乘法、除法</b></p><p><b> 加法、減法</b></p><p><b> c語言程序編程</b></p>&l
28、t;p> #include <reg51.h></p><p> #include <ctype.h></p><p> #include "calc.h" </p><p> static data long lvalue; </p><p> static data long r
29、value;</p><p> static data char currtoken;</p><p> static data char lasttoken; </p><p> static data char lastpress; </p><p> static xdata char outputbuffer[MAX_DIS
30、PLAY_CHAR];//輸出緩沖</p><p> //----------------------------------------------</p><p> //主程序 //------------- </p><p> void main()</p><p><b> { </b></p&g
31、t;<p><b> //變量初始化 </b></p><p> lvalue=0; </p><p> rvalue=0; </p><p> currtoken='='; </p><p> lasttoken='='; </p><
32、p><b> //初始化LCD </b></p><p> initialise(); </p><p> calc_putput(OK); </p><p> calc_evaluate();</p><p><b> } </b></p><p>
33、 //----------------------------------------- </p><p> //獲取按鍵值并進行計算處理 </p><p> //-----------------------------------------</p><p> void calc_evaluate() </p><p><b&
34、gt; { </b></p><p> char data key; </p><p> int data i; </p><p> char xdata number[MAX_DISPLAY_CHAR]; </p><p> char xdata *bufferptr; </p><p>
35、<b> //清除緩沖 </b></p><p> for(i=0;i<=MAX_DISPLAY_CHAR;i++) number[i]=' '; </p><p> bufferptr=number; </p><p> while(1) </p><p><b&g
36、t; { </b></p><p> key=calc_getkey();</p><p> if(calc_testkey(key)) </p><p><b> { </b></p><p> if(bufferptr!=
37、&number[MAX_DISPLAY_CHAR-2]) </p><p><b> { </b></p><p> *bufferptr=key; </p><p>
38、calc_display(number); </p><p> bufferptr++; </p><p><b> } </b></p><p><b> }
39、0; </b></p><p><b> else </b></p><p><b> { </b></p><p> if(lasttoken=='0')
40、0; lvalue=calc_asciidec(number);</p><p> else rvalue=calc_asciidec(number); </p><p><b> //清除數字緩沖</b></p><p>
41、bufferptr=number; </p><p> for(i=0;i<=MAX_DISPLAY_CHAR;i++) number[i]=' '; </p><p> //處理操作符
42、0; </p><p> currtoken=key; </p><p> if(currtoken=='C') calc_opfunctions(currtoken); </p>&l
43、t;p> else calc_opfunctions(lasetoken); </p><p> //清除輸出緩沖 </p><p> for(i=0;i<=MAX_DISPLAY_CHAR;i++)
44、 outpufbuffer[i]=' '; </p><p> bufferptr=number; </p><p> if(currtoken!0x3D)
45、0;lasttoken=currtoken; </p><p><b> } </b></p><p> lastpress=key; </p><p><b> }</b></p><p><b&
46、gt; } </b></p><p> //-------------------------------------------</p><p> // 根據運算符按鍵進行運算處理</p><p> //--------------------------------------------
47、;void calc_opfunctions (char token)</p><p><b> { </b></p><p> char data result; </p><p> switch(token)</p><p>&l
48、t;b> { </b></p><p> case '+':if(currtoken=='='||isdigit(lastpress)) </p><p><b> { </b></p><p> lvalue+=rvalu
49、e; </p><p> result=calc_chkerror(lvalue); </p><p><b> } </b></p><p> else result=SLEEP; </p><p><b> break;
50、60; </b></p><p> case '-':if(currtoken=='='||isdigit(lastpress)) </p><p><b> { </b></p><p> Lvalue-=rvalue
51、; </p><p> result=calc_chkerror(lvalue); </p><p><b> } </b></p><p> else result=SLEEP; </p><p><b>
52、 break; </b></p><p> case '*':if(currtoken=='='||isdigit(lastpress)) </p><p><b> { </b></p><p> lva
53、lue*=rvalue; </p><p> result=calc_chkerror(lvalue); </p><p><b> } </b></p><p> else result=SLEEP; </p><p><
54、b> break; </b></p><p> case '/':if(currtoken=='='||isdigit(lastpress)) </p><p><b> {</b></p><p> if (rvalue)</p>
55、<p><b> { </b></p><p> lvalue/=rvalue; </p><p> result=calc_chkerror(lvalue); </p><p><b> }
56、;</b></p><p> else result=SLEEP; </p><p><b> }</b></p><p> else result=SLEEP; </p><p><b> break; </b></p>
57、<p><b> //取消 </b></p><p> case 'C':lvalue=0; rvalue=0; currtoke
58、n='0'; lasttoken='0'; </p><p> result=OK; </p><p><b> break
59、; </b></p><p> default:result=SLEEP;</p><p><b> }</b></p><p> calc_output(result);</p><p><b> } </b></p><p> /
60、/--------------------------------------------------------</p><p> // 檢查待顯示數據的上界和下界</p><p> // 例如,99999999 and -99999999 </p><p>
61、//--------------------------------------------------------</p><p> int calc_chkerror (long num)</p><p><b> { </b></p><p> if(num>=-99999999&
62、;&num<=99999999) return OK; else return ERROR;</p><p><b> } </b></p><p> //--------------------------------
63、---------------------------</p><p> // 根據操作狀態(tài)輸出 </p><p> //----------------------------------------------------------</p><p> void calc_output {int status}&
64、lt;/p><p> - { switch(status)</p><p><b> { </b></p><p> case OK:calc_deaplay(calc_decascii(lvalue)); break;&
65、#160; </p><p> case SLEEP: break; </p><p> case ERROR:calc_display("Exception"); break; </
66、p><p> default:calc_display("Exception") break; </p><p><b> } </b></p><p><b> } </b></p&
67、gt;<p> //----------------------------------------------------</p><p> //將ASCII字符串轉換為浮點數 </p><p> //----------------------------------------------------</p><p> long
68、 calc_asciidec (char *buffer)</p><p><b> {</b></p><p> long data value; </p><p> long data digit; </p><p>&l
69、t;b> value=0; </b></p><p> while(*buffer!=' ')</p><p><b> { </b></p><p> digit=*buffer-'0'; </p><p>
70、 value=value*10+digit; </p><p><b> buffer++;</b></p><p><b> } </b></p><p> return value;</p><p><b> } </b>&l
71、t;/p><p> //----------------------------------------------------</p><p> //將浮點數轉換為ASCII字符串 </p><p> //---------------------------------------------------- </p><
72、p> char *calc_decascii(long num)</p><p><b> {</b></p><p> long data temp=num;</p><p> char xdata *avvayptr=&outputbuffer[MAX_DIS
73、PLAY_CHAR]; </p><p> long data divisor=10;</p><p> long data result; </p><p> char data remainder,asciival; </p><p> in
74、t data i; </p><p> //如果計算結果為0。,則在緩沖中插入0并結束</p><p> if(!temp) </p><p><b> { </b></p><p> *arrayptr='0';
75、; goto done; </p><p><b> } </b></p><p> if(temp<0) //處理負數</p><p><b> { </b></p><p> outputbuffer[0]=&
76、#39;-'; temp-=2*temp;</p><p><b> } </b></p><p> for(i=0;i<sizeof(outputbuffer);i++) </p><p><b> { </b></p>&
77、lt;p> remainber=temp%divisor; </p><p> result=temp/divisor; </p><p> if((!remainder)&&(!result)) *arrayptr=' '; </
78、p><p><b> else </b></p><p><b> { </b></p><p> asciival=remainder+'0'; </p><p> *arrayptr=asciiva
79、l; </p><p><b> } </b></p><p> temp/=10; </p><p> //為“—”號保留位置 </p><p> if(arrayptr!=&outputbuffer[1]) arra
80、yptr--; </p><p><b> } </b></p><p> done:return outputbuffer;</p><p><b> } </b></p><p> //-------------------------
81、----------------------- </p><p> //測試按鍵時數字還是操作符,如果是數字則返回1.是操作符時返回0 </p><p> //------------------------------------------------ </p><p> char calc_testkey
82、;(char key)</p><p><b> {</b></p><p> if(isdigit(key)) return 1; else teturn 0;</p><p><b> } <
83、;/b></p><p> //------------------------------------------------ </p><p> //調用input例程搜索按鍵,并返回按鍵的ASCII碼值</p><p> //------------------------------------------------ <
84、;/p><p> char calc_getkey()</p><p><b> { </b></p><p> char data mykey; </p><p><b> do</b></p><p><b>
85、; { </b></p><p> mykey=input(); </p><p> } while(mykey==0);</p><p> return mykey;</p><p><b> } </b></p><
86、;p> //------------------------------------------------ </p><p> //調用Output和Clearscreen例程向LCD輸出ASCII</p><p> //------------------------------------------------ </p><p&g
87、t; void calc_display (char buf[MAX_DISPLAY_CHAR]) </p><p><b> { </b></p><p> int data i=0;</p><p> clearscreen(); </p>
88、<p> for(i;i<=MAX_DISPLAY_CHAR;i++) </p><p><b> { </b></p><p> if(buf[i]!=' ') output(buf[i]); </p><p><
89、;b> }</b></p><p><b> } </b></p><p> //----------------------calc.h---------------------</p><p><b> //本例頭文件 </b></p><p>
90、//-------------------------------------------------</p><p> typedef unsigned short WORD;</p><p> typedef unsigned char BYTE; </p><p> //-
91、----------------------------------------------- </p><p> //定義適合屏幕顯示的ASCII字符的最大個數</p><p> //------------------------------------------------</p><p> #define MAX_DISPLAY_
92、CHAR 9 </p><p> //------------------------------------------------</p><p><b> //錯誤處理狀態(tài) </b></p><p> //------------------------------------------------&
93、#160;</p><p> enum ERROR {OK=0,SLEEP=1,ERROR=2};</p><p> //------------------------------------------------</p><p><b> //函數聲明 </b></p><p>
94、 //------------------------------------------------</p><p> void calc_evaluate(); </p><p> void calc_opfunctions (char token); </p><p> char&
95、#160;calc_testkey (char ch); </p><p> long calc_asciidec (char *buffer);</p><p> char *calc_decascii (long num);</p><p
96、> int calc_chkerror (long num);</p><p> void calc_output (int status);</p><p> char calc_getkey(); </p><p> void calc
97、_display(char buf[MAX_DISPLAY_CHAR]); </p><p> void initialise();</p><p> char input(); </p><p> char output(char ch);</p><p> vo
98、id clearscreen; </p><p> //---------------------------lcd.c-------------------------</p><p> //單行液晶顯示程序 </p><p> //------------------------------------------------
99、--------- </p><p> #include<reg51.h></p><p> #include<absacc.h> </p><p> #define uchar unsigned char </p><p> #define
100、;LCD_CMD_WR 0x00</p><p> #define LCD_DATA_WR 0x01</p><p> #define LCD_BUSY_RD 0x02</p>&
101、lt;p> #define LCD_DATA_RD 0x03</p><p> #define LCD_PAGE 0x80 </p><p> #define LCD_CLS &
102、#160; 1</p><p> #define LCD_HOME 2</p><p> #define LCD_SET
103、MODE 4 </p><p> #define LCD_SETVISIBLE 8</p><p> #define LCD_SHIFT
104、; 16 </p><p> #define LCD_SETFUNCTION 32</p><p> #define LCD_SETCGADDR 64</p><p> #define LCD_S
105、ETDDADDR 128</p><p> sbit bflag=ACC^7;//忙標志位 </p><p> void wrcmd(uchar); </p><p> void output(char);</p><p> void
106、60;busywait(); </p><p> //------------------------------------------------</p><p><b> //初始化LCD </b></p><p> //----------------------------------------------
107、-- </p><p> void initialise() </p><p><b> { </b></p><p> wrcmd(0x30); //1行8位</p><p> wrcmd(LCD_SETVISIBLE+4);
108、 //顯示開,關光標 </p><p> wrcmd(LCD_SETDDADDR+15); //從右邊開始顯示 </p><p> wrcmd(LCD_SETMODE+3); // 遞增左移</p><p><b&
109、gt; } </b></p><p> //------------------------------------------------</p><p> //清屏并將顯示位置起點設置在最右邊</p><p> //------------------------------------------------ </
110、p><p> void clearscreen()</p><p><b> {</b></p><p> wrcmd(LCD_CLS); </p><p> wrcmd(LCD_SETDDADDR+15); </p><p><b&
111、gt; } </b></p><p> //------------------------------------------------</p><p> //向LCD寫命令 </p><p> //------------------------------------------------</p>&l
112、t;p> void wrcmd(uchar cmd)</p><p><b> { </b></p><p> uchar volatile pdata *p=LCD_CMD_WR; </p><p> P2=LCD_PAGE; </p>
113、<p><b> *p=cmd;</b></p><p> //上面三行可用下面的代碼替換 </p><p> //XBYTE[0x8000]=cmd; </p><p> busywait(); } </p><p> //-----------------
114、-------------------------------</p><p> //向LCD寫一個字符 </p><p> //------------------------------------------------</p><p> void output(char ch)</p><p>&l
115、t;b> {</b></p><p> char volatile pdata *p=LCD_DATA_WR; </p><p> P2=LCD_PAGE; </p><p><b> *p=ch; </b></p><p> //上
116、面三行可用下面的代碼替換 </p><p> //XBYTE[0x8001]=ch; </p><p> busywait();</p><p><b> } </b></p><p> //----------------------------------------------
117、--</p><p><b> //忙等待 </b></p><p> //------------------------------------------------</p><p> void busywait()</p><p><b> { </b>
118、</p><p> uchar volatile pdata *p=LCD_BUSY_RD; </p><p> P2=LCD_PAGE; </p><p> //上面兩行可改成:</p><p> //uchar volatile pdata
119、;*p=0x8002; </p><p><b> Do</b></p><p><b> { </b></p><p><b> ACC=*p; </b></p><p> } while(bflag==1);</p>
120、;<p> //上述所有代碼也可用以下代碼替換</p><p><b> /* </b></p><p><b> do </b></p><p><b> { </b></p><p> ACC=XBYTE[0
121、x8002];</p><p> } while(bflag==1); </p><p><b> */</b></p><p><b> } </b></p><p> //------------------keypad.c-----
122、-------------- </p><p> //鍵盤掃描函數char input();返回按鍵的ASCII碼</p><p> //---------------------------------------------</p><p> #include<reg51.h> </p><p&
123、gt; #include<intrins.h> </p><p> char code keycodes[]=</p><p><b> {</b></p><p> '7','8','9','/',</p>
124、<p> '4','5','6','*',</p><p> '1','2','3','-', </p><p> 'C','0','=','+' </p
125、><p><b> }; </b></p><p> char data keyflags[16]; </p><p> //------------------------------------------------</p><p> //獲取鍵盤按鍵子程序 &
126、lt;/p><p> //------------------------------------------------</p><p> char input()</p><p><b> { </b></p><p> char *pKeyflag=keyflags; &
127、#160; //標識按鍵指針 </p><p> char RowAddr=0xef; //鍵盤行
128、地址1110 1111 </p><p> char ColData=0; //列數據
129、</p><p> char i,j,Tmp=0; </p><p> for(i=0;i<4;i++) </p><p><b> { </b></p><p> P2=RowAddr; //在P2端口設置行地址
130、0; </p><p> _nop_(); </p><p> Tmp=P1&0x0f; //從P1端口讀取列數據 </p><p> for(j=0;j<4;j++) </p><p><b> { &
131、#160; </b></p><p> ColData=Tmp; //保存當前列數據 </p><p> if((Tmp&0x01)==0x00) //如果有鍵按下 </p>
132、<p><b> { </b></p><p> Tmp=*pKeyflag;</p><p> *pKeyflag=1; //標識按鍵&
133、#160; </p><p> if(Tmp==0) //有新按鍵按下 </p
134、><p><b> { </b></p><p> P2=0xff; </p><p> return keycodes[pKeyflag-keyflags];</p><p><b> }
135、160; </b></p><p><b> } </b></p><p> else *pKeyflag=0; </p><p> pKeyflag++; </p><p> T
136、mp=ColData>>1; </p><p><b> } </b></p><p> RowAddr<<=1;</p><p><b> } </b></p><p><b> P2=0xff; <
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計報告-簡易計算器
- 簡易計算器單片機課程設計報告
- 單片機課程設計報告-- 簡易計算器設計
- 單片機課程設計--簡易計算器
- 單片機課程設計簡易計算器
- 單片機課程設計-簡易計算器
- 單片機課程設計簡易計算器
- 單片機課程設計--簡易計算器
- 課程設計---單片機簡易計算器設計
- 單片機課程設計--簡易數字計算器
- 單片機課程設計---簡易計算器的設計
- 單片機課程設計--簡易計算器的設計
- 單片機課程設計報告--簡易計算器的設計、制作
- 基于51單片機簡易計算器課程設計
- 單片機課程設計報告---計算器
- 簡易計算器設計-單片機原理及應用課程設計
- 課程設計-單片機計算器
- 單片機計算器課程設計
- 單片機課程設計--計算器
- 單片機課程設計-計算器
評論
0/150
提交評論