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

Matlab課程設(shè)計(jì)報(bào)告(簡(jiǎn)單計(jì)算器)

時(shí)間:2019-05-12 12:57:10下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《Matlab課程設(shè)計(jì)報(bào)告(簡(jiǎn)單計(jì)算器)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《Matlab課程設(shè)計(jì)報(bào)告(簡(jiǎn)單計(jì)算器)》。

第一篇:Matlab課程設(shè)計(jì)報(bào)告(簡(jiǎn)單計(jì)算器)

1、設(shè)計(jì)目的

運(yùn)用MATLAB實(shí)現(xiàn)MATLAB的GUI程序設(shè)計(jì)。

2、題目分析

2.1課程設(shè)計(jì)的基本要求:

A.熟悉和掌握MATLAB 程序設(shè)計(jì)方法。B.掌握MATLAB GUI程序設(shè)計(jì)。2.2課程設(shè)計(jì)的內(nèi)容

要求利用MATLAB GUI設(shè)計(jì)實(shí)現(xiàn)一個(gè)圖形用戶界面的計(jì)算器程序,要求實(shí)現(xiàn): A.具有友好的用戶圖形界面。實(shí)現(xiàn)十進(jìn)制數(shù)的加、減、乘、除、乘方、取模等簡(jiǎn)單計(jì)算。

B.科學(xué)計(jì)算函數(shù),包括(反)正弦、(反)余弦、(反)正切、(反)余切、開方、指數(shù)等函數(shù)運(yùn)行。

C.能夠保存上次歷史計(jì)算的答案,顯示答案存儲(chǔ)器中的內(nèi)容。D.有清除鍵,能清除操作。

E.獨(dú)立存儲(chǔ)器功能,使之可以直接輸入存儲(chǔ)器,可與存儲(chǔ)器中的數(shù)值相加減。能夠清除獨(dú)立存儲(chǔ)器中的內(nèi)容。2.3題目分析

本題目通過(guò)MATLAB的GUI程序設(shè)計(jì)較為簡(jiǎn)單,在GUI設(shè)計(jì)中主要用到三種控件,顯示框用到文本編輯框(edit text),說(shuō)明框用到靜態(tài)文本框(Static text),數(shù)字以及運(yùn)算等按鈕用到命令按鈕(push button)。然后再通過(guò)各個(gè)按鈕的回調(diào)函數(shù),實(shí)現(xiàn)簡(jiǎn)單的計(jì)算功能。

3、總體設(shè)計(jì)

首先用MATLAB GUI功能,在繪制一個(gè)靜態(tài)文本框和一個(gè)文本編輯框,以及32個(gè)命令按鈕,調(diào)整好各控件大小、顏色,整體布局如圖所示:

然后通過(guò)雙擊個(gè)按鈕來(lái)改寫其屬性,在m文件中編寫其回調(diào)函數(shù),最后在運(yùn)行調(diào)試。

4、具體設(shè)計(jì) 4.1 各功能界面設(shè)計(jì) GUI設(shè)計(jì)界面:

4.2 各功能模塊實(shí)現(xiàn) 算法設(shè)計(jì):

A.數(shù)字鍵設(shè)計(jì):0—9以及小數(shù)點(diǎn)函數(shù)都一樣,只是參數(shù)不同: global jj textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','1');else

textString =strcat(textString,'1');set(handles.text1,'String',textString)end jj=0;B.四則運(yùn)算函數(shù):

textString = get(handles.text1,'String');textString =strcat(textString,'+');set(handles.text1,'String',textString)C.科學(xué)計(jì)算函數(shù):

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)set(handles.text1,'String','0.');else

a = strread(textString, '%f');a=sin(a);set(handles.text1,'String',a)end 或

textString=handles.text1;textString=sin(str2num(get(handles.text1,'String'))*pi/180);set(handles.text1,'String',num2str(textString))D.退格鍵:通過(guò)取屏幕值,計(jì)算出其字符長(zhǎng)度,然后取其前N-1項(xiàng)的值來(lái)實(shí)現(xiàn)退格: global jj textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','0.');else

ss=char(textString);l=length(textString);textString=ss(1:l-1);set(handles.text1,'String',textString)end jj=0;E.清屏鍵函數(shù):

set(handles.text1,'String','0.');F.右鍵函數(shù):

gtext('大家好;我是智能機(jī)器人-my name is seven');close(gcf);4.3 各模塊實(shí)現(xiàn)結(jié)果 A.數(shù)字鍵:

B.四則運(yùn)算函數(shù):

C.科學(xué)計(jì)算函數(shù): Sin45的計(jì)算結(jié)果=

經(jīng)過(guò)計(jì)算,這些結(jié)果均與實(shí)際結(jié)果相吻合,計(jì)算器的功能實(shí)現(xiàn)的較為完好。5.2問(wèn)題和解決方法:

a.小數(shù)點(diǎn)可以連續(xù)輸入。解決方法是:用strfind函數(shù)查看文本框里有幾個(gè)小數(shù)點(diǎn),如果已經(jīng)有一個(gè)了,再按小數(shù)點(diǎn)就保持不變。b.按過(guò)運(yùn)算符號(hào)后一個(gè)數(shù)不等于一個(gè)數(shù),比如:輸入1,按等號(hào),會(huì)出來(lái)一個(gè)3,經(jīng)過(guò)長(zhǎng)時(shí)間分析得知,這是由于在按運(yùn)算符號(hào)時(shí),系統(tǒng)記錄了文本框里的數(shù)但沒(méi)有清空,才會(huì)出現(xiàn)這種問(wèn)題。解決方法是再申請(qǐng)一個(gè)不同于加減乘除的另一個(gè)符號(hào),并將按過(guò)運(yùn)算符后記錄的數(shù)值置0。

c.按對(duì)數(shù)函數(shù)鍵時(shí),負(fù)數(shù)也能運(yùn)算,通過(guò)加入if判斷語(yǔ)句來(lái)判斷輸入的值是否為負(fù),若為負(fù)則輸出error.6、心得體會(huì)

通過(guò)本次的MATLAB課程設(shè)計(jì),讓我對(duì)MATLAB尤其是其GUI設(shè)計(jì)的功能有了進(jìn)一步的了解,認(rèn)識(shí)到了它功能的強(qiáng)大。在MATLAB簡(jiǎn)單計(jì)算器的設(shè)計(jì)中,了解了關(guān)于MATLAB圖形用戶界面的部分控件的使用方法;利用MATLAB的GUI提供的很多實(shí)用的控件,方便用于設(shè)計(jì)屬于自己的圖形界面。

7、附錄(源代碼)

function varargout = jisuanqi(varargin)% JISUANQI M-file for jisuanqi.fig

% JISUANQI, by itself, creates a new JISUANQI or raises the existing % singleton*.%

% H = JISUANQI returns the handle to a new JISUANQI or the handle to % the existing singleton*.%

