久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圖(1)單片機(jī)最小系統(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個按鍵進(jìn)行編碼,從而得到鍵盤的口地址,對比P1口德掃描結(jié)果和各按鍵的地址,我們就可以得到是哪個鍵按下,從而完成鍵盤的功能。

3.?dāng)?shù)碼管顯示電路

采用4位一體的數(shù)碼管對計算數(shù)據(jù)和結(jié)果進(jìn)行顯示,這里選取共陽數(shù)碼管,利用NPN三極管對數(shù)碼管進(jìn)行驅(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上面進(jìn)行仿真,把仿真得到的文件下載到Proteus里面進(jìn)行仿真,得到Proteus仿真電路圖如下所示:

圖(2)

計算器Proteus仿真電路圖

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

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

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

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

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

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

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

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

參考文獻(xiàn):

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

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

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

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

機(jī)電信息工程學(xué)院

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

完成日期:2010年5月31日

系: 專

業(yè): 班

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

多功能簡易計算器

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

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

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

3.1單片機(jī)最小系統(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 參考文獻(xiàn)................................................................................................14 附錄1 系統(tǒng)硬件電路圖.......................................................................15 附錄2 程序清單.................................................................................16

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

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

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

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

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

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

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

二.設(shè)計方案

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

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

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

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

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

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

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

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

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

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

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

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

3.2鍵盤接口電路

計算器所需按鍵有:

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

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

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

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

鍵盤接口電路

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

采用4位數(shù)碼管對計算數(shù)據(jù)和結(jié)果的顯示,這里選取共陽數(shù)碼管,利用NPN三極管對數(shù)碼管進(jìn)行驅(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ù)碼管進(jìn)行顯示。

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

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

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

3.4錯誤報警電路

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

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

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

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

報警電路硬件電路圖

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

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

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

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

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

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

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

uchar keyscan(){

int i;

P1=0xfe;

temp=P1;

temp=temp&0xf0;大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;

} 大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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é)果計算子程序,包含加、減、乘、除四種運(yùn)算。以加法運(yùn)算為例,各種運(yùn)算各有其標(biāo)志位來代表計算類型,當(dāng)加法標(biāo)志位add=1是,就將輸入的兩個數(shù)據(jù)按照加法進(jìn)行計算。

首先將數(shù)組內(nèi)的數(shù)按照對應(yīng)的位關(guān)系,將其轉(zhuǎn)化為一個十進(jìn)制數(shù),這樣我們就得到了加速和被加數(shù)這樣倆個十進(jìn)制數(shù),從而我們就可以簡單的將兩個數(shù)進(jìn)行相加,結(jié)果就是我們所求的數(shù)值。但這個數(shù)值不能直接顯示到數(shù)碼管上,我們還要對其進(jìn)行處理,使其變?yōu)閷?yīng)進(jìn)位的四個數(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;大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;

} } 大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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);

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

4.4主程序設(shè)計

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

以下為主程序清單。

void main(){ num=0;

while(1)

{

display();

} }

整體程序清單見附錄二。

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

5.1調(diào)試步驟

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

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

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

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

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

5.2性能分析

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

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

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

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

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

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

六、心得體會

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

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

參考文獻(xiàn)

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

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

附錄1 系統(tǒng)硬件電路圖 大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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];大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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)大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;

}

} 大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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;

} 大連民族學(xué)院2007級電子信息工程專業(yè)單片機(jī)系統(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實習(xí)報告

目錄

一、課程設(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實習(xí)報告

一、課程設(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è)計一個簡易的計算器,可以進(jìn)行四則運(yùn)算:加、減、乘、除等(限于十進(jìn)制下)

程序要求:

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

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

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

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

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

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

2.3、需求分析

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

第 2--計算器 Java實習(xí)報告3.添加小數(shù)點(diǎn)功能,用以實現(xiàn)浮點(diǎ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實習(xí)報告

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

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

第 4--計算器 Java實習(xí)報告

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)閉。最后對按鈕進(jìn)行計算分析,分別設(shè)定輸入數(shù)據(jù)的A類、運(yùn)算符控制的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實習(xí)報告

}

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

Jtext.setText(s);

flag2=false;} else

