欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機計算器課程設(shè)計報告五篇范文

      時間:2019-05-15 00:20:25下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《單片機計算器課程設(shè)計報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《單片機計算器課程設(shè)計報告》。

      第一篇:單片機計算器課程設(shè)計報告

      基于單片機的簡易計算器設(shè)計

      基于單片機的簡易計算器設(shè)計

      一、設(shè)計任務(wù)和性能指標

      1.1設(shè)計任務(wù)

      利用單片機及外圍接口電路(鍵盤接口和顯示接口電路)設(shè)計制作一個計算器,用四位一體數(shù)碼管顯示計算數(shù)值及結(jié)果。要求用Protel 畫出系統(tǒng)的電路原理圖(要求以最少組件,實現(xiàn)系統(tǒng)設(shè)計所要求的功能),繪出程序流程圖,并給出程序清單(要 求思路清晰,盡量簡潔,主程序和子程序分開,使程序有較強的可讀性)。1.2性能指標

      1加法:能夠計算四位以內(nèi)的數(shù)的加法。2減法:能計算四位數(shù)以內(nèi)的減法。3乘法:能夠計算兩位數(shù)以內(nèi)的乘法。

      4除法:能夠計算四位數(shù)的乘法

      5有清零功能,能隨時對運算結(jié)果和數(shù)字輸入進行清零。

      二、系統(tǒng)設(shè)計方案

      按照系統(tǒng)設(shè)計的功能的要求,初步確定設(shè)計系統(tǒng)由單片機主控模塊、四位一體數(shù)碼管顯示模塊、鍵掃描接口電路共三個主要模塊組成。主控芯片使用51系列AT89C51單片機,采用高性能的靜態(tài)80C51設(shè)計,它由先進工藝制造,并帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位COMS微處理芯片,市場應(yīng)用最多。

      鍵盤電路采用4*4矩陣鍵盤電路。

      顯示模塊采用四位一體共陽極數(shù)碼管和SN74LS244鎖存芯片構(gòu)成等器件構(gòu)成。

      三、硬件系統(tǒng)設(shè)計

      1.單片機最小系統(tǒng)

      單片機最小系統(tǒng)就是支持主芯片正常工作的最小電路部分,包括主控芯片、復(fù)位電路和晶振電路。

      主控芯片選取STC89C51RC芯片,因其具有良好的性能及穩(wěn)定性,價格便宜應(yīng)用方便。

      晶振選取11.0592MHz,晶振旁電容選取30pF。

      采用按鍵復(fù)位電路,電阻分別選取100Ω和10K,電容選取10μF。單片機最小系統(tǒng)硬件電路圖如圖(1)所示。

      圖(1)單片機最小系統(tǒng)

      2.鍵盤接口電路

      計算器所需按鍵有:

      數(shù)字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’

      功能鍵:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C(清零)’

      共計16個按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行采用端口P0.0~P0.3,四列采用端口P3.0~P3.3,通過8個端口的的高低電平完成對矩陣鍵盤的控制。通過對16個按鍵進行編碼,從而得到鍵盤的口地址,對比P1口德掃描結(jié)果和各按鍵的地址,我們就可以得到是哪個鍵按下,從而完成鍵盤的功能。

      3.數(shù)碼管顯示電路

      采用4位一體的數(shù)碼管對計算數(shù)據(jù)和結(jié)果進行顯示,這里選取共陽數(shù)碼管,利用NPN三極管對數(shù)碼管進行驅(qū)動,為了節(jié)省I/O資源,采取動態(tài)顯示的方法來顯示計算數(shù)據(jù)及結(jié)果。

      利用SN74LS244N鎖存器來實現(xiàn)數(shù)碼管的動態(tài)顯示,P1口輸出顯示值,P2.0~P2.3為位選端口。通過鎖存器對段選信號的鎖存,最終得到對數(shù)碼管輸入數(shù)據(jù)的控制。

      以下為數(shù)碼顯示電路的硬件電路圖,左圖為數(shù)碼管驅(qū)動電路,右圖為段選信號鎖存電路。

      四.軟件設(shè)計部分

      根據(jù)選題要求,系統(tǒng)編程如下所示: #include “reg51.h” sbit P3_0=P3^0;sbit P3_1=P3^1;sbit P3_2=P3^2;sbit P3_3=P3^3;sbit P3_4=P3^4;sbit P3_5=P3^5;sbit P3_6=P3^6;sbit P3_7=P3^7;unsigned char sz[11],xs1[4],xs2[4],sj;int i,cs,bb,t1,t2,fh,s1,s2;void chushihua(){

      } void xianshi(unsigned char xs[4]){ int i,j;unsigned char zy;bb=1;xs1[0]=10;xs1[1]=10;xs1[2]=10;xs1[3]=10;xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;t1=0;t2=0;s1=s2=0;fh=0;cs=1;

      // zy=0x08;for(i=0;i<4;i++){ P2=(0xff-zy);

      P1=sz[xs[i]];

      } zy=(zy>>1);for(j=0;j<100;j++);

      for(i=0;i<100;i++);return;} unsigned char saomiao(){

      int i,j;unsigned char pp;for(i=0;i<1000;i++);P0=0xfe;P3=0x0f;pp=P3;if(P3_0==0)if(P3_1==0)if(P3_2==0)if(P3_3==0)

      {P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 7;} {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 8;} {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 9;} {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 11;} //==========1 P0=0xfd;P3=0x0f;pp=P3;if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 4;} if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 5;} if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 6;} if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 12;} //==========2 P0=0xfb;P3=0x0f;pp=P3;if(P3_0==0){P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 1;} if(P3_1==0){P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 2;} if(P3_2==0){P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 3;} if(P3_3==0){P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 13;} //==========3 P0=0xf7;P3=0x0f;

      pp=P3;if(P3_0==0)if(P3_1==0)if(P3_2==0)if(P3_3==0)return 10;

      {P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return 16;} {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return 0;} {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return 15;} {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return 14;} //===========4 } void chuli(unsigned char x){

      int i;if(x==16){

      } cs=0;return;if(x>=0 && x<10){ if(bb==1)

      {

      } if(s1= =4){cs=0;return;} else { for(i=3;i>0;i--)xs1[i]=xs1[i-1];

      } xs1[0]=x;s1++;t1=t1*10+x;if(bb==2){

      if(s2==4){cs=0;return;} else {

      } for(i=3;i>0;i--)xs2[i]=xs2[i-1];xs2[0]=x;s2++;t2=t2*10+x;} } if(x>10)

      {

      if(bb==1){fh=x;bb=2;return;} if(bb==2){ if(fh==11)t1=t1/t2;

      if(fh==12)t1=t1*t2;if(fh==13)t1=t1-t2;if(fh==14)t1=t1+t2;if(t1>=10000){cs=0;return;} else { if(t1>=0 && t1<10)

      {xs1[0]=t1;xs1[1]=10;xs1[2]=10;xs1[3]=10;}

      if(t1>=10 && t1<100){xs1[0]=t1%10;xs1[1]=t1/10;xs1[2]=10;xs1[3]=10;}

      if(t1>=100 && t1<1000)

      {xs1[0]=t1%10;xs1[1]=(t1-(t1/100)*100)/10;xs1[2]=t1/100;xs1[3]=10;}

      if(t1>=1000 && t1<10000)

      {xs1[0]=t1%10;xs1[1]=t1%100/10;xs1[2]=(t1-(t1/1000)*1000)/100;xs1[3]=t1/1000;}

      bb=2;

      }

      }

      } s2=0;t2=0;xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10;fh=x;} void main(){

      sz[0]=0xfc;sz[1]=0x60;sz[2]=0xda;sz[3]=0xf2;sz[4]=0x66;sz[5]=0xb6;sz[6]=0xbe;sz[7]=0xe0;sz[8]=0xfe;sz[9]=0xf6;sz[10]=0x00;cs=0;

      for(;;)

      {

      if(cs==0)chushihua();if(cs==1)sj=saomiao();if(cs==1 && sj!=10)chuli(sj);if(cs==1 &&(bb==1 || bb==2 && s2==0))xianshi(xs1);if(cs==1 &&(bb==2 && s2!=0))xianshi(xs2);

      } } 軟件設(shè)計好后,在KEIL上面進行仿真,把仿真得到的文件下載到Proteus里面進行仿真,得到Proteus仿真電路圖如下所示:

      圖(2)

      計算器Proteus仿真電路圖

      五.硬件電路焊接及調(diào)試

      根據(jù)電路圖紙,焊接好硬件電路,把程序下載到單片機芯片,接通好電源,進行調(diào)試。在焊接好器件后,先不要將芯片插在芯片座上,要先驗證先板上電源是否好用,有無短路等。接上USB電源,用萬用表測量個芯片座對應(yīng)電源和地之間的電壓值,觀察電壓值是否正常。一切正常后方可將芯片插入芯片座,以繼續(xù)測試其他功能。

      將芯片插上后,對各個模塊進行調(diào)試,按鍵是否工作正常,數(shù)碼管是否顯示正常等。編寫相關(guān)部分的測試程序?qū)ζ溥M行測試。

      各部分硬件檢測無誤后,下載程序進行整體調(diào)試,一切正常后,結(jié)束調(diào)試過程。

      用所設(shè)計的單片機進行數(shù)字計算,顯示結(jié)果與任務(wù)要求一致,焊接電路符合要求。六.課程設(shè)計心得

      兩周的時間,終于把單片機課程設(shè)計搞完了。整個體會還是比較多的。首先是題目的選擇,各方面的原因,自己還是想選個簡單點的題目,不過最后選來選去,還是選擇了計算器。由于自己對單片機編程還不是很熟悉,結(jié)果在設(shè)計的時候遇到了一系列問題,程序總是調(diào)試部處理,不過還好,最后在同學的幫助下終于把程序調(diào)試出來了,雖然程序設(shè)計實現(xiàn)的功能與老師要求的不盡相同,不過勉強還算可以。從這里我知道了基本知識的重要性。其實進行程序設(shè)計的時候主要是對各功能模塊的把握。計算器里面最難的一部分是矩陣鍵盤的掃描和編碼,那個費了很大力氣。

      另外一點就是硬件焊接調(diào)試部分。焊接的時候到時輕松,一個下午就焊接好了,然后是調(diào)試部分。調(diào)試花費的時間還是比較長的。不過有了上個學期數(shù)字電路焊接調(diào)試的經(jīng)驗,這次單片機調(diào)試還算是比較順利。我也是從電路板的正負電源檢測起,一步一步來,最終得到了想要的結(jié)果。調(diào)試的時候主要遇到了兩個問題。一個是鍵盤總是沒有反應(yīng),為了這個自己調(diào)試了很久,前前后后把電路板檢查了幾次,最后才發(fā)現(xiàn)是鍵盤本身的問題,和同學們換了個好鍵盤才行。另一個問題是總是顯示不出來1、4、7這三個數(shù)字。檢測來檢測去,發(fā)現(xiàn)來是在測試最小系統(tǒng)時在一個位選端接了高電平,對位選信號產(chǎn)生了影響。當把那個高電平去掉后,終于得到了正確的結(jié)果。

      總的來說這次課程設(shè)計達到了完成了基本任務(wù),達到了基本要求。通過親身對程序設(shè)計和電路焊接調(diào)試的體會,自己對單片機有了進一步的了解,單片機編程能力也得到了提高。電路板的焊接與調(diào)試,使自己電路調(diào)試的方法和思想進一步加強了。這次單片機課程設(shè)計應(yīng)該說是比較成功的。

      參考文獻:

      【1】徐維祥、劉旭敏:,《單片微型機原理及應(yīng)用》,大連理工大學出版社,1996年?!?】李光飛、樓然苗、胡佳文、謝象佐.,《單片機課程設(shè)計與實例指導(dǎo).》,北京航空航天大學出版社,2004年。

      【3】余永權(quán),《89系列FLASH單片機原理及應(yīng)用.》,電子工業(yè)出版社,2002?!?】楊恢先、黃輝先,《單片機原理及應(yīng)用》,人民郵電出版社,2006年?!?】常敏、王涵、范江波,《單片機應(yīng)用程序開發(fā)與實踐》,電子工業(yè)出版社,2009年。

      第二篇:單片機計算器課程設(shè)計報告

      大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      機電信息工程學院

      單片機系統(tǒng)課程設(shè)計報告

      完成日期:2010年5月31日

      系: 專

      業(yè): 班

      級: 設(shè)計題目: 學生姓名: 指導(dǎo)教師:

      多功能簡易計算器

      大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      一、設(shè)計任務(wù)和性能指標......................................................................2

      1.1設(shè)計任務(wù)..............................................................................................................................2 1.2性能指標..............................................................................................................................2 二.設(shè)計方案.............................................................................................2 三.系統(tǒng)硬件設(shè)計.....................................................................................3

      3.1單片機最小系統(tǒng)......................................................................................3 3.2鍵盤接口電路.....................................................................................................................3 3.3數(shù)碼管顯示電路.................................................................................................................4 3.4錯誤報警電路.....................................................................................................................5

      四、系統(tǒng)軟件設(shè)計..................................................................................6

      4.1鍵盤掃描子程序設(shè)計..........................................................................................................6 4.2移位子程序及結(jié)果計算子程序設(shè)計................................................................................10 4.3顯示子程序設(shè)計...............................................................................................................12 4.4主程序設(shè)計.......................................................................................................................13

      五、調(diào)試及性能分析............................................................................13

      5.1調(diào)試步驟...........................................................................................................................13 5.2性能分析...........................................................................................................................14

      六、心得體會........................................................................................14 參考文獻................................................................................................14 附錄1 系統(tǒng)硬件電路圖.......................................................................15 附錄2 程序清單.................................................................................16

      大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      一、設(shè)計任務(wù)和性能指標

      1.1設(shè)計任務(wù)

      利用單片機及外圍接口電路(鍵盤接口和顯示接口電路)設(shè)計制作一個計算器,用LED顯示計算數(shù)值及結(jié)果。

      要求用Protel 畫出系統(tǒng)的電路原理圖(要求以最少組件,實現(xiàn)系統(tǒng)設(shè)計所要求的功能),印刷電路板(要求布局合理,線路清晰),繪出程序流程圖,并給出程序清單(要求思路清晰,盡量簡潔,主程序和子程序分開,使程序有較強的可讀性)。1.2性能指標

      1.2.3.4.5.加法:四位加法,計算結(jié)果若超過四位則顯示計算錯誤 減法:四位減法,計算結(jié)果若小于零則顯示計算錯誤 乘法:個位數(shù)乘法 除法:整數(shù)除法

      有清零功能,計算錯誤報警

      二.設(shè)計方案

      按照系統(tǒng)設(shè)計的功能的要求,初步確定設(shè)計系統(tǒng)由主控模塊、顯示模塊、錯誤報警模塊、鍵掃描接口電路共四個模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1.1所示。主控芯片使用51系列AT89C52單片機,采用高性能的靜態(tài)80C51設(shè)計,由先進工藝制造,并帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位COMS微處理芯片,市場應(yīng)用最多。

      鍵盤電路采用4*4矩陣鍵盤電路。

      顯示模塊采用4枚共陽極數(shù)碼管和74ls273鎖存芯片構(gòu)成等器件構(gòu)成。

      錯誤報警電路采用5V蜂鳴器。

      大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      三.系統(tǒng)硬件設(shè)計

      3.1單片機最小系統(tǒng)

      單片機最小系統(tǒng)就是支持主芯片正常工作的最小電路部分,包括主控芯片、復(fù)位電路和晶振電路。

      主控芯片選取STC89C52RC芯片,因其具有良好的性能及穩(wěn)定性,價格便宜應(yīng)用方便。

      晶振選取11.0592MHz,晶振旁電容選取30pF。

      采用按鍵復(fù)位電路,電阻分別選取100Ω和10K,電容選取10μF。以下為單片機最小系統(tǒng)硬件電路圖。

      單片機最小系統(tǒng)硬件電路

      3.2鍵盤接口電路

      計算器所需按鍵有:

      數(shù)字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’ 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      功能鍵:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C(清零)’

      共計16個按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行和四列的8個公共端分別接P1.0~P1.7,這樣掃描P1口就可以完成對矩陣鍵盤的掃描,通過對16個按鍵進行編碼,從而得到鍵盤的口地址,對比P1口德掃描結(jié)果和各按鍵的地址,我們就可以得到是哪個鍵按下,從而完成鍵盤的功能。

      以下為鍵盤接口電路的硬件電路圖

      鍵盤接口電路

      3.3數(shù)碼管顯示電路

      采用4位數(shù)碼管對計算數(shù)據(jù)和結(jié)果的顯示,這里選取共陽數(shù)碼管,利用NPN三極管對數(shù)碼管進行驅(qū)動,為了節(jié)省I/O資源,采取動態(tài)顯示的方法來顯示計算數(shù)據(jù)及結(jié)果。

      利用74273鎖存器來實現(xiàn)數(shù)碼管的動態(tài)顯示,P0口輸出顯示值,P2.4為段選口,控制273鎖存器的時鐘引腳,從而得到對數(shù)碼管輸入數(shù)據(jù)的控制。

      P2.0~P2.3用來作為位選端,控制哪幾位數(shù)碼管進行顯示。

      以下為數(shù)碼顯示電路的硬件電路圖

      大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      數(shù)碼顯示電路硬件電路圖

      3.4錯誤報警電路

      錯誤報警電路就是在計算結(jié)果出現(xiàn)錯誤時或輸入數(shù)據(jù)出現(xiàn)錯誤時,發(fā)出聲音警報,提示使用者錯誤出現(xiàn)。

      這里就采用5V蜂鳴器作為報警設(shè)備,利用PNP三極管對蜂鳴器進行驅(qū)動,有P2.5對其進行控制,這樣在出現(xiàn)錯誤的同時用P2.5輸出低,就可以使蜂鳴器工作,完成報警任務(wù)。

      以下為報警電路硬件電路圖

      大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      報警電路硬件電路圖

      系統(tǒng)整體硬件電路圖見附錄一

      四、系統(tǒng)軟件設(shè)計

      4.1鍵盤掃描子程序設(shè)計

      要進行數(shù)據(jù)的計算就必須先進行數(shù)據(jù)的輸入,也就必須確定按鍵輸入的數(shù)值是什么,這就需要對鍵盤進行掃描,從而確定究竟是哪個鍵按下。

      對于鍵盤的掃描,既可以用行掃描也可以用列掃描,這里采用行掃描的方法來完成對鍵盤的掃描。

      行掃描就是逐行掃描鍵盤,看是哪一行有鍵按下,再通過返回的鍵碼來確定究竟是哪個按鍵按下。如對第一行掃描就令P1.0為低,P1口其余為高,這樣若第一行有鍵按下,則P1口的值就會由0xfe變?yōu)槠渌?,再由這個值來確定是哪個鍵按下。

      以下為鍵盤掃描子程序的程序清單。

      uchar keyscan(){

      int i;

      P1=0xfe;

      temp=P1;

      temp=temp&0xf0;大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      while(temp!=0xf0){

      delay(5);

      temp=P1;

      temp=temp&0xf0;

      while(temp!=0xf0)

      {

      temp=P1;

      switch(temp)

      {

      case 0xee:{rdat++;num=1;left(rdat,num);}

      break;

      case 0xde:{rdat++;num=2;left(rdat,num);}

      break;

      case 0xbe:{rdat++;num=3;left(rdat,num);}

      break;

      case 0x7e:{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)

      {

      case 0xed:{rdat++;num=5;left(rdat,num);}

      break;

      case 0xdd:{rdat++;num=6;left(rdat,num);}

      break;大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      }

      case 0xbd:{rdat++;num=7;left(rdat,num);}

      break;

      case 0x7d:{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)

      {

      case 0xeb:{rdat++;num=9;left(rdat,num);}

      break;

      case 0xdb:{rdat++;num=10;left(rdat,num);}

      break;

      case 0xbb:{equ();}

      break;

      case 0x7b:{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;

      } 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      } }

      P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0){

      delay(5);

      temp=P1;

      temp=temp&0xf0;

      while(temp!=0xf0)

      {

      temp=P1;

      switch(temp)

      {

      case 0xe7:{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;

      case 0xd7:{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;

      case 0xb7:{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;

      case 0x77:{rdat=0;add=0;subb=0;mul=0;div=1;大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      } return num;}

      } while(temp!=0xf0){

      temp=P1;

      temp=temp&0xf0;} }

      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;4.2移位子程序及結(jié)果計算子程序設(shè)計

      輸入數(shù)據(jù)要存儲在一四位數(shù)組內(nèi),而我們鍵入的值是數(shù)據(jù)的高位,后鍵入的值是低位,這樣我們就需要在輸入低位數(shù)值時將高位數(shù)值從數(shù)組的低位移向數(shù)組的高位,這就是編寫移位子程序的目的。

      對于結(jié)果計算子程序,包含加、減、乘、除四種運算。以加法運算為例,各種運算各有其標志位來代表計算類型,當加法標志位add=1是,就將輸入的兩個數(shù)據(jù)按照加法進行計算。

      首先將數(shù)組內(nèi)的數(shù)按照對應(yīng)的位關(guān)系,將其轉(zhuǎn)化為一個十進制數(shù),這樣我們就得到了加速和被加數(shù)這樣倆個十進制數(shù),從而我們就可以簡單的將兩個數(shù)進行相加,結(jié)果就是我們所求的數(shù)值。但這個數(shù)值不能直接顯示到數(shù)碼管上,我們還要對其進行處理,使其變?yōu)閷?yīng)進位的四個數(shù)存入數(shù)組內(nèi),以便顯示。既通過對結(jié)果數(shù)值分別除以1000、100、10和對10取余,得到我們想要的四個數(shù),送顯示子程序顯示。其余減、乘、除的計算方法與加法的計算方法一樣,這里不再累述。

      以下為移位子程序和結(jié)果計算子程序的程序清單。

      void left(uchar rx,uchar date){

      switch(rx)

      {

      case 1:dat[0]=date;break;大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      void equ(){

      int i,j,k;

      long int s;

      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)

      {

      case 2:dat[1]=dat[0],dat[0]=date;break;

      case 3:dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

      case 4:dat[3]=dat[2],dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

      } } 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      for(k=j-1;k>=0;k--)

      {

      if(dat[k]==0){dat[k]=10;}

      }

      }

      } if(dat[0]==0){dat[0]=10;} } 4.3顯示子程序設(shè)計

      從始至終無論是輸入的計算數(shù)據(jù),還是計算后的結(jié)果值。都存儲在同一數(shù)組dat[ ]中,這樣我們只要在顯示時一直調(diào)用dat[ ]中的值,就能正確的顯示數(shù)據(jù)。

      以下為顯示子程序的程序清單。

      void display(){

      uchar aa;

      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);

      } 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      4.4主程序設(shè)計

      主程序既把以上各子程序串連成一個整體,使整個程序循環(huán)運行。而在以上程序中也已經(jīng)加入了個程序之間的連接點,首先進入程序后就立即進入顯示子程序,而顯示子程序內(nèi)又調(diào)用鍵盤掃描子程序,若有鍵按下,則會跳轉(zhuǎn)到移位子程序和結(jié)果計算子程序進行相應(yīng)的處理。通過計算或移位后,數(shù)組內(nèi)的值發(fā)生改變,顯示的值也會同時發(fā)生改變。之后再進行鍵盤掃描,如此反復(fù)運行,就構(gòu)成了程序的整體。

      以下為主程序清單。

      void main(){ num=0;

      while(1)

      {

      display();

      } }

      整體程序清單見附錄二。

      五、調(diào)試及性能分析

      5.1調(diào)試步驟

      在焊接好器件后,先不要將芯片插在芯片座上,要先驗證先板上電源是否好用,有無短路等。接上USB電源,用萬用表測量個芯片座對應(yīng)電源和地之間的電壓值,觀察電壓值是否正常。一切正常后方可將芯片插入芯片座,以繼續(xù)測試其他功能。

      將芯片插上后,對各個模塊進行調(diào)試,按鍵是否工作正常,數(shù)碼管是否顯示正常等。編寫相關(guān)部分的測試程序?qū)ζ溥M行測試。

      各部分硬件檢測無誤后,下載程序進行整體調(diào)試,一切正常后,結(jié)束調(diào)試過程。

      在具體調(diào)試時首先遇到的問題是程序無法下載進入單片機,通過將電路板接線與原理電路圖接線的對比發(fā)現(xiàn),串口芯片與單片機連接的輸入,輸出接反,重新用銅線連接后,依然無法下載程序。后找到原因是由于下載串口與設(shè)計封裝不符,用相對應(yīng)的下載線可以下載。

      成功下載程序后,發(fā)現(xiàn)數(shù)碼管顯示不正確,查看后發(fā)現(xiàn)有先沒有連接,可能是制板時漏印,連接后顯示正常。大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      5.2性能分析

      對于計算器的性能,主要的衡量指標就在于計算的精度,本次制作的計算器性能情況如下:

      加法運算:四位加法運算,和值不超過9999,若超過上限,則顯示錯誤提示E,蜂鳴器報警提示。

      減法運算:四位減法運算,若結(jié)果為負,對其取絕對值。

      乘法運算:積不超過9999的乘法運算,若超出上限,顯示錯誤提示E,蜂鳴器報警提示。

      除法運算:整數(shù)除法,既計算結(jié)果為整數(shù),若除數(shù)為零,則顯示錯誤提示E,蜂鳴器報警提示。

      通過對實際性能的分析,可以得到本次設(shè)計滿足設(shè)計的要求。

      六、心得體會

      通過本次課程設(shè)計我真正的自己完成了對給定要求系統(tǒng)的硬件設(shè)計、電路設(shè)計、電路板設(shè)計、軟件設(shè)計以及對成品的調(diào)試過程。從整個過程中學習到了很多方面的知識,了解到以往學習中自己知識在某方面的不足之處,是對以往學習科目的一種貫穿和承接,從而能更好的認識和學習,也對將來從事工作大有裨益。

      從本次課設(shè)中我也看到了自身的很多不足之處,對知識的掌握不夠扎實,有一知半解的現(xiàn)象。有時做事不夠穩(wěn)定,過于毛躁,不能平心靜氣的去分析所遇到的問題和錯誤。這在以后的工作和生活中是不可取的,通過對自身問題的認識與改正相信再遇到同樣問題時會更好的解決。以后的設(shè)計實驗也會更好的完成。

      參考文獻

      [1] 徐維祥、劉旭敏.單片微型機原理及應(yīng)用.大連:大連理工大學出版社,1996 [2] 李光飛、樓然苗、胡佳文、謝象佐.單片機課程設(shè)計與實例指導(dǎo).北京: 北京航空航天大學出版社,2004

      [3] 余永權(quán).89系列FLASH單片機原理及應(yīng)用.北京:電子工業(yè)出版社,2002 [4] 李群芳,黃建.單片機微型計算機與接口技術(shù).北京:電子工業(yè)出版社,2001 [5] 樓然苗、李光飛.51系列單片機設(shè)計實例.北京:北京航空航天大學出版社,2003 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      附錄1 系統(tǒng)硬件電路圖 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      附錄2 程序清單

      #include #define uint unsigned int #define uchar unsigned char sbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;uchar code table[]={ 0xff,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0xc0,0x86};uchar dat[]={10,0,0,0,0};uchar s[],a[];uchar num,temp,num1,rdat,add,subb,mul,div;unsigned long int result;void left(uchar rx,uchar date);uchar keyscan();void equ();void delay(uint z){ uint x,y;for(x=z;x>0;x--)

      for(y=110;y>0;y--);}

      void display();void main(){ num=0;

      while(1)

      {

      display();

      } } void display(){

      uchar aa;

      keyscan();

      P2=0x07;

      aa=dat[0];大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      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);

      } uchar keyscan(){

      int i;

      P1=0xfe;

      temp=P1;

      temp=temp&0xf0;

      while(temp!=0xf0)

      {

      delay(5);

      temp=P1;

      temp=temp&0xf0;

      while(temp!=0xf0)

      {

      temp=P1;

      switch(temp)

      {

      case 0xee:{rdat++;num=1;left(rdat,num);}

      break;

      case 0xde:{rdat++;num=2;left(rdat,num);}

      break;

      case 0xbe:{rdat++;num=3;left(rdat,num);}

      break;大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      }

      case 0x7e:{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)

      {

      case 0xed:{rdat++;num=5;left(rdat,num);}

      break;

      case 0xdd:{rdat++;num=6;left(rdat,num);}

      break;

      case 0xbd:{rdat++;num=7;left(rdat,num);}

      break;

      case 0x7d:{rdat++;num=8;left(rdat,num);}

      break;

      }

      while(temp!=0xf0)

      {

      temp=P1;

      temp=temp&0xf0;

      }

      } }

      P1=0xfb;temp=P1;大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      temp=temp&0xf0;while(temp!=0xf0){

      delay(5);

      temp=P1;

      temp=temp&0xf0;

      while(temp!=0xf0)

      {

      temp=P1;

      switch(temp)

      {

      case 0xeb:{rdat++;num=9;left(rdat,num);}

      break;

      case 0xdb:{rdat++;num=10;left(rdat,num);}

      break;

      case 0xbb:{equ();}

      break;

      case 0x7b:{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)大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      {

      case 0xe7:{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;

      case 0xd7:{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;

      case 0xb7:{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;

      case 0x77:{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;

      }

      } 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      } return num;}

      void left(uchar rx,uchar date){

      switch(rx)

      {

      case 1:dat[0]=date;break;

      case 2:dat[1]=dat[0],dat[0]=date;break;

      case 3:dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

      case 4:dat[3]=dat[2],dat[2]=dat[1],dat[1]=dat[0],dat[0]=date;break;

      } }

      void equ(){ int i,j,k;long int s;

      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];

      if(s>result){result=s-result;} else 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;

      } 大連民族學院2007級電子信息工程專業(yè)單片機系統(tǒng)課程設(shè)計報告

      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];

      if(s==0)result=10000;

      else 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;} } 22

      第三篇:java課程設(shè)計報告—計算器

      1--計算器 Java實習報告

      目錄

      一、課程設(shè)計目的.................................................................................................................2

      二、課程設(shè)計任務(wù)..................................................................................................................2

      2.1、設(shè)計任務(wù)................................................................................................................2

      2.2、課程設(shè)計要求:....................................................................................................2

      2.3、需求分析................................................................................................................2

      三、開發(fā)工具與平臺.............................................................................................................3

      3.1、開發(fā)工具................................................................................................................3

      3.2、開發(fā)平臺................................................................................................................3

      四、設(shè)計思路..........................................................................................................................4

      4.1、界面設(shè)計.................................................................................................................4

      4.2.1、邏輯設(shè)計.............................................................................................................4

      4.2.2、程序流程圖...........................................................................................................5

      4.2.3、主要代碼展示及說明............................................................................................5

      4.3、程序測試............................................................................................................10

      五、實驗小結(jié)........................................................................................................................11

      六、附錄(程序代碼)..........................................................................................................12

      第 1--計算器 Java實習報告

      一、課程設(shè)計目的

      1、熟練掌握java面向?qū)ο缶幊獭?/p>

      2、選擇合適的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)需求。

      3、熟練使用各種控制結(jié)構(gòu)。

      4、GUI組件、事件處理技術(shù)。

      二、課程設(shè)計任務(wù)

      2.1、設(shè)計任務(wù)

      設(shè)計一個簡易的計算器,可以進行四則運算:加、減、乘、除等(限于十進制下)

      程序要求:

      (1)應(yīng)具有相應(yīng)的界面,可參考Windows操作系統(tǒng)自帶的計算器界面。(2)操作符號定為:“+”,“-”,“*”,“/”,“+/-”等。(按國際慣例設(shè)計)(3)用戶通過點擊程序界面上按鈕,實現(xiàn)數(shù)字、運算符的輸入操作。(4)以上部分為必須完成的內(nèi)容。選作部分:

      (1)具有操作符號“1/x”,“sqrt”(開方),“.”(小數(shù)功能)等。

      2.2、課程設(shè)計要求:

      (1)應(yīng)用自己所學課程知識完成對計算器的基本任務(wù)。

      (2)查閱相關(guān)資料,學習和掌握項目中涉及的新知識,提高自學能力。

      (3)通過應(yīng)用java程序編寫計算器來提升自己對簡單的圖形界面有一定的掌握和了解。

      2.3、需求分析

      1.設(shè)計的計算器可以完成加法、減法、乘法、除法的簡單運算。2.實現(xiàn)一些簡單的擴展運算,如:正負號、倒數(shù)、退格、清零等功能。

      第 2--計算器 Java實習報告3.添加小數(shù)點功能,用以實現(xiàn)浮點型數(shù)據(jù)的計算。

      4.使用布局管理器設(shè)計一個計算器的界面,使用事件監(jiān)聽器處理數(shù)據(jù)的輸入,并完成相關(guān)的計算。

      三、開發(fā)工具與平臺

      3.1、開發(fā)工具

      Microsoft Windows 7旗艦版

      3.2、開發(fā)平臺

      JDK1.6.0-02 和UE編譯器

      第 3--計算器 Java實習報告

      四、設(shè)計思路

      4.1、界面設(shè)計:(如圖3-1)

      圖3-1

      4.2.1、邏輯設(shè)計:

      (1)根據(jù)所設(shè)計出來的界面,首先要設(shè)計其GUI界面,總體界面有一個文本框,20個按鈕,總體界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按鈕放置到一個面板Panel中,完成界面設(shè)計。

      (2)設(shè)計計算流程,首先點擊數(shù)字按鈕時,將按鈕數(shù)值添加到文本框當中,并將該數(shù)值保存到一個字符串中,再次點擊數(shù)字按鈕時,將之前保存的字符串與新的數(shù)值拼接起來,再添加到文本框當中,直到點擊運算符按鈕時,將文本框當中的字符串保存在一個字符串變量中,然后重置文本框內(nèi)容,將運算符號顯示到文本框中,隨后輸入第二個計算數(shù)據(jù)時,用同樣的辦法保存數(shù)據(jù),最后通過控制“=”運算符先將字符串數(shù)據(jù)轉(zhuǎn)化成雙精度類型,然后計算出結(jié)果并顯示到文本框當中。

      (3)基本運算設(shè)計完成以后則開始考慮其他個別功能的實現(xiàn),例如倒數(shù)、清零、退格等功能的實現(xiàn),清零直接重置文本框內(nèi)容,退格功能則采用substring函數(shù)截取字符串長度。

      第 4--計算器 Java實習報告

      4.2.2、程序流程圖:

      4.2.3、主要代碼展示及說明: 總體代碼的設(shè)計:

      程序采用繼承windowadapter類,新建Jframe窗體,利用數(shù)組來定義JBotton按鈕,同時利用數(shù)組注冊監(jiān)聽,采用4行5列網(wǎng)格布局,完成計算器界面的基本設(shè)置,在窗體的正常關(guān)閉方面,采用匿名類實現(xiàn)窗體的正常關(guān)閉。最后對按鈕進行計算分析,分別設(shè)定輸入數(shù)據(jù)的A類、運算符控制的Opertion類,退格功能的BackSpace類、計算結(jié)果的Result類等等,一步步實現(xiàn)計算器的基本功能!

      (1)類A的設(shè)計(數(shù)據(jù)的輸入)

      class A implements ActionListener { public void actionPerformed(ActionEvent e){

      String a = Jtext.getText();

      String s = e.getActionCommand();

      if(a.equals(“0.”)||a.equals(“+”)||a.equals(“-”)||a.equals(“*”)||a.equals(“/”))

      第 5--計算器 Java實習報告

      }

      } Jtext.setText(s);else { if(flag2){

      Jtext.setText(s);

      flag2=false;} else

      Jtext.setText(a+s);}

      功能解釋:程序開始時,程序初始化文本框的內(nèi)容為“0.”,點擊數(shù)字按鈕,則調(diào)用類A,首先用a來獲取當前文本框內(nèi)容,s來獲取按鈕數(shù)值,然后進行判斷,若a的值為上述代碼的值則輸出s的值,再次點擊數(shù)字按鈕時,再次調(diào)用A類,此時a的值為上次輸入的s值,第一個if語句不滿足,執(zhí)行下個if語句if(flag2),flag2初始值為false,該語句的功能是在執(zhí)行了“=”號按鈕時,防止新的數(shù)字按鈕的值合并到到已經(jīng)得出的結(jié)果上,例如:12+12=24,此時再點擊數(shù)字按鈕3時,則文本框內(nèi)容被重置,輸出數(shù)值3,而不是243,如果if(flag2)不滿足,則將字符串a(chǎn)和s合并并輸出,得出第一個要計算的數(shù)據(jù)。

      (2)類Opertion的設(shè)計:(運算符的控制)

      class Opertion implements ActionListener { public void actionPerformed(ActionEvent e){

      cal=e.getActionCommand();

      if(flag1==true)

      x=Jtext.getText();

      Jtext.setText(cal);

      flag1=false;}

      第 6--計算器 Java實習報告 }

      功能解釋:當點擊運算符控制按鈕時,首先將運算符的數(shù)值賦值給cal(初值為空),緊接著進行判斷,flag1初值為ture,該類的作用為在點擊運算符按鈕時,將計算的第一個數(shù)據(jù)保存在x字符串變量當中,然后將文本框內(nèi)容重置為點擊的運算符的數(shù)值,類的結(jié)尾將flag1賦值為false,防止再次點擊運算符按鈕時改變了x的值。

      (附:此時文本框內(nèi)容為運算符的值,輸入第二個計算數(shù)據(jù)時,點擊數(shù)字按鈕,則再次調(diào)用A類,此時滿足A類中第一個if語句,文本框內(nèi)容被重置為數(shù)字按鈕的值,接下來與獲取第一個計算數(shù)據(jù)步驟一樣,直到點擊“=”號運算符為止!)

      (3)類Result的設(shè)計:(計算并輸出結(jié)果)

      class Result implements ActionListener //計算并顯示結(jié)果 { public void actionPerformed(ActionEvent e){

      double num1;

      num1=Double.parseDouble(x);

      y=Jtext.getText();

      double num2;

      num2=Double.parseDouble(y);

      double result=0;

      if(num2!=0)

      {

      if(cal.equals(“+”))

      result=num1+num2;

      if(cal.equals(“-”))

      result=num1-num2;

      if(cal.equals(“*”))

      result=num1*num2;

      String s1=Double.toString(result);

      Jtext.setText(s1);

      }

      if(cal.equals(“/”))

      第 7--計算器 Java實習報告

      } {

      if(num2==0)

      Jtext.setText(“除數(shù)不能為0”);

      else

      {

      result=num1/num2;

      String s1=Double.toString(result);

      Jtext.setText(s1);

      } }

      flag1=true;

      flag2=true;} 功能解釋:首先定義兩個Double型num1,num2,將之前保存的第一個計算數(shù)據(jù)x強制轉(zhuǎn)換為Double型后賦值給num1,接著用字符串變量y來獲取當前文本框的內(nèi)容,即第二個計算數(shù)據(jù)的值,同樣再將其強制轉(zhuǎn)換Double型后賦值給num2,然后進行運算符判斷,對cal的值進行比較,然后進行相應(yīng)的計算,將計算的結(jié)果轉(zhuǎn)換成字符串后將其輸出到文本框中,在類的最后將flag1、flag2賦值為true,作用是將計算的結(jié)果當作第二次計算的數(shù)據(jù)進行再運算,即將結(jié)果重新賦值給x作為第一個計算數(shù)據(jù)?。ǜ剑涸诖祟愔羞€考慮了當除數(shù)為零的情況。)

      (4)類BackSpace的設(shè)計:(功能類—退格)

      class BackSpace implements ActionListener { public void actionPerformed(ActionEvent e){

      String s = e.getActionCommand();

      String s1 = Jtext.getText();

      if(s.equals(“退格”))

      s1=new String(s1.substring(0,s1.length()-1));

      Jtext.setText(s1);} }

      第 8--計算器 Java實習報告

      功能解釋:這是計算器附加功能的實現(xiàn),這里只介紹退格功能,像正負號、求倒數(shù)、清零等功能相似,所以就不再一一介紹。首先獲取退格按鈕的命令值賦給s,然后獲取當前文本框的內(nèi)容,即輸入的數(shù)據(jù),將其賦給s1,接著進行判斷,利用substring函數(shù)將s1字符串截取為從第一個字符至倒數(shù)第二個字符為止的字符串并重新賦值給s1,再將其輸出到文本框,實現(xiàn)退格的功能。

      第 9

      頁 10--計算器 Java實習報告

      4.3、程序測試

      1.簡單的運算:(以加法為例:123+456)

      分析:計算的結(jié)果為579.0,為雙精度型,計算的結(jié)果被設(shè)置在文本框的最右端,該計算器的一個特點是可直接在文本框中輸入數(shù)據(jù)以及進行更改。

      2.倒數(shù)的運算:(以123為例)

      分析:輸出的結(jié)果如圖所示,倒數(shù)功能實現(xiàn),計算時,不僅是結(jié)果,輸入的數(shù)據(jù)同樣可以先實現(xiàn)倒數(shù)功能后再進行相應(yīng)的計算,沒有影響!

      3.退格的運算:(以123為例)

      分析:輸出的結(jié)果如圖所示,本計算器退格鍵有一個特點是,就算是是計算后得出的結(jié)果也能實現(xiàn)退格,缺點是不能很好的處理小數(shù)點的問題,因為小數(shù)點也是字符串的一部分。

      第 10--計算器 Java實習報告

      4.正負號的運算:(以123為例)

      分析:輸出的結(jié)果如圖所示,正負號添加能夠很好的實現(xiàn),但可以進行一些改進,比如在計算過程當中直接點擊負號運算符輸入負數(shù)進行計算!

      5.總體分析:

      該計算器基本運算沒有問題,清零、正負號、求倒數(shù)、退格功能都能很好的實現(xiàn),總體能完成一個計算器的基本功能,但仍有許多地方需要改進,比如小數(shù)點的實現(xiàn)所存在的一些問題,雖然在基本的運算過程當中不會造成太大影響,但這依然不能認為是一個很好的計算器,同時,在另一方面,該計算器還沒能很好的實現(xiàn)連續(xù)計算的功能,必須每次按下等號按鈕計算出結(jié)果后才能用產(chǎn)生的結(jié)果接著進行下一次的計算,改進的方法是在運算符上同時注冊Result類,讓運算符同時擁有計算結(jié)果的功能。

      五、實驗小結(jié)

      本次課程設(shè)計到此算是告一段落了,經(jīng)過這次的學習,我學到了很多東西,在此基礎(chǔ)上更加鞏固了自己對java的認識與了解。

      在做本項目是時候,會遇到很多小問題,比如說,在整個運算過程中要如何確保輸入的計算數(shù)據(jù)哪個是第一個計算數(shù)據(jù)的,哪個是第二個計算

      第 11--計算器 Java實習報告數(shù)據(jù)的,同時也要區(qū)分運算符,因為該計算器程序應(yīng)用的都是利用字符串來完成計算的,而且不能重復(fù)輸出運算符,更不能將運算符錯誤的存儲在了第一個計算數(shù)據(jù)的數(shù)值中,也得考慮到萬一不小心重復(fù)點擊了運算符按鈕會不會造成第一個計算數(shù)據(jù)的重新賦值等等問題,最后想到利用布爾類型來很好的控制運算符的應(yīng)用!

      此次課程設(shè)計讓我更了解熟悉了Java中的圖形用戶界面和它的編程方式。在完成課題的過程中也不斷充實了自己,學習到了很多以前沒有學習到的知識,收獲很大。最大的收獲就是對大學學習的總結(jié)和培養(yǎng)了解決困難的信心和能力,使我對所學知識能夠融會貫通,又不斷豐富了新知識。Java計算器設(shè)計使得我們對所學的專業(yè)課有了更為深刻的認識,使得知識得到了鞏固和提高。

      在接下來的時間里,我覺得我要更加努力的往深一層次的方面看齊,了解更多有關(guān)java的知識,對java有更深一步的了解,我會一步一步的走下去!

      六、附錄(程序代碼)import java.awt.*;import javax.swing.*;import java.awt.event.*;

      public class TheCalculator extends WindowAdapter

      //程序框架繼承自WindowAdapter類 { private JTextField Jtext=new JTextField(“0.”);private JFrame f=new JFrame(“計算器-趙磊”);private String x=“";private String y=”“;private String cal=”“;private boolean flag1=true;private boolean flag2=false;

      public void init()//初始化

      {

      String[] buttonValue = new String[]{”1“,”2“,”3“,”+“,”C“,”4“,”5“,”6“,”-“,”退格

      第 12--計算器 Java實習報告“,”7“,”8“,”9“,”*“,”1/x“,”0“,”+/-“,”.“,”/“,”=“};

      Container contain = f.getContentPane();

      JPanel Jpan = new JPanel();

      JButton[] Jb=new JButton[20];

      contain.setLayout(new BorderLayout());//采用4行5列的網(wǎng)格布局

      Jpan.setLayout(new GridLayout(4,5));

      Jtext.setHorizontalAlignment(JTextField.RIGHT);

      contain.add(Jtext,”North“);

      contain.add(Jpan);

      A num=new A();//數(shù)據(jù)

      Result re=new Result();//結(jié)果

      Opertion op=new Opertion();//運算符

      Clear cl=new Clear();//清零

      BackSpace back=new BackSpace();//退格

      CountDown count_d=new CountDown();//倒數(shù)

      Strains stra=new Strains();//相反數(shù)

      for(int i = 0;i

      {

      Jb[i] = new JButton(buttonValue[i]);

      Jpan.add(Jb[i]);

      if(i==3 || i==8 || i==13 || i==18)

      Jb[i].addActionListener(op);

      if(i==0 || i==1 || i==2 || i==5 || i==6 || i==7|| i==10 || i==11 || i==12 || i==15 || i==17)

      Jb[i].addActionListener(num);

      if((i==3||i==4||i==8||i==9)||((i>12)&&(i<=19))&&i!=15)

      Jb[i].setForeground(new Color(255, 0, 0));

      else

      Jb[i].setForeground(new Color(0, 0, 255));//控制按鈕字體顏色

      }

      Jb[4].addActionListener(cl);

      Jb[9].addActionListener(back);

      Jb[14].addActionListener(count_d);

      Jb[16].addActionListener(stra);

      Jb[19].addActionListener(re);

      f.setSize(320,240);

      f.setVisible(true);

      f.addWindowListener(//采用匿名類實現(xiàn)窗口的正常關(guān)閉

      new WindowAdapter()

      第 13--計算器 Java實習報告

      {

      public void windowClosing(WindowEvent e)

      {

      System.exit(0);

      }

      });} class A implements ActionListener //輸入數(shù)據(jù) { public void actionPerformed(ActionEvent e){

      String a = Jtext.getText();

      String s = e.getActionCommand();

      if(a.equals(”0.“)||a.equals(”+“)||a.equals(”-“)||a.equals(”*“)||a.equals(”/“))

      Jtext.setText(s);

      else

      {

      if(flag2)

      {

      Jtext.setText(s);

      flag2=false;

      }

      else

      Jtext.setText(a+s);

      } } } class Opertion implements ActionListener { public void actionPerformed(ActionEvent e){

      cal=e.getActionCommand();

      if(flag1==true)

      x=Jtext.getText();

      Jtext.setText(cal);

      flag1=false;} }

      第 14--計算器 Java實習報告

      class Clear implements ActionListener //清零功能 { public void actionPerformed(ActionEvent e){

      Jtext.setText(”0.“);} } class CountDown implements ActionListener //求倒數(shù)類 { public void actionPerformed(ActionEvent e){

      String s = e.getActionCommand();

      String s1 = Jtext.getText();

      if(s.equals(”1/x“))

      s1 = new String(”“+1/Double.parseDouble(s1));

      Jtext.setText(s1);} } class Strains implements ActionListener //求相反數(shù)類 { public void actionPerformed(ActionEvent e){

      String s = e.getActionCommand();

      String s1 = Jtext.getText();

      if(s.equals(”+/-“))

      s1=new String(”“+(0-Double.parseDouble(s1)));

      Jtext.setText(s1);} } class BackSpace implements ActionListener //退格功能 { public void actionPerformed(ActionEvent e){

      String s = e.getActionCommand();

      String s1 = Jtext.getText();

      if(s.equals(”退格“))

      s1=new String(s1.substring(0,s1.length()-1));

      Jtext.setText(s1);}

      第 15--計算器 Java實習報告

      } class Result implements ActionListener //計算并顯示結(jié)果 { public void actionPerformed(ActionEvent e){

      double num1;

      num1=Double.parseDouble(x);

      y=Jtext.getText();

      double num2;

      num2=Double.parseDouble(y);

      double result=0;

      if(num2!=0)

      {

      if(cal.equals(”+“))

      result=num1+num2;

      if(cal.equals(”-“))

      result=num1-num2;

      if(cal.equals(”*“))

      result=num1*num2;

      String s1=Double.toString(result);

      Jtext.setText(s1);

      }

      if(cal.equals(”/“))

      {

      if(num2==0)

      Jtext.setText(”除數(shù)不能為0");

      else

      {

      result=num1/num2;

      String s1=Double.toString(result);

      Jtext.setText(s1);

      }

      }

      flag1=true;

      flag2=true;} } public static void main(String[] args)//main方法 {

      第 16--計算器 Java實習報告

      }

      } TheCalculator count=new TheCalculator();count.init();

      第 17

      第四篇:單片機課程設(shè)計報告

      單片機課程設(shè)計報告

      ? 課程名稱:單片機原理及接口課程設(shè)計

      ? 題目:基于

      ? 學院:電氣信息學院

      ? 專業(yè)班級:測控技術(shù)與儀器

      ? 姓名:江讓

      ? 學號:

      ? 指導(dǎo)老師:劉升老師

      ? 時間:

      C51單片機的ADC0809數(shù)模轉(zhuǎn)換103班1090640772013/1/16

      第五篇:單片機課程設(shè)計報告

      單片機課程設(shè)計報告

      題目:小直流電機調(diào)速實驗

      教學單位: 機 電 工 程 系

      專業(yè): 機械設(shè)計制造及其自動化

      班級: 0803班學號: 0811050342姓名: 程懷虎

      2011 年 11月

      (以下內(nèi)容用宋體,五號,單倍行距)

      下載單片機計算器課程設(shè)計報告五篇范文word格式文檔
      下載單片機計算器課程設(shè)計報告五篇范文.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔相關(guān)法律責任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        單片機課程設(shè)計報告

        DS18B20測溫及按鍵控制 課 程 設(shè) 計 課程名稱 單片機基礎(chǔ)課程設(shè)計 題目名稱 18B20測溫及按鍵控制 學生學院 **** 專業(yè)班級 **** 班號 **** 學生組員 ****** 指導(dǎo)教師 *****......

        單片機課程設(shè)計報告

        課程設(shè)計報告 題 目: 自動滴灌系統(tǒng)設(shè)計 課程名稱: 單片機原理及應(yīng)用 學 院: 信息工程學院專 業(yè): 計算機科學與技術(shù) 班 級: 2014 級計本 1 班學生姓名: *** 學 號: 201403031......

        單片機課程設(shè)計報告

        《單片機原理與接口技術(shù)》 課程設(shè)計報告 設(shè)計題目: 基于80C51單片機系統(tǒng)實驗板的制作 與程序設(shè)計專業(yè):應(yīng)用電子專業(yè)班級: 11應(yīng)電班姓名: 丁文俊指導(dǎo)教師: 余靜老師2013 年 5 月2......

        基于AT89C51單片機的電子計算器的課程設(shè)計[5篇]

        C51單片機電子計算器課程設(shè)計 一.課程設(shè)計背景 當今時代,是一個新技術(shù)層出不窮的時代。在電子領(lǐng)域,尤其是自動化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng)正以......

        Matlab課程設(shè)計報告(簡單計算器)

        1、設(shè)計目的 運用MATLAB實現(xiàn)MATLAB的GUI程序設(shè)計。 2、題目分析 2.1課程設(shè)計的基本要求: A. 熟悉和掌握MATLAB 程序設(shè)計方法。 B. 掌握MATLAB GUI程序設(shè)計。 2.2課程設(shè)計的內(nèi)......

        單片機課程設(shè)計實習報告

        單片機課程設(shè)計實習報告 課程 2009-06-09 23:23:55 閱讀1900 評論2 字號:大中小 訂閱 實訓任務(wù): 做單一燈的左移右移,八個發(fā)光二極管L1-L8分別接在單片機的P1.0→P1.2→P1.3......

        單片機課程設(shè)計報告[5篇]

        《單片機課程設(shè)計報告》 學校:專業(yè):班級: 姓名: 學號: 指導(dǎo)教師: 摘要 由于單片機體積小、成本低、使用方便,所以被廣泛地應(yīng)用于儀器儀表、現(xiàn)場數(shù)據(jù)的采集和控制。通過本次課程......

        單片機課程設(shè)計報告(范文)

        片 機 課 程 設(shè) 計 報學號、姓名:年級、專業(yè):培養(yǎng)層次:課程名稱:授課學時學分:考試成績:授課或主講教師簽字:單 告1 單片機最小系統(tǒng)功能說明單片機的最小系統(tǒng)是由組成單片機系統(tǒng)必......