% JISUANQI('CALLBACK',hObject,eventData,handles,...)calls the local % function named CALLBACK in JISUANQI.M with the given input arguments.%

% JISUANQI('Property','Value',...)creates a new JISUANQI or raises the % existing singleton*.Starting from the left, property value pairs are % applied to the GUI before jisuanqi_OpeningFunction gets called.An % unrecognized property name or invalid value makes property application % stop.All inputs are passed to jisuanqi_OpeningFcn via varargin.%

% *See GUI Options on GUIDE's Tools menu.Choose “GUI allows only one % instance to run(singleton)”.%

% See also: GUIDE, GUIDATA, GUIHANDLES % Copyright 2002-2003 The MathWorks, Inc.% Edit the above text to modify the response to help jisuanqi % Last Modified by GUIDE v2.5 04-Dec-2012 17:06:43 % Begin initialization codeDO NOT EDIT

%---Executes just before jisuanqi is made visible.function jisuanqi_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)% Get default command line output from handles structure varargout{1} = handles.output;

function edit1_Callback(hObject, eventdata, handles)% hObject handle to edit1(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles emptyto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','1');else

textString =strcat(textString,'1');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');

if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','3');else

textString =strcat(textString,'3');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton13.function pushbutton13_Callback(hObject, eventdata, handles)% hObject handle to pushbutton13(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','-');else

textString = get(handles.text1,'String');textString =strcat(textString,'-');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton21.function pushbutton21_Callback(hObject, eventdata, handles)% hObject handle to pushbutton21(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)textString = get(handles.text1,'String');%strcmp(textString,'0.')textString=handles.text1;

textString=sin(str2num(get(handles.text1,'String'))*pi/180);set(handles.text1,'String',num2str(textString))%a = strread(textString, '%f')%textString=get(handles.text1,'String')%textString=strcat(textString,'sin')%set(handles.text1,'String',textString)%---Executes on button press in pushbutton23.function pushbutton23_Callback(hObject, eventdata, handles)% hObject handle to pushbutton23(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','4');else

textString =strcat(textString,'4');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)% hObject handle to pushbutton5(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','6');else

textString =strcat(textString,'6');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton15.function pushbutton15_Callback(hObject, eventdata, handles)% hObject handle to pushbutton15(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','/');else

textString = get(handles.text1,'String');textString =strcat(textString,'/');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton24.function pushbutton24_Callback(hObject, eventdata, handles)% hObject handle to pushbutton24(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)textString = get(handles.text1,'String');%strcmp(textString,'0.')textString=handles.text1;

textString=cos(str2num(get(handles.text1,'String'))*pi/180);set(handles.text1,'String',num2str(textString))%---Executes on button press in pushbutton26.function pushbutton26_Callback(hObject, eventdata, handles)% hObject handle to pushbutton26(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','7');else

textString =strcat(textString,'7');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton8.function pushbutton8_Callback(hObject, eventdata, handles)% hObject handle to pushbutton8(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global jj

textString = get(handles.text1,'String');

if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','9');else

textString =strcat(textString,'9');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton17.function pushbutton17_Callback(hObject, eventdata, handles)% hObject handle to pushbutton17(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)set(handles.text1,'String',')');else

textString =strcat(textString,')');set(handles.text1,'String',textString)end

%---Executes on button press in pushbutton27.function pushbutton27_Callback(hObject, eventdata, handles)% hObject handle to pushbutton27(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)textString = get(handles.text1,'String');%strcmp(textString,'0.')textString=handles.text1;

textString=tan(str2num(get(handles.text1,'String'))*pi/180);set(handles.text1,'String',num2str(textString))%---Executes on button press in pushbutton29.function pushbutton29_Callback(hObject, eventdata, handles)% hObject handle to pushbutton29(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)

global jj

textString = get(handles.text1,'String');if(strcmp(textString,'0.')==1)&(jj==0)set(handles.text1,'String','0.');else

textString =strcat(textString,'0');set(handles.text1,'String',textString)end jj=0;

%---Executes on button press in pushbutton11.function pushbutton11_Callback(hObject, eventdata, handles)% hObject handle to pushbutton11(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)set(handles.text1,'String','0.');

%---Executes on button press in pushbutton19.function pushbutton19_Callback(hObject, eventdata, handles)% hObject handle to pushbutton19(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)textString=get(handles.text1,'String')s=eval(textString)

set(handles.text1,'String',s)

%---Executes on button press in pushbutton30.function pushbutton30_Callback(hObject, eventdata, handles)% hObject handle to pushbutton30(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)textString = get(handles.text1,'String');%strcmp(textString,'0.')textString=handles.text1;

textString=cot(str2num(get(handles.text1,'String'))*pi/180);set(handles.text1,'String',num2str(textString))%---Executes on button press in pushbutton32.function pushbutton32_Callback(hObject, eventdata, handles)% hObject handle to pushbutton32(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)%open('1.bmp')

gtext('大家好;我是智能機(jī)器人-my name is seven');

%------function J_Callback(hObject, eventdata, handles)% hObject handle to J(see GCBO)

% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)close(gcf);

8、參考書目:

[1]《MATLAB語(yǔ)言及其在電子信息工程中的應(yīng)用》 王洪元主編 清華大學(xué)出版社

[2] 《MATLAB中GUI的應(yīng)用》 王洪元主編 清華大學(xué)出版社

第二篇:java課程設(shè)計(jì)報(bào)告—計(jì)算器

1--計(jì)算器 Java實(shí)習(xí)報(bào)告

目錄

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

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

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

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

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

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

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

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

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

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

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

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

4.2.3、主要代碼展示及說(shuō)明............................................................................................5

4.3、程序測(cè)試............................................................................................................10

五、實(shí)驗(yàn)小結(jié)........................................................................................................................11

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

頁(yè)

第 1--計(jì)算器 Java實(shí)習(xí)報(bào)告

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

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

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

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

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

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

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

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

程序要求:

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

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

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

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

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

(3)通過(guò)應(yīng)用java程序編寫計(jì)算器來(lái)提升自己對(duì)簡(jiǎn)單的圖形界面有一定的掌握和了解。

2.3、需求分析

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

頁(yè)

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

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

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

3.1、開發(fā)工具

Microsoft Windows 7旗艦版

3.2、開發(fā)平臺(tái)

JDK1.6.0-02 和UE編譯器

頁(yè)

第 3--計(jì)算器 Java實(shí)習(xí)報(bào)告

四、設(shè)計(jì)思路

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

圖3-1

4.2.1、邏輯設(shè)計(jì):

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

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

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

頁(yè)

第 4--計(jì)算器 Java實(shí)習(xí)報(bào)告

4.2.2、程序流程圖:

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

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

(1)類A的設(shè)計(jì)(數(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(“/”))

頁(yè)

第 5--計(jì)算器 Java實(shí)習(xí)報(bào)告

}

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

Jtext.setText(s);

flag2=false;} else

Jtext.setText(a+s);}

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

(2)類Opertion的設(shè)計(jì):(運(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;}

頁(yè)

第 6--計(jì)算器 Java實(shí)習(xí)報(bào)告 }

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

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

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

class Result implements ActionListener //計(jì)算并顯示結(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(“/”))

頁(yè)

第 7--計(jì)算器 Java實(shí)習(xí)報(bào)告

} {

if(num2==0)

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

else

{

result=num1/num2;

String s1=Double.toString(result);

Jtext.setText(s1);

} }

flag1=true;

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

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

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

頁(yè)

第 8--計(jì)算器 Java實(shí)習(xí)報(bào)告

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

第 9

頁(yè) 10--計(jì)算器 Java實(shí)習(xí)報(bào)告

4.3、程序測(cè)試

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

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

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

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

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

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

頁(yè)

第 10--計(jì)算器 Java實(shí)習(xí)報(bào)告

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

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

5.總體分析:

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

五、實(shí)驗(yàn)小結(jié)

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

在做本項(xiàng)目是時(shí)候,會(huì)遇到很多小問(wèn)題,比如說(shuō),在整個(gè)運(yùn)算過(guò)程中要如何確保輸入的計(jì)算數(shù)據(jù)哪個(gè)是第一個(gè)計(jì)算數(shù)據(jù)的,哪個(gè)是第二個(gè)計(jì)算

頁(yè)

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

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

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

六、附錄(程序代碼)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(“計(jì)算器-趙磊”);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“,”-“,”退格

頁(yè)

第 12--計(jì)算器 Java實(shí)習(xí)報(bào)告“,”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(//采用匿名類實(shí)現(xiàn)窗口的正常關(guān)閉

new WindowAdapter()

頁(yè)

第 13--計(jì)算器 Java實(shí)習(xí)報(bào)告

{

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

頁(yè)

第 14--計(jì)算器 Java實(shí)習(xí)報(bào)告

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

頁(yè)

第 15--計(jì)算器 Java實(shí)習(xí)報(bào)告

} class Result implements ActionListener //計(jì)算并顯示結(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方法 {

頁(yè)

第 16--計(jì)算器 Java實(shí)習(xí)報(bào)告

}

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

頁(yè)

第 17

第三篇:?jiǎn)纹瑱C(jī)計(jì)算器課程設(shè)計(jì)報(bào)告

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

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

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

完成日期:2010年5月31日

系: 專

業(yè): 班

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

多功能簡(jiǎn)易計(jì)算器

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

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

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

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

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

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

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

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

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

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

一、設(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)

1.2.3.4.5.加法:四位加法,計(jì)算結(jié)果若超過(guò)四位則顯示計(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枚共陽(yáng)極數(shù)碼管和74ls273鎖存芯片構(gòu)成等器件構(gòu)成。

錯(cuò)誤報(bào)警電路采用5V蜂鳴器。

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

三.系統(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’,’8’,’9’,’0’ 大連民族學(xué)院2007級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

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

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

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

鍵盤接口電路

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

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

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

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

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

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

數(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)警電路硬件電路圖

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

報(bào)警電路硬件電路圖

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

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

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

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

對(duì)于鍵盤的掃描,既可以用行掃描也可以用列掃描,這里采用行掃描的方法來(lái)完成對(duì)鍵盤的掃描。

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

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

uchar keyscan(){

int i;

P1=0xfe;

temp=P1;

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

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

}

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

} }

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

} 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é)果計(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)志位來(lái)代表計(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),以便顯示。既通過(guò)對(duì)結(jié)果數(shù)值分別除以1000、100、10和對(duì)10取余,得到我們想要的四個(gè)數(shù),送顯示子程序顯示。其余減、乘、除的計(jì)算方法與加法的計(jì)算方法一樣,這里不再累述。

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

