單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告_第1頁
單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告_第2頁
單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告_第3頁
單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告_第4頁
單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

大連民族學(xué)院2007級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告PAGEPAGE2大連民族學(xué)院2007級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告機(jī)電信息工程學(xué)院?jiǎn)纹瑱C(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告系:專業(yè):班級(jí):設(shè)計(jì)題目:多功能簡(jiǎn)易計(jì)算器學(xué)生姓名:指導(dǎo)教師:完成日期:2010年5月31日目錄TOC\o"1-2"\h\z\u一、設(shè)計(jì)任務(wù)和性能指標(biāo) 21.1設(shè)計(jì)任務(wù) 21.2性能指標(biāo) 2二.設(shè)計(jì)方案 2三.系統(tǒng)硬件設(shè)計(jì) 33.1單片機(jī)最小系統(tǒng) 33.2鍵盤接口電路 33.3數(shù)碼管顯示電路 43.4錯(cuò)誤報(bào)警電路 5四、系統(tǒng)軟件設(shè)計(jì) 64.1鍵盤掃描子程序設(shè)計(jì) 64.2移位子程序及結(jié)果計(jì)算子程序設(shè)計(jì) 104.3顯示子程序設(shè)計(jì) 124.4主程序設(shè)計(jì) 13五、調(diào)試及性能分析 135.1調(diào)試步驟 135.2性能分析 14六、心得體會(huì) 14參考文獻(xiàn) 14附錄1系統(tǒng)硬件電路圖 15附錄2程序清單 16一、設(shè)計(jì)任務(wù)和性能指標(biāo)1.1設(shè)計(jì)任務(wù)利用單片機(jī)及外圍接口電路(鍵盤接口和顯示接口電路)設(shè)計(jì)制作一個(gè)計(jì)算器,用LED顯示計(jì)算數(shù)值及結(jié)果。要求用Protel畫出系統(tǒng)的電路原理圖(要求以最少組件,實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)所要求的功能),印刷電路板(要求布局合理,線路清晰),繪出程序流程圖,并給出程序清單(要求思路清晰,盡量簡(jiǎn)潔,主程序和子程序分開,使程序有較強(qiáng)的可讀性)。1.2性能指標(biāo)加法:四位加法,計(jì)算結(jié)果若超過四位則顯示計(jì)算錯(cuò)誤減法:四位減法,計(jì)算結(jié)果若小于零則顯示計(jì)算錯(cuò)誤乘法:個(gè)位數(shù)乘法除法:整數(shù)除法有清零功能,計(jì)算錯(cuò)誤報(bào)警二.設(shè)計(jì)方案按照系統(tǒng)設(shè)計(jì)的功能的要求,初步確定設(shè)計(jì)系統(tǒng)由主控模塊、顯示模塊、錯(cuò)誤報(bào)警模塊、鍵掃描接口電路共四個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1.1所示。主控芯片使用51系列AT89C52單片機(jī),采用高性能的靜態(tài)80C51設(shè)計(jì),由先進(jìn)工藝制造,并帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能、低功耗的8位COMS微處理芯片,市場(chǎng)應(yīng)用最多。鍵盤電路采用4*4矩陣鍵盤電路。顯示模塊采用4枚共陽極數(shù)碼管和74ls273鎖存芯片構(gòu)成等器件構(gòu)成。錯(cuò)誤報(bào)警電路采用5V蜂鳴器。三.系統(tǒng)硬件設(shè)計(jì)3.1單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)就是支持主芯片正常工作的最小電路部分,包括主控芯片、復(fù)位電路和晶振電路。主控芯片選取STC89C52RC芯片,因其具有良好的性能及穩(wěn)定性,價(jià)格便宜應(yīng)用方便。晶振選取11.0592MHz,晶振旁電容選取30pF。采用按鍵復(fù)位電路,電阻分別選取100Ω和10K,電容選取10μF。以下為單片機(jī)最小系統(tǒng)硬件電路圖。單片機(jī)最小系統(tǒng)硬件電路3.2鍵盤接口電路計(jì)算器所需按鍵有:數(shù)字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’功能鍵:’+’,’-‘,’*’,’/’,’=’,’C(清零)’共計(jì)16個(gè)按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行和四列的8個(gè)公共端分別接P1.0~P1.7,這樣掃描P1口就可以完成對(duì)矩陣鍵盤的掃描,通過對(duì)16個(gè)按鍵進(jìn)行編碼,從而得到鍵盤的口地址,對(duì)比P1口德掃描結(jié)果和各按鍵的地址,我們就可以得到是哪個(gè)鍵按下,從而完成鍵盤的功能。以下為鍵盤接口電路的硬件電路圖鍵盤接口電路3.3數(shù)碼管顯示電路采用4位數(shù)碼管對(duì)計(jì)算數(shù)據(jù)和結(jié)果的顯示,這里選取共陽數(shù)碼管,利用NPN三極管對(duì)數(shù)碼管進(jìn)行驅(qū)動(dòng),為了節(jié)省I/O資源,采取動(dòng)態(tài)顯示的方法來顯示計(jì)算數(shù)據(jù)及結(jié)果。利用74273鎖存器來實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示,P0口輸出顯示值,P2.4為段選口,控制273鎖存器的時(shí)鐘引腳,從而得到對(duì)數(shù)碼管輸入數(shù)據(jù)的控制。P2.0~P2.3用來作為位選端,控制哪幾位數(shù)碼管進(jìn)行顯示。以下為數(shù)碼顯示電路的硬件電路圖數(shù)碼顯示電路硬件電路圖3.4錯(cuò)誤報(bào)警電路錯(cuò)誤報(bào)警電路就是在計(jì)算結(jié)果出現(xiàn)錯(cuò)誤時(shí)或輸入數(shù)據(jù)出現(xiàn)錯(cuò)誤時(shí),發(fā)出聲音警報(bào),提示使用者錯(cuò)誤出現(xiàn)。這里就采用5V蜂鳴器作為報(bào)警設(shè)備,利用PNP三極管對(duì)蜂鳴器進(jìn)行驅(qū)動(dòng),有P2.5對(duì)其進(jìn)行控制,這樣在出現(xiàn)錯(cuò)誤的同時(shí)用P2.5輸出低,就可以使蜂鳴器工作,完成報(bào)警任務(wù)。以下為報(bào)警電路硬件電路圖報(bào)警電路硬件電路圖系統(tǒng)整體硬件電路圖見附錄一四、系統(tǒng)軟件設(shè)計(jì)4.1鍵盤掃描子程序設(shè)計(jì)要進(jìn)行數(shù)據(jù)的計(jì)算就必須先進(jìn)行數(shù)據(jù)的輸入,也就必須確定按鍵輸入的數(shù)值是什么,這就需要對(duì)鍵盤進(jìn)行掃描,從而確定究竟是哪個(gè)鍵按下。對(duì)于鍵盤的掃描,既可以用行掃描也可以用列掃描,這里采用行掃描的方法來完成對(duì)鍵盤的掃描。行掃描就是逐行掃描鍵盤,看是哪一行有鍵按下,再通過返回的鍵碼來確定究竟是哪個(gè)按鍵按下。如對(duì)第一行掃描就令P1.0為低,P1口其余為高,這樣若第一行有鍵按下,則P1口的值就會(huì)由0xfe變?yōu)槠渌?,再由這個(gè)值來確定是哪個(gè)鍵按下。以下為鍵盤掃描子程序的程序清單。ucharkeyscan(){ inti; P1=0xfe; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xee:{rdat++;num=1;left(rdat,num);} break; case0xde:{rdat++;num=2;left(rdat,num);} break; case0xbe:{rdat++;num=3;left(rdat,num);} break; case0x7e:{rdat++;num=4;left(rdat,num);} break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfd; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xed:{rdat++;num=5;left(rdat,num);} break; case0xdd:{rdat++;num=6;left(rdat,num);} break; case0xbd:{rdat++;num=7;left(rdat,num);} break; case0x7d:{rdat++;num=8;left(rdat,num);} break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfb; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xeb:{rdat++;num=9;left(rdat,num);} break; case0xdb:{rdat++;num=10;left(rdat,num);} break; case0xbb:{equ();} break; case0x7b:{rdat=0;add=0;subb=0;mul=0;div=0; result=0; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xf7; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xe7:{rdat=0;add=1;subb=0; mul=0;div=0; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; case0xd7:{rdat=0;add=0;subb=1; mul=0;div=0; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} }result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; case0xb7:{rdat=0;add=0;subb=0; mul=1;div=0; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; case0x77:{rdat=0;add=0;subb=0; mul=0;div=1; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }returnnum;}4.2移位子程序及結(jié)果計(jì)算子程序設(shè)計(jì)輸入數(shù)據(jù)要存儲(chǔ)在一四位數(shù)組內(nèi),而我們鍵入的值是數(shù)據(jù)的高位,后鍵入的值是低位,這樣我們就需要在輸入低位數(shù)值時(shí)將高位數(shù)值從數(shù)組的低位移向數(shù)組的高位,這就是編寫移位子程序的目的。對(duì)于結(jié)果計(jì)算子程序,包含加、減、乘、除四種運(yùn)算。以加法運(yùn)算為例,各種運(yùn)算各有其標(biāo)志位來代表計(jì)算類型,當(dāng)加法標(biāo)志位add=1是,就將輸入的兩個(gè)數(shù)據(jù)按照加法進(jìn)行計(jì)算。首先將數(shù)組內(nèi)的數(shù)按照對(duì)應(yīng)的位關(guān)系,將其轉(zhuǎn)化為一個(gè)十進(jìn)制數(shù),這樣我們就得到了加速和被加數(shù)這樣倆個(gè)十進(jìn)制數(shù),從而我們就可以簡(jiǎn)單的將兩個(gè)數(shù)進(jìn)行相加,結(jié)果就是我們所求的數(shù)值。但這個(gè)數(shù)值不能直接顯示到數(shù)碼管上,我們還要對(duì)其進(jìn)行處理,使其變?yōu)閷?duì)應(yīng)進(jìn)位的四個(gè)數(shù)存入數(shù)組內(nèi),以便顯示。既通過對(duì)結(jié)果數(shù)值分別除以1000、100、10和對(duì)10取余,得到我們想要的四個(gè)數(shù),送顯示子程序顯示。其余減、乘、除的計(jì)算方法與加法的計(jì)算方法一樣,這里不再累述。以下為移位子程序和結(jié)果計(jì)算子程序的程序清單。voidleft(ucharrx,uchardate){ switch(rx) { case1:dat[0]=date;break; case2:dat[1]=dat[0],dat[0]=date;break; case3:dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break; case4:dat[3]=dat[2],dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break; }}voidequ(){ inti,j,k; longints; if(add==1){for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; result=result+s;add=0;} if(subb==1){for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; result=result-s;subb=0;} if(mul==1){for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; result=result*s;mul=0; }if(div==1){for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } s=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; result=result/s;div=0; } If(result>9999){dat[0]=11;dat[3]=dat[2]=dat[1]=0;} if(result<=9999) { dat[0]=result%10; dat[1]=(result/10)%10; dat[2]=(result/100)%10; dat[3]=(result/1000)%10; } for(j=3;j>0;j--) {if(dat[j]>0) { for(k=j-1;k>=0;k--) { if(dat[k]==0){dat[k]=10;} } } } if(dat[0]==0){dat[0]=10;}}4.3顯示子程序設(shè)計(jì)從始至終無論是輸入的計(jì)算數(shù)據(jù),還是計(jì)算后的結(jié)果值。都存儲(chǔ)在同一數(shù)組dat[]中,這樣我們只要在顯示時(shí)一直調(diào)用dat[]中的值,就能正確的顯示數(shù)據(jù)。以下為顯示子程序的程序清單。voiddisplay(){ ucharaa; keyscan(); P2=0x07; aa=dat[0]; P0=table[aa]; P2=0x27; delay(3); P2=0x0b; aa=dat[1]; P0=table[aa]; P2=0x2b; delay(3); P2=0x0d; aa=dat[2]; P0=table[aa]; P2=0x2d; delay(3); P2=0x0e; aa=dat[3]; P0=table[aa]; P2=0x2e; delay(3); }4.4主程序設(shè)計(jì)主程序既把以上各子程序串連成一個(gè)整體,使整個(gè)程序循環(huán)運(yùn)行。而在以上程序中也已經(jīng)加入了個(gè)程序之間的連接點(diǎn),首先進(jìn)入程序后就立即進(jìn)入顯示子程序,而顯示子程序內(nèi)又調(diào)用鍵盤掃描子程序,若有鍵按下,則會(huì)跳轉(zhuǎn)到移位子程序和結(jié)果計(jì)算子程序進(jìn)行相應(yīng)的處理。通過計(jì)算或移位后,數(shù)組內(nèi)的值發(fā)生改變,顯示的值也會(huì)同時(shí)發(fā)生改變。之后再進(jìn)行鍵盤掃描,如此反復(fù)運(yùn)行,就構(gòu)成了程序的整體。以下為主程序清單。voidmain(){ num=0; while(1) { display(); }}整體程序清單見附錄二。五、調(diào)試及性能分析5.1調(diào)試步驟在焊接好器件后,先不要將芯片插在芯片座上,要先驗(yàn)證先板上電源是否好用,有無短路等。接上USB電源,用萬用表測(cè)量個(gè)芯片座對(duì)應(yīng)電源和地之間的電壓值,觀察電壓值是否正常。一切正常后方可將芯片插入芯片座,以繼續(xù)測(cè)試其他功能。將芯片插上后,對(duì)各個(gè)模塊進(jìn)行調(diào)試,按鍵是否工作正常,數(shù)碼管是否顯示正常等。編寫相關(guān)部分的測(cè)試程序?qū)ζ溥M(jìn)行測(cè)試。各部分硬件檢測(cè)無誤后,下載程序進(jìn)行整體調(diào)試,一切正常后,結(jié)束調(diào)試過程。在具體調(diào)試時(shí)首先遇到的問題是程序無法下載進(jìn)入單片機(jī),通過將電路板接線與原理電路圖接線的對(duì)比發(fā)現(xiàn),串口芯片與單片機(jī)連接的輸入,輸出接反,重新用銅線連接后,依然無法下載程序。后找到原因是由于下載串口與設(shè)計(jì)封裝不符,用相對(duì)應(yīng)的下載線可以下載。成功下載程序后,發(fā)現(xiàn)數(shù)碼管顯示不正確,查看后發(fā)現(xiàn)有先沒有連接,可能是制板時(shí)漏印,連接后顯示正常。5.2性能分析對(duì)于計(jì)算器的性能,主要的衡量指標(biāo)就在于計(jì)算的精度,本次制作的計(jì)算器性能情況如下:加法運(yùn)算:四位加法運(yùn)算,和值不超過9999,若超過上限,則顯示錯(cuò)誤提示E,蜂鳴器報(bào)警提示。減法運(yùn)算:四位減法運(yùn)算,若結(jié)果為負(fù),對(duì)其取絕對(duì)值。乘法運(yùn)算:積不超過9999的乘法運(yùn)算,若超出上限,顯示錯(cuò)誤提示E,蜂鳴器報(bào)警提示。除法運(yùn)算:整數(shù)除法,既計(jì)算結(jié)果為整數(shù),若除數(shù)為零,則顯示錯(cuò)誤提示E,蜂鳴器報(bào)警提示。通過對(duì)實(shí)際性能的分析,可以得到本次設(shè)計(jì)滿足設(shè)計(jì)的要求。六、心得體會(huì)通過本次課程設(shè)計(jì)我真正的自己完成了對(duì)給定要求系統(tǒng)的硬件設(shè)計(jì)、電路設(shè)計(jì)、電路板設(shè)計(jì)、軟件設(shè)計(jì)以及對(duì)成品的調(diào)試過程。從整個(gè)過程中學(xué)習(xí)到了很多方面的知識(shí),了解到以往學(xué)習(xí)中自己知識(shí)在某方面的不足之處,是對(duì)以往學(xué)習(xí)科目的一種貫穿和承接,從而能更好的認(rèn)識(shí)和學(xué)習(xí),也對(duì)將來從事工作大有裨益。從本次課設(shè)中我也看到了自身的很多不足之處,對(duì)知識(shí)的掌握不夠扎實(shí),有一知半解的現(xiàn)象。有時(shí)做事不夠穩(wěn)定,過于毛躁,不能平心靜氣的去分析所遇到的問題和錯(cuò)誤。這在以后的工作和生活中是不可取的,通過對(duì)自身問題的認(rèn)識(shí)與改正相信再遇到同樣問題時(shí)會(huì)更好的解決。以后的設(shè)計(jì)實(shí)驗(yàn)也會(huì)更好的完成。參考文獻(xiàn)[1]徐維祥、劉旭敏.單片微型機(jī)原理及應(yīng)用.大連:大連理工大學(xué)出版社,1996[2]李光飛、樓然苗、胡佳文、謝象佐.單片機(jī)課程設(shè)計(jì)與實(shí)例指導(dǎo).北京:北京航空航天大學(xué)出版社,2004[3]余永權(quán).89系列FLASH單片機(jī)原理及應(yīng)用.北京:電子工業(yè)出版社,2002[4]李群芳,黃建.單片機(jī)微型計(jì)算機(jī)與接口技術(shù).北京:電子工業(yè)出版社,2001[5]樓然苗、李光飛.51系列單片機(jī)設(shè)計(jì)實(shí)例.北京:北京航空航天大學(xué)出版社,2003附錄1系統(tǒng)硬件電路圖附錄2程序清單#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitdula=P2^6;sbitwela=P2^7;sbitkey1=P3^4;ucharcodetable[]={0xff,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0x86};uchardat[]={10,0,0,0,0};uchars[],a[];ucharnum,temp,num1,rdat,add,subb,mul,div;unsignedlongintresult;voidleft(ucharrx,uchardate);ucharkeyscan();voidequ();voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddisplay();voidmain(){ num=0; while(1) { display(); }}voiddisplay(){ ucharaa; keyscan(); P2=0x07; aa=dat[0]; P0=table[aa]; P2=0x27; delay(3); P2=0x0b; aa=dat[1]; P0=table[aa]; P2=0x2b; delay(3); P2=0x0d; aa=dat[2]; P0=table[aa]; P2=0x2d; delay(3); P2=0x0e; aa=dat[3]; P0=table[aa]; P2=0x2e; delay(3); }ucharkeyscan(){ inti; P1=0xfe; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xee:{rdat++;num=1;left(rdat,num);} break; case0xde:{rdat++;num=2;left(rdat,num);} break; case0xbe:{rdat++;num=3;left(rdat,num);} break; case0x7e:{rdat++;num=4;left(rdat,num);} break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfd; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xed:{rdat++;num=5;left(rdat,num);} break; case0xdd:{rdat++;num=6;left(rdat,num);} break; case0xbd:{rdat++;num=7;left(rdat,num);} break; case0x7d:{rdat++;num=8;left(rdat,num);} break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfb; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xeb:{rdat++;num=9;left(rdat,num);} break; case0xdb:{rdat++;num=10;left(rdat,num);} break; case0xbb:{equ();} break; case0x7b:{rdat=0;add=0;subb=0;mul=0;div=0; result=0; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xf7; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case0xe7:{rdat=0;add=1;subb=0; mul=0;div=0; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; case0xd7:{rdat=0;add=0;subb=1; mul=0;div=0; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; case0xb7:{rdat=0;add=0;subb=0; mul=1;div=0; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; case0x77:{rdat=0;add=0;subb=0; mul=0;div=1; for(i=0;i<5;i++){ if(dat[i]==10) {dat[i]=0;} } result=dat[0]+10*dat[1]+100*dat[2]+1000*dat[3]; dat[0]=10;dat[1]=dat[2]=dat[3]=0; } break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0;

溫馨提示

  • 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)論