Jtext.setText(a+s);}

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

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

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實習(xí)報告 }

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

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

(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實習(xí)報告

} {

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強(qiáng)制轉(zhuǎn)換為Double型后賦值給num1,接著用字符串變量y來獲取當(dāng)前文本框的內(nèi)容,即第二個計算數(shù)據(jù)的值,同樣再將其強(qiáng)制轉(zhuǎn)換Double型后賦值給num2,然后進(jìn)行運(yùn)算符判斷,對cal的值進(jìn)行比較,然后進(jìn)行相應(yīng)的計算,將計算的結(jié)果轉(zhuǎn)換成字符串后將其輸出到文本框中,在類的最后將flag1、flag2賦值為true,作用是將計算的結(jié)果當(dāng)作第二次計算的數(shù)據(jù)進(jìn)行再運(yùn)算,即將結(jié)果重新賦值給x作為第一個計算數(shù)據(jù)!(附:在此類中還考慮了當(dāng)除數(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實習(xí)報告

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

第 9

頁 10--計算器 Java實習(xí)報告

4.3、程序測試

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

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

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

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

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

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

第 10--計算器 Java實習(xí)報告

4.正負(fù)號的運(yùn)算:(以123為例)

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

5.總體分析:

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

五、實驗小結(jié)

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

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

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

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

在接下來的時間里,我覺得我要更加努力的往深一層次的方面看齊,了解更多有關(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實習(xí)報告“,”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();//運(yùn)算符

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實習(xí)報告

{

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實習(xí)報告

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實習(xí)報告

} 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實習(xí)報告

}

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

第 17

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

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

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

? 題目:基于

? 學(xué)院:電氣信息學(xué)院

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

? 姓名:江讓

? 學(xué)號:

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

? 時間:

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

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

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

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

教學(xué)單位: 機(jī) 電 工 程 系

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

班級: 0803班學(xué)號: 0811050342姓名: 程懷虎

2011 年 11月

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

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

文檔為doc格式


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

相關(guān)范文推薦

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

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

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

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

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

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

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

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

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

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

    單片機(jī)課程設(shè)計實習(xí)報告

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

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

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

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

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

主站蜘蛛池模板: 久久久欧美国产精品人妻| 无码天堂亚洲国产av麻豆| 国产看黄网站又黄又爽又色| 亚洲成亚洲成网| 无码专区天天躁天天躁在线| 亚洲国产精品成人无码区| 国产在线线精品宅男网址| 国产亚洲精品aaaa片app| 婷婷成人综合激情在线视频播放| 无码少妇a片一区二区三区| 精品无码久久久久国产动漫3d| 97精品久久天干天天| 337p日本欧洲亚洲大胆裸体艺术| 亚洲精品久久久久久久蜜臀老牛| 久久精品免费观看国产| 亚洲第一最快av网站| 国产欧美一区二区精品久久久| 亚洲色成人网站在线观看| 日本午夜精品一区二区三区电影| 成人免费播放视频777777| 92国产精品午夜福利无毒不卡| 狠狠噜天天噜日日噜av| 国产精品美女久久久久| 特大黑人娇小亚洲女| 国产互换人妻xxxx69| 青青草国产精品久久久久| 久久人人爽人人爽人人片av高清| 国产成人精品2021| 老熟女乱婬视频一区二区| 亚洲热线99精品视频| 午夜视频体内射.com.com| 做受??高潮片少萝| 国产免费极品av吧在线观看| 亚洲精品久久久久久不卡精品小说| av明星换脸无码精品区| 国产剧情福利av一区二区| 国产精品爽爽va在线观看网站| 香蕉久久福利院| 男人边吃奶边做呻吟免费视频| 五月丁香久久综合网站| 狠狠色噜噜狠狠狠狠888奇米|