void left(uchar rx,uchar date){

switch(rx)

{

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

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

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

從始至終無(wú)論是輸入的計(jì)算數(shù)據(jù),還是計(jì)算后的結(jié)果值。都存儲(chǔ)在同一數(shù)組dat[ ]中,這樣我們只要在顯示時(shí)一直調(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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

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)的處理。通過(guò)計(jì)算或移位后,數(shù)組內(nèi)的值發(fā)生改變,顯示的值也會(huì)同時(shí)發(fā)生改變。之后再進(jìn)行鍵盤掃描,如此反復(fù)運(yùn)行,就構(gòu)成了程序的整體。

以下為主程序清單。

void main(){ num=0;

while(1)

{

display();

} }

整體程序清單見(jiàn)附錄二。

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

5.1調(diào)試步驟

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

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

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

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

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

5.2性能分析

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

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

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

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

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

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

六、心得體會(huì)

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

從本次課設(shè)中我也看到了自身的很多不足之處,對(duì)知識(shí)的掌握不夠扎實(shí),有一知半解的現(xiàn)象。有時(shí)做事不夠穩(wěn)定,過(guò)于毛躁,不能平心靜氣的去分析所遇到的問(wèn)題和錯(cuò)誤。這在以后的工作和生活中是不可取的,通過(guò)對(duì)自身問(wèn)題的認(rèn)識(shí)與改正相信再遇到同樣問(wèn)題時(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 大連民族學(xué)院2007級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

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

附錄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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

}

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

{

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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

} 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級(jí)電子信息工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)報(bào)告

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

第四篇:?jiǎn)纹瑱C(jī)計(jì)算器課程設(shè)計(jì)報(bào)告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.鍵盤接口電路

計(jì)算器所需按鍵有:

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

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

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

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

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

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

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

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

根據(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è)計(jì)好后,在KEIL上面進(jìn)行仿真,把仿真得到的文件下載到Proteus里面進(jìn)行仿真,得到Proteus仿真電路圖如下所示:

圖(2)

計(jì)算器Proteus仿真電路圖

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

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

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

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

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

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

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

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

參考文獻(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ī)原理及應(yīng)用》,人民郵電出版社,2006年。【5】常敏、王涵、范江波,《單片機(jī)應(yīng)用程序開發(fā)與實(shí)踐》,電子工業(yè)出版社,2009年。

第五篇:MATLAB通信原理課程設(shè)計(jì)報(bào)告

MATLAB通信原理課程設(shè)計(jì)報(bào)告

目 錄

1課題名稱.....................................................................................................................1 2課程設(shè)計(jì)的方案和基本原理.....................................................................................1

2.1信息論基本計(jì)算...............................................................................................1 2.2數(shù)字信號(hào)基帶傳輸系統(tǒng)...................................................................................1 3課程設(shè)計(jì)步驟.............................................................................................................3

3.1信息論基本計(jì)算的設(shè)計(jì)步驟...........................................................................3 3.2數(shù)字信號(hào)基帶傳輸系統(tǒng)的設(shè)計(jì)步驟...............................................................3 4課程設(shè)計(jì)結(jié)果和結(jié)果分析論證.................................................................................4

4.1信息論的基本運(yùn)算結(jié)果...................................................................................4 4.2數(shù)字信號(hào)基帶傳輸系統(tǒng)的設(shè)計(jì)結(jié)果...............................................................6

5、心得體會(huì)................................................................................................................11 6附件...........................................................................................................................11 6.1信息論基本計(jì)算.............................................................................................11 6.2數(shù)字信號(hào)基帶傳輸系統(tǒng).................................................................................14 7 評(píng)分表......................................................................................錯(cuò)誤!未定義書簽。

1課題名稱

(1)信息論基本計(jì)算。

(3)數(shù)字信號(hào)基帶傳輸系統(tǒng)設(shè)計(jì)

2課程設(shè)計(jì)的方案和基本原理

2.1信息論基本計(jì)算

2.1.1平均信息量:平均每個(gè)符號(hào)所能提供的信息量。

H(X)。

2.1.2離散信道容量:信道容量是信道所能傳送的最大的信息量。C=maxI(X;Y)R=I(X;Y)=H(X)-H(XY)2.1.3信源編碼過(guò)程:Huffman編碼的意義是,用最少的編碼長(zhǎng)度來(lái)表達(dá)符號(hào)的信息。為了使平均碼長(zhǎng)度最小,將發(fā)生概率較大的符號(hào)用比較短的碼組來(lái)表示,將發(fā)生概率較小的符號(hào)用較長(zhǎng)的碼組實(shí)現(xiàn),以得到最佳的變長(zhǎng)編碼,減少冗余度,提高系統(tǒng)傳輸?shù)男省?/p>

2.2數(shù)字信號(hào)基帶傳輸系統(tǒng)

2.2.1數(shù)字基帶信號(hào)的碼型:由于數(shù)字基帶信號(hào)是數(shù)字信息的電脈沖表示,不同形式的基帶信號(hào)(又稱為碼型)有不同的頻譜結(jié)構(gòu)和功率譜分布。不同的碼型有不同的優(yōu)點(diǎn),常用的碼型有單/雙極性碼、非歸零/歸零碼、數(shù)字雙相碼(曼徹斯特碼)、密勒碼、AMI碼、HDB3碼。

2.2.2單/雙極性碼:?jiǎn)螛O性碼是用電平1來(lái)表示二元信息中的‘1’,用電平0來(lái)表示二元信息中的0,電平在整個(gè)碼元的持續(xù)時(shí)間里保持不變,記做NRZ碼。雙極性碼與單極性碼的區(qū)別僅在于它用電平-1來(lái)表示二元信息中的‘0’。

2.2.3非歸零/歸零碼:歸零碼與非歸零碼的區(qū)別僅在于,非歸零碼在整個(gè)碼元持續(xù)時(shí)間內(nèi)保持電平值不變,而歸零碼的碼元持續(xù)時(shí)間的前一半時(shí)間內(nèi)保持,而后一半時(shí)間內(nèi)回到0.1 2.2.4數(shù)字雙相碼(曼徹斯特碼):此種碼型采用在一個(gè)碼元的持續(xù)時(shí)間中央時(shí)刻從0到1的跳變來(lái)表示1,從1到0的跳變來(lái)表示0。或者與之相反用在一個(gè)碼元的持續(xù)時(shí)間中央時(shí)刻從0到1的跳變來(lái)表示0,從1到0的跳變來(lái)表示1。

2.2.5密勒碼:該碼型是雙相碼的變型。它采用碼元中央時(shí)刻跳變表示信息1即前半時(shí)間的電平和前一碼元的后半時(shí)間的電平相同,中間跳變。遇到信息0做如下處理:首先對(duì)0的碼元在整個(gè)持續(xù)時(shí)間內(nèi)保持同一電平值,其次若此0的前一信息是一則碼元的電平同前面信息1的碼元后半時(shí)間電平相同,若前一信息為0,則與前面碼元的電平相反。

2.2.6 AMI碼、HDB3碼: AMI碼是傳號(hào)交替反轉(zhuǎn)碼。其編碼規(guī)則是將消息碼中的“1”交替變成“+1”和“-1”,將消息碼中的“0”仍保持為“0”。HDB3碼的全稱是3階高密度雙極性碼。首先將信息碼變換成AMI碼,然后檢查AMI碼中連0的情況,沒(méi)有發(fā)現(xiàn)4個(gè)以上連0的碼元串時(shí)碼型不需變換,仍為AMI碼的形狀。若發(fā)現(xiàn)4個(gè)以上連0的碼元串時(shí),則根據(jù)相應(yīng)規(guī)則把第四個(gè)0變換成相應(yīng)符號(hào)。

2.2.7碼型的功率譜分布:數(shù)字基帶信號(hào)一般是隨機(jī)信號(hào),因此分析隨機(jī)信號(hào)的頻譜特性要用功率諾密度來(lái)分析。一般來(lái)說(shuō),求解功率譜是一件相當(dāng)困難的事,但由于上述幾種碼型比較簡(jiǎn)單,我們可以求出其功率譜密度函數(shù)。

對(duì)單極性非歸零碼、單極性歸零碼、雙極性非歸零碼和雙極性歸零碼這4種碼。由于統(tǒng)計(jì)的獨(dú)立性,課由由功率譜公式畫出功率譜波形圖。數(shù)字雙相碼的功率相關(guān)公式如下:“y=sin(pi*x/2);y=y./(pi*x/2);y(1)=1;mache=sin(pi*x/2).*sin(pi*x/2);mache=mache.*y;mache=mache.*y”。密勒碼的相關(guān)功率公式如下:

“x=x*pi;miler=(23-2*cos(x)-22*cos(2*x)-12*cos(3*x)+5*cos(4*x)+12*cos(5*x)+2*cos(6*x)-8*cos(7*x)+2*cos(8*x))./(17+8*cos(8*x));t=x.*x;miler=miler./t;”

對(duì)于AMI碼和HDB3碼的功率譜函數(shù),則需要進(jìn)行實(shí)際的碼型進(jìn)行分析。

3課程設(shè)計(jì)步驟

3.1信息論基本計(jì)算的設(shè)計(jì)步驟

3.1.1信源平均信息量的計(jì)算(以高斯分布的信源為例):

通過(guò)系統(tǒng)產(chǎn)生一個(gè)高斯隨機(jī)信源,再求出它的平均信息量。3.1.2離散信道容量的計(jì)算(以輸入符號(hào)等概分布為例):

編寫hmessage函數(shù)求出平均互信息,編寫dmessage函數(shù),求出離散信息熵,調(diào)用hmessage函數(shù)和dmessage函數(shù)得出hf和hx,最后信道容量c=hx-hf。3.1.3信源編碼過(guò)程(以Huffman編碼為例):

先編寫huffman函數(shù),對(duì)系列排序并求出huffman編碼。調(diào)用huffman函數(shù)和dmessage函數(shù),得出編碼后的碼字。

3.2數(shù)字信號(hào)基帶傳輸系統(tǒng)的設(shè)計(jì)步驟

3.2.1單/雙極性歸零/非歸零碼:先對(duì)原始碼型進(jìn)行相應(yīng)的碼型變換,畫出碼型子圖,再由功率譜公式畫出功率譜波形圖。

3.2.2數(shù)字雙相碼:先進(jìn)行碼型變換,再畫出功率譜,功率相關(guān)公式如下:“y=sin(pi*x/2);y=y./(pi*x/2);y(1)=1;mache=sin(pi*x/2).*sin(pi*x/2);mache=mache.*y;mache=mache.*y”。

3.2.3密勒碼:密勒碼的相關(guān)功率公式如下:

“x=x*pi;miler=(23-2*cos(x)-22*cos(2*x)-12*cos(3*x)+5*cos(4*x)+12*cos(5*x)+2*cos(6*x)-8*cos(7*x)+2*cos(8*x))./(17+8*cos(8*x));t=x.*x;miler=miler./t;”

3.2.4AMI碼:編寫AMI函數(shù),求的AMI碼型變換。編寫t2f函數(shù),功能是將時(shí)域信號(hào)做傅里葉變換到頻域。為了求AMI碼的功率譜密度,編寫AMIpower函數(shù),該函數(shù)中又調(diào)用了t2f函數(shù)。3.2.5HDB3碼:編寫HDb3函數(shù)和t2f函數(shù),分別實(shí)現(xiàn)HDb3編碼和傅里葉變換。調(diào)用HDb3函數(shù)和t2f函數(shù),得出原序列圖、編碼后的序列圖和功率譜圖。

4課程設(shè)計(jì)結(jié)果和結(jié)果分析論證

4.1信息論的基本運(yùn)算結(jié)果

4.1.1信源平均信息量的計(jì)算(以高斯分布的信源為例):

圖4.1.1連續(xù)信源平均信息量

4.1.2離散信道容量的計(jì)算(以輸入符號(hào)等概分布為例)4

圖4.1.2離散信道容量

信道容量為信源的平均信息量減去互信息量。

4.1.3信源編碼過(guò)程(以Huffman編碼為例)

圖4.1.3 huffman編碼

哈弗曼編碼是把出現(xiàn)概率較大的用較短的碼元來(lái)實(shí)現(xiàn),概率出現(xiàn)較小的用較長(zhǎng)的碼元實(shí)現(xiàn)。4.2數(shù)字信號(hào)基帶傳輸系統(tǒng)的設(shè)計(jì)結(jié)果

4.2.1單極性非歸零碼及其功率譜

圖4.2.1單極性非歸零碼碼型和功率譜

輸入的序列是x=[1 1 0 1 0 0 1 0 1 0 0 1],輸出的序列是y=[1 1 0 1 0 0 1 0 1 0 0 1]經(jīng)編碼規(guī)則驗(yàn)證是正確的。功率譜顯示,碼型的功率分布有分段性,并以某些頻率為中心。

4.2.2單極性歸零碼及其功率譜

圖4.2.2單極性歸零碼碼型和功率譜

由圖可知,輸入的序列是x=[1 1 0 1 0 0 1 0 1 0 0 1],輸出的序列是y=[10 10 00 10 00 00 10 00 10 00 00 10] 經(jīng)編碼規(guī)則驗(yàn)證是正確的。功率譜顯示,碼型的功率分布有分段性,并以某些頻率為中心。

4.2.3雙極性非歸零碼及其功率譜

圖4.2.3雙極性非歸零碼碼型和功率譜

由圖可知輸入的序列為x=[1 1 0 1 0 0 1 0 1 0 0 1],輸出的序列為y=[1 1-1 1-1-1 1-1 1-1-1 1], 經(jīng)編碼規(guī)則驗(yàn)證是正確的。功率譜顯示,碼型的功率分布有分段性,并以某些頻率為中心。

4.2.4雙極性歸零碼及其功率譜密度

圖4.2.4雙極性歸零碼碼型和功率譜

由圖可知,輸入序列為x=[1 1 0 1 0 0 1 0 1 0 0 1],輸出序列為y=[10 10-10 10-10-10 10-10 10-10-10 10]。經(jīng)編碼規(guī)則驗(yàn)證是正確的。功率譜顯示,碼型的功率分布有分段性,并以某些頻率為中心。

4.2.5數(shù)字雙相碼及其功率譜

圖4.2.5數(shù)字雙相碼碼型和功率譜

由圖可知,輸入的序列為x=[1 1 0 1 0 0 1 0 1 0 0 1],輸出的序列為y=[10 10 01 10 01 01 10 01 10 01 01 10].功率譜顯示,碼型的功率分布有分段性。

4.2.6密勒碼及其功率譜

圖4.2.6密勒碼碼型和功率譜

信息的輸入序列是x=[1 1 0 1 0 0 1 0 1 0 0 1]。

4.2.7 AMI碼及其功率譜

圖4.2.7AMI碼碼型和功率譜

輸入序列是x=[1 1 0 1 0 0 1 0 1 0 0 1]。

4.2.8 HDB3碼及其功率譜

圖4.2.8 HDB3碼碼型和功率譜

由此圖的功率譜與AMI碼的功率譜比較可知,HDB3碼與AMI碼是相似的,HDB3碼是AMI碼的變形。

5、心得體會(huì)

6附件

6.1信息論基本計(jì)算

6.1.1、信源平均信息量的計(jì)算(高斯分布的信源)x=randn(1,100000);%產(chǎn)生N(0,1)高斯源 px=1/sqrt(2*pi)*exp(-(x-1).^2/2);%計(jì)算概率 l=-mean(log2(px))%計(jì)算熵

6.1.2、編程實(shí)現(xiàn)離散信道容量的計(jì)算(以輸入符號(hào)等概分布為例)function r=dmessage(x,n)%參數(shù)x表示概率矩陣,n是符號(hào)的數(shù)目 r=0;for i=1:n r=r-x(i)*log(x(i))/log(2);end disp('此離散信源的平均信息量為:');r %直接在命令窗口中調(diào)用dmessage函數(shù),也可以在其它函數(shù)中調(diào)用 dmessage([0.25,0.25,0.25,0.25],4)

6.1.3、離散信道容量的計(jì)算 %求互信息的函數(shù)文件如下 function r=hmessage(x,f,nx,my)%x為輸出的信源分布,f為轉(zhuǎn)移概率矩陣,nx為輸出的符號(hào)可選個(gè)數(shù) %my為輸出的符號(hào)個(gè)數(shù) sum=0;for i=1:nx for j=1:my 11 %通過(guò)式子p(x,y)=p(x)p(y/x)來(lái)求p(x,y),用t表示 t=f(i,j)*x(i);%求平均互信息量 if t~=0 sum=sum-t*log(f(i,j))/log(2);end;end;end;r=sum;disp('平均互信息量為:');%利用函數(shù)dmessage來(lái)求信源的熵,利用函數(shù)hmessage來(lái)求平均互信息量 x=[0.25,0.25,0.25,0.25];f1=[1/2,1/4,1/4,0,0,0 0,1/2,1/4,1/4,0,0 0,0,1/2,1/4,1/4,0 0,0,0,1/2,1/4,1/4,];hf1=hmessage(x,f1,4,6);hx=dmessage(x,4);c1=hx-hf1 %信道容量

6.1.4、哈弗曼編碼的實(shí)現(xiàn) p=[1/4,1/4,1/4,1/8,1/8];[h,l]=huffman1(p)%哈弗曼編碼的實(shí)現(xiàn)函數(shù)如下 function [h,l]=huffman(p)if(length(find(p<0))~=0)error('Not a prob,negative component');end if(abs(sum(p)-1)>10e-10)error('Not a prob.vector,component do not add to 1')end n=length(p);q=p;12 m=zeros(n-1,n);for i=1:n-1 [q,l]=sort(q);m(i,:)=[l(1:n-i+1),zeros(1,i-1)];q=[q(1)+q(2),q(3:n),1];end for i=1:n-1 c(i,:)=blanks(n*n);end c(n-1,n)='0';c(n-1,2*n)='1';for i=2:n-1

c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(find(m(n-i+1,:)==1)));c(n-i,n)='0';c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)='1';for j=1:i-1

c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1));end;end for i=1:n h(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n);ll(i)=length(find(abs(h(i,:))~=32));end l=sum(p.*ll);%在命令窗口或M文件里調(diào)用haffman函數(shù) p=[1/2,1/4,1/8,1/16,1/16];[h,l]=huffman(p)

6.2數(shù)字信號(hào)基帶傳輸系統(tǒng)

6.2.1、單極性非歸零碼以及功率譜的實(shí)現(xiàn) function y=djx(x)%本函數(shù)實(shí)現(xiàn)將輸入的一段二進(jìn)制代碼編碼為相應(yīng)的單極性非歸零碼輸出 %輸入x為二進(jìn)制碼,輸出y為編好的碼

%給出計(jì)算每一個(gè)碼元的點(diǎn)數(shù),因?yàn)槲覀冎挥杏秒x散的點(diǎn)來(lái)得出連續(xù)的函數(shù)表示 grid=300;t=0:1/grid:length(x);for i=1:length(x)if(x(i)==1)for j=1:grid y((i-1)*grid+j)=1;end else for j=1:grid y((i-1)*grid+j)=0;end end end y=[y,x(i)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);hold on;axis([0,i,m-0.1,M+0.1]);%采用title命令來(lái)實(shí)現(xiàn)標(biāo)記出各碼元對(duì)應(yīng)的二元信息

title(' 1 1 0 1 0 0 1 0 1 0 0 1 ');fs=100;x=1:1/fs:5;y=sin(pi*x);y=y./(pi*x);14 y(1)=1;dan1=y.*y;dan1=dan1/4;subplot(2,1,2);subplot(2,1,2);plot(x,dan1);axis([1,4,0,0.015]);title('單極性非歸零碼的功率譜');%函數(shù)調(diào)用t=[1 1 0 1 0 0 1 0 1 0 0 1];djx(t);

6.2.2、單極性歸零碼及其功率譜實(shí)現(xiàn) function y=djxglm(x)grid=200;t=0:1/grid:length(x);for i=1:length(x)if(x(i)==1)for j=1:grid/2 y(grid/2*(2*i-2)+j)=1;y(grid/2*(2*i-1)+j)=0;end else for j=1:grid/2 y(grid*(i-1)+j)=0;end end end y=[y,x(i)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);title(' 1 1 0 1 0 0 1 15

0 1 0 0 1 ');fs=50;x=1:1/fs:5;y=sin(pi*x);y=y./(pi*x);y(1)=2;dan2=y.*y;dan2=dan2/4;subplot(2,1,2);plot(x,dan2);axis([1,5,0,0.05]);title('單極性歸零碼的功率譜');%在命令窗口或M文件中調(diào)用函數(shù) t=[1 1 0 1 0 0 1 0 1 0 0 1];djxglm(t);

6.2.3、雙極性非歸零碼及其功率譜的實(shí)現(xiàn) function y=sjx(x)%本函數(shù)實(shí)現(xiàn)將輸入的一段二進(jìn)制代碼編碼為相應(yīng)的雙極性非歸零碼輸出 %輸入x為二進(jìn)制碼,輸出y為編好的碼 grid=300;t=0:1/grid:length(x);for i=1:length(x)if(x(i)==1)for j=1:grid y((i-1)*grid+j)=1;end else for j=1:grid y((i-1)*grid+j)=-1;end 16 end end y=[y,x(i)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令來(lái)實(shí)現(xiàn)標(biāo)記出各碼元對(duì)應(yīng)的二元信息

title(' 1 1 0 1 0 0 1 0 1 0 0 1 ');fs=100;x=1:1/fs:5;y=sin(pi*x);y=y./(pi*x);y(1)=1;dan1=y.*y;dan1=dan1/4;subplot(2,1,2);plot(x,dan1);axis([1,4,0,0.02]);title('雙極性非歸零碼的功率譜');%在命令窗口或M文件中調(diào)用函數(shù) t=[1 1 0 1 0 0 1 0 1 0 0 1];sjx(t);

6.2.4、雙極性歸零碼及其功率譜的實(shí)現(xiàn) function y=sjxglm(x)%本函數(shù)實(shí)現(xiàn)將輸入的一段二進(jìn)制代碼編碼為相應(yīng)的雙極性歸零碼輸出%輸入x為二進(jìn)制碼,輸出y為編好的碼 grid=300;t=0:1/grid:length(x);for i=1:length(x)17

if(x(i)==1)for j=1:grid/2 y(grid/2*(2*i-2)+j)=1;y(grid/2*(2*i-1)+j)=0;end else for j=1:grid/2 y(grid/2*(2*i-2)+j)=-1;y(grid/2*(2*i-1)+j)=0;end end end y=[y,x(i)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令來(lái)實(shí)現(xiàn)標(biāo)記出各碼元對(duì)應(yīng)的二元信息title(' 1 1 0 1 0 0 1 0 1 0 0 1 ');fs=50;x=1:1/fs:5;y=sin(pi*x);y=y./(pi*x);y(1)=2;dan2=y.*y;dan2=dan2/4;subplot(2,1,2);plot(x,dan2);axis([1,5,0,0.025]);title('雙極性歸零碼的功率譜');%在命令窗口或M文件中調(diào)用函數(shù)

t=[1 1 0 1 0 0 1 0 1 0 0 1];sjxglm(t);

6.2.5、數(shù)字雙相碼及其功率譜的實(shí)現(xiàn) function y=szsxm(x)%本函數(shù)實(shí)現(xiàn)將輸入的一段二進(jìn)制代碼編碼為相應(yīng)的數(shù)字雙相碼輸出 %輸入x為二進(jìn)制碼,輸出y為編好的碼 grid=300;t=0:1/grid:length(x);for i=1:length(x)if(x(i)==1)for j=1:grid/2 y(grid/2*(2*i-2)+j)=1;%用從1到0的電平跳變來(lái)表示‘1’ y(grid/2*(2*i-1)+j)=0;end else for j=1:grid/2 y(grid/2*(2*i-2)+j)=0;%用從0到1的電平跳變來(lái)表示‘0’ y(grid/2*(2*i-1)+j)=1;end end end y=[y,x(i)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令來(lái)實(shí)現(xiàn)標(biāo)記出各碼元對(duì)應(yīng)的二元信息

title(' 1 1 0 1 0 0 1 0 1 0 0 1 ');fs=100;x=1:1/fs:5;19

y=sin(pi*x/2);y=y./(pi*x/2);y(1)=1;mache=sin(pi*x/2).*sin(pi*x/2);mache=mache.*y;mache=mache.*y;subplot(2,1,2);plot(x,mache);axis([1,5,0,0.5]);title('數(shù)字雙相碼的功率譜');%在命令窗口或M文件中調(diào)用函數(shù) t=[1 1 0 1 0 0 1 0 1 0 0 1];szsxm(t);

6.2.6、密勒碼及其功率譜的實(shí)現(xiàn) function y=mlm(x)%該函數(shù)實(shí)現(xiàn)密勒編碼,輸入碼序列為x grid=100;t=0:1/grid:length(x);%定義時(shí)間序列 i=1;%由于第一碼元的編碼不定,我們直接給出 if(x(i)==1)for j=1:grid/2 y(grid/2*(2*i-2)+j)=0;%前半時(shí)間為0 y(grid/2*(2*i-1)+j)=1;%后半時(shí)間為1 end else for j=1:grid%若輸入0 y(grid*(i-1)+j)=0;%碼元持續(xù)時(shí)間內(nèi)為0 end end for i=2:length(x)%開始進(jìn)行密勒編碼

if(x(i)==1)%若輸入信息為1 for j=1:grid/2 y(grid/2*(2*i-2)+j)=y(grid/2*(2*i-3)+grid/4);%前半時(shí)間與前一碼元后半時(shí)間值相同

y(grid/2*(2*i-1)+j)=1-y(grid/2*(2*i-2)+j);%后半時(shí)間與前半時(shí)間相反 end else if(x(i-1)==1)%反之,若前一信息為1,輸入為0 for j=1:grid y(grid*(i-1)+j)=y(grid/2*(2*i-3)+grid/4);%所有時(shí)間與前一碼元后半時(shí)間值相同 end else%前一信息為0 for j=1:grid y(grid*(i-1)+j)=1-y(grid/2*(2*i-3)+grid/4);%所有時(shí)間與前一碼元后半時(shí)間值相反 end end end end y=[y,y(i*grid)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令來(lái)實(shí)現(xiàn)標(biāo)記出各碼元對(duì)應(yīng)的二元信息

title(' 1 1 0 1 0 0 1 0 1 0 0 1 ');fs=100;x=1:1/fs:5;x=x*pi;miler=(23-2*cos(x)-22*cos(2*x)-12*cos(3*x)+5*cos(4*x)+12*cos(5*x)+2*c 21 os(6*x)-8*cos(7*x)+2*cos(8*x))./(17+8*cos(8*x));t=x.*x;miler=miler./t;miler(1)=0.2;x=x/pi;subplot(2,1,2);plot(x,miler);axis([1,5,0,0.3]);title('密勒碼的功率譜')%下面是mlm函數(shù)的調(diào)用 t=[1 1 0 1 0 0 1 0 1 0 0 1];mlm(t);

6.2.7、AMI碼及其功率譜的實(shí)現(xiàn) *t2f.m文件:傅里葉變換 function X=t2f(x,dt)X=fftshift(fft(x))*dt;

function y=AMI(x)grid=300;t=0:1/grid:length(x);i=1;if(x(i)==1)for j=1:grid y(j)=1;h=1;end else for j=1:grid y(j)=0;end end for i=2:length(x)if(x(i)==1)if h==1 for j=1:grid y(grid*(i-1)+j)=-1;h=-1;end else if h==-1 for j=1:grid y(grid*(i-1)+j)=1;h=1;end end end else for j=1:grid y(grid*(i-1)+j)=0;end end end y=[y,x(i)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令來(lái)實(shí)現(xiàn)標(biāo)記出各碼元對(duì)應(yīng)的二元信息title(' 1 1 0 1 0 0 1 0 1 0 0 1 ');Rt=0.5;k=14;N=2^k;L=64;M=N/L;Rb=2;Ts=1/Rb dt=Ts/L;df=1/(N*dt)T=N*dt Bs=N*df/2;t=[-T/2+dt/2:dt:T/2];f=[-Bs+df/2:df:Bs];Ep=zeros(size(f));for ii=1:50 n=1;while rem(n,2)~=0, a=round(rand(1,M));n=length(find(a==1));end bb=find(a==1);cc=bb(1:2:length(bb));b=a;

b(cc)=-ones(size(cc));ami=zeros(1,N);for tt=1:Rt*Ts/dt;ami(tt+[0:M-1]*L)=b;end AMI=t2f(ami,dt);P=AMI.*conj(AMI)/T;Ep=(Ep*(ii-1)+P)/ii;end aa=30+10*log10(Ep+eps);subplot(2,1,2);plot(f,aa);axis([-5,+5,-50,50]);title('AMI功率譜密度')%AMI函數(shù)的調(diào)用

t=[1 1 0 1 0 0 1 0 1 0 0 1];AMI(t);

6.2.8、HDB3碼及其功率譜的實(shí)現(xiàn) function X=t2f(x,dt)X=fftshift(fft(x))*dt;*HDB3_encoding.m文件:

function [changed_hdb3]=Hdb3_encoding(pcm)last_V=-1;last_one=-1;M=length(pcm);changed_hdb3=zeros(size(pcm));count=0;for i=1:M if(pcm(i)==1)changed_hdb3(i)=-last_one;last_one=changed_hdb3(i);count=0;else count=count+1;

if(count==4)count=0;changed_hdb3(i)=-last_V;last_V=changed_hdb3(i);if(i>4)if(changed_hdb3(i)*last_one==-1)changed_hdb3(i-3)=changed_hdb3(i);end end last_one=changed_hdb3(i);end end end %函數(shù)調(diào)用 clear all close all k=input(‘取樣點(diǎn)數(shù)=2^k,k=[4]’);if isempty(k), k=14;end N=2^k;L=64;M=N/L;Rb=1;Ts=1/Rb;dt=Ts/L;df=1/(N*dt);T=N*dt;Bs=N*df/2;t=[-T/2+dt/2:dt:T/2];f=[-Bs+df/2:df:Bs];Ep=zeros(size(f));for ii=1:30 a=rand(1,M)>0.75;b=Hdb3_encoding(a);hdb=zeros(L,M);init=zeros(L,M);for loop=1:L/2 init(loop,:)=a;end for loop=1:L/2 hdb(loop,:)=b;end hdb=reshape(hdb,1,N);init=reshape(init,1,N);HDB=t2f(hdb,dt);P=HDB.*conj(HDB)/T;Ep=(Ep*(ii-1)+P)/ii;end init figure(9)subplot(3,1,1)plot(t,init,'m')grid on axis([0,T/10,-1.5,1.5])set(gca,'XTick',[0:1:T/10])xlabel('t(Tb)')ylabel('s(t)')title(‘原始序列’)subplot(3,1,2)plot(t,hdb,'b')grid on axis([0,T/10,-1.5,1.5])set(gca,'XTick',[0:1:T/10])xlabel('t(Tb)')ylabel('s(t)')title(‘HDB3編碼序列’)subplot(3,1,3)aa=30+10*log10(Ep+eps);plot(f,aa,'r')grid on axis([-5,5,-50,50])xlabel('f(Rb)')ylabel('Ps(f)')title(‘HDB3碼功率譜密度’)

下載Matlab課程設(shè)計(jì)報(bào)告(簡(jiǎn)單計(jì)算器)word格式文檔
下載Matlab課程設(shè)計(jì)報(bào)告(簡(jiǎn)單計(jì)算器).doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(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)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    Matlab應(yīng)用課程設(shè)計(jì)[本站推薦]

    課程設(shè)計(jì)名稱:Matlab應(yīng)用課程設(shè)計(jì) 課程設(shè)計(jì)題目:題目(如:Matlab運(yùn)算與受控源電阻電路分析)初始條件: 1. Matlab7.0以上版本軟件; 2. 課程設(shè)計(jì)輔導(dǎo)資料:“Matlab語(yǔ)言基礎(chǔ)及使用入門”......

    AVA簡(jiǎn)易計(jì)算器課程設(shè)計(jì)-

    JAVA課程設(shè)計(jì) 簡(jiǎn)易計(jì)算器的設(shè)計(jì) 學(xué)號(hào): 姓名: 班級(jí): 指導(dǎo)教師:完成日期:第1頁(yè)(共11頁(yè)) 2016-12-31JAVA課程設(shè)計(jì) 目 錄 簡(jiǎn)易計(jì)算器課程設(shè)計(jì) ............................................

    微機(jī)原理簡(jiǎn)易計(jì)算器課程設(shè)計(jì)

    簡(jiǎn)易計(jì)算機(jī)課程設(shè)計(jì) 一、 設(shè)計(jì)目的 本次課程設(shè)計(jì)的實(shí)驗(yàn)?zāi)康氖峭ㄟ^(guò)該實(shí)驗(yàn)掌握較復(fù)雜程序的設(shè)計(jì)。能夠獨(dú)立完成用程序?qū)?255控制鍵盤和LED顯示的控制,完成計(jì)算器加減法的應(yīng)用。......

    設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算器的C語(yǔ)言課程設(shè)計(jì)報(bào)告

    東華理工大學(xué) C語(yǔ)言課程設(shè)計(jì)報(bào)告 題目:設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算器 姓名:地瓜葉 學(xué)號(hào):????? 指導(dǎo)老師:吳志強(qiáng)老師 東華理工大學(xué) 目 錄 1.設(shè)計(jì)目的 2.內(nèi)容3.總體設(shè)計(jì)(有流程圖) 4.源程序編寫......

    牛頭刨床課程設(shè)計(jì)matlab程序

    lo2o3=0.65;l2=0.09250;l4=1.1245;l5=0.281125;lo3d=1.11878;w2=8*pi/3;m4=16;m5=4;m6=68; g=9.8;j4=1.6;j5=0.03;k2=-38.18; for i=1:13; k2=k2+30; if k2>90&k2(0.03+0.......

    設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算器的C語(yǔ)言課程設(shè)計(jì)報(bào)告5篇

    C語(yǔ)言課程設(shè)計(jì)報(bào)告 題目:設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算器 目 錄 1.設(shè)計(jì)目的 2.內(nèi)容3.總體設(shè)計(jì)(有流程圖) 4.源程序編寫(附上了運(yùn)行圖)5.執(zhí)行結(jié)果6.心得體會(huì)一、 設(shè)計(jì)目的 設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算......

    高頻電子線路Matlab仿真實(shí)驗(yàn)-課程設(shè)計(jì)要求

    高頻電子線路Matlab仿真實(shí)驗(yàn)/課程設(shè)計(jì)要求 1. 要求 每位同學(xué)根據(jù)教材附錄的matlab源碼獨(dú)立完成以下仿真要求,并將仿真代碼和仿真結(jié)果寫成實(shí)驗(yàn)報(bào)告,由各班統(tǒng)一收齊并于5月31日......

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

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

主站蜘蛛池模板: 日韩精品久久无码中文字幕| 久久综合九色综合网站| 人妻饥渴偷公乱中文字幕| 蜜乳av久久久久久久久久久| 另类重口特殊av无码| 国产欧美日韩一区二区加勒比| 人妻被按摩师玩弄到潮喷| 人妻丰满熟妇av无码处处不卡| 久久婷婷日日澡天天添| 又色又污又爽又黄的网站| 蜜芽国产尤物av尤物在线看| 免费无码又爽又刺激网站| 国产亚洲精品久久无码98| 国产精品.xx视频.xxtv| 熟女人妻aⅴ一区二区三区电影| 痉挛高潮喷水av无码免费| 少妇人妻在线无码天堂视频网| h肉动漫无码无修6080动漫网| 国产精品videossex国产高清| 欧美日韩国产专区一区二区| 久久精品aⅴ无码中文字字幕不卡| 裸身美女无遮挡永久免费视频| 99精品国产在热久久无码| 亚洲大尺度无码无码专区| 夜夜高潮夜夜爽国产伦精品| 污污内射久久一区二区欧美日韩| 亚洲国内精品av五月天| 中文字幕欧洲有码无码| 在线a人片免费观看| 国产人妻精品午夜福利免费| 久久综合97丁香色香蕉| 久久综合99re88久久爱| 18禁白丝喷水视频www视频| 日本一区二区a√成人片| 国产亚洲精品精品精品| 国产免费人成在线视频网站| 少妇愉情理伦片丰满丰满午夜| 国产二级一片内射视频播放| 国产裸拍裸体视频在线观看| 亚洲第一女人av| 国产 亚洲 制服 无码 中文|