版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 單片機課程設計實驗報告</p><p><b> 簡易計算器</b></p><p><b> 目 錄</b></p><p> 一、設計任務和性能指標………………………………………………3</p><p> 1.1設計任務………………………………………………………
2、3</p><p> 1.2性能指標………………………………………………………3</p><p> 二、設計方案……………………………………………………………3</p><p> 三、系統(tǒng)硬件設計………………………………………………………4</p><p> 3.1單片機最小系統(tǒng)………………………………………………4</p>
3、;<p> 3.2鍵盤接口電路…………………………………………………5</p><p> 3.3數(shù)碼管顯示電路………………………………………………6</p><p> 3.5按鍵監(jiān)視電路…………………………………………………6</p><p> 四、系統(tǒng)軟件設計………………………………………………………7</p><p>
4、; 4.1鍵盤掃描子程序設計…………………………………………7</p><p> 4.2移位子程序及結果計算子程序設計…………………………8</p><p> 4.3顯示子程序設計………………………………………………8</p><p> 4.4主程序設計……………………………………………………21</p><p> 五、調(diào)試及性能分
5、析……………………………………………………21</p><p> 5.1調(diào)試步驟………………………………………………………21</p><p> 5.2性能分析………………………………………………………21</p><p> 六、心得體會……………………………………………………………22</p><p> 參考文獻 ………………………
6、………………………………………22</p><p> 附錄1、系統(tǒng)硬件電路圖………………………………………………23</p><p> 附錄2、硬件實物圖……………………………………………………24</p><p> 附錄3、器件清單 …………………………………………………… 25</p><p> 一、設計任務和性能指標</p
7、><p><b> 1.1設計任務</b></p><p> 自制一個單片機最小系統(tǒng),包括復位電路,采用外部小鍵盤輸入數(shù)據(jù),能夠?qū)崿F(xiàn)加法、乘法及一個科學計算,計算結果顯示在四位一體的數(shù)碼管上。</p><p><b> 1.2性能指標</b></p><p> 加法:四位加法,計算結果若超過四位
8、則顯示計算錯誤;</p><p> 減法:四位減法,計算結果若小于零則顯示計算錯誤;</p><p><b> 乘法:個位數(shù)乘法;</b></p><p><b> 除法:整數(shù)除法;</b></p><p><b> 取對數(shù);</b></p><p&
9、gt;<b> 開平方;</b></p><p><b> 指數(shù)運算;</b></p><p><b> 有清零功能</b></p><p><b> 二.設計方案</b></p><p> 按照系統(tǒng)設計的功能的要求,初步確定設計系統(tǒng)由主控模塊、
10、監(jiān)測模塊、顯示模塊、鍵掃描接口電路共四個模塊組成,電路系統(tǒng)構成框圖如圖1.1所示。主控芯片使用51系列AT89C52單片機,采用高性能的靜態(tài)80C51設計,由先進工藝制造,并帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位COMS微處理芯片,市場應用最多。</p><p> 監(jiān)測模塊采用二極管和揚聲器(實驗室用二極管代替)組成電路。</p><p> 鍵盤電路采用4*4矩
11、陣鍵盤電路。</p><p> 顯示模塊采用4枚共陽極數(shù)碼管和74ls273鎖存芯片構成等器件構成。</p><p> 整個單片機的接口電路:</p><p><b> P0用于顯示輸出;</b></p><p> P1用于鍵掃描輸入;</p><p> P2用于數(shù)碼管位選控制;<
12、/p><p> P3用于鍵盤擴展(部分運算符輸入);</p><p><b> 三.系統(tǒng)硬件設計</b></p><p> 3.1單片機最小系統(tǒng)</p><p> 單片機最小系統(tǒng)就是支持主芯片正常工作的最小電路部分,包括主控芯片、復位電路和晶振電路。</p><p> 主控芯片選取STC89
13、C52RC芯片,因其具有良好的性能及穩(wěn)定性,價格便宜應用方便。</p><p> 晶振選取11.0592MHz,晶振旁電容選取20pF。</p><p> 采用按鍵復位電路,電阻分別選取100Ω和10K,電容選取10μF。</p><p> 以下為單片機最小系統(tǒng)硬件電路圖。</p><p> 單片機最小系統(tǒng)硬件電路</p>
14、<p><b> 3.2鍵盤接口電路</b></p><p><b> 計算器所需按鍵有:</b></p><p> 數(shù)字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’</p><p> 功能鍵:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C(
15、清零)’</p><p> 擴展鍵:“l(fā)og”,“l(fā)n”,“x^2”“小數(shù)點”,“開方”</p><p> 共計25個按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行和四列的8個公共端分別接P1.0~P1.7,這樣掃描P1口就可以完成對矩陣鍵盤的掃描,通過對16個按鍵進行編碼,從而得到鍵盤的口地址,對比P1口德掃描結果和各按鍵的地址,我們就可以得到是哪個鍵按下,從而完成鍵
16、盤的功能。</p><p> 以下為鍵盤接口電路的硬件電路圖</p><p><b> 鍵盤接口電路</b></p><p><b> 實物圖:</b></p><p><b> 擴展鍵接口電路:</b></p><p> 3.3數(shù)碼管顯示電路
17、</p><p> 采用8位數(shù)碼管對計算數(shù)據(jù)和結果的顯示(實驗時只用到了4位),這里選取共陰數(shù)碼管,利用74LS244N對數(shù)碼管進行驅(qū)動,為了節(jié)省I/O資源,采取動態(tài)顯示的方法來顯示計算數(shù)據(jù)及結果。</p><p><b> P0口輸出顯示值,</b></p><p> P2.0~P2.7(實際操作用到P2.0-P2.3)用來作為位選端,
18、控制哪幾位數(shù)碼管進行顯示。</p><p> 以下為數(shù)碼顯示電路的硬件電路圖</p><p><b> 3.4按鍵監(jiān)視電路</b></p><p> 按鍵監(jiān)視電路就是在按鍵時,發(fā)出聲音提醒,以確保輸入數(shù)字有效。這里就采用5V蜂鳴器作為示音設備(實際操作用發(fā)光二極管代替)。用p3.7口輸出信號。</p><p>
19、以下為報警電路硬件電路圖</p><p><b> 按鍵監(jiān)視電路圖</b></p><p> 系統(tǒng)整體硬件電路圖見附錄一</p><p><b> 四、系統(tǒng)軟件設計</b></p><p> 4.1鍵盤掃描子程序設計</p><p> 要進行數(shù)據(jù)的計算就必須先進行數(shù)
20、據(jù)的輸入,也就必須確定按鍵輸入的數(shù)值是什么,這就需要對鍵盤進行掃描,從而確定究竟是哪個鍵按下。</p><p> 以下為鍵盤掃描子程序的程序清單。</p><p> uchar Keyscan(void)</p><p><b> {</b></p><p> uchar i,j, temp, Buffer[4]
21、 = {0xef, 0xdf, 0xbf, 0x7f};</p><p> for(j=0; j<4; j++)</p><p><b> {</b></p><p> P1 = Buffer[j];</p><p> /*以下三個_nop_();作用為讓 P1 口的狀態(tài)穩(wěn)定*/</p>&l
22、t;p><b> delay();</b></p><p> temp = 0x01; </p><p> for(i=0; i<4; i++)</p><p><b> {</b></p>
23、<p> if(!(P1 & temp)) </p><p><b> {</b></p><p> return (i+j*4);</p><p><b> }</b></p><p> temp <<= 1;</p><p><
24、;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 4.2移位程序及結果計算代碼設計</p><p> 輸入數(shù)據(jù)要存儲在一四位數(shù)組內(nèi),而我們鍵入的值是數(shù)據(jù)的高位,后鍵入的值是低位,這樣我們就需要在輸入低位數(shù)值
25、時將高位數(shù)值從數(shù)組的低位移向數(shù)組的高位,這就是編寫移位子程序的目的。</p><p> 對于結果計算子程序,包含加、減、乘、除四種運算。以加法運算為例,各種運算各有其標志位來代表計算類型,當加法標志位add=1是,就將輸入的兩個數(shù)據(jù)按照加法進行計算。</p><p> 首先將數(shù)組內(nèi)的數(shù)按照對應的位關系,將其轉化為一個十進制數(shù),這樣我們就得到了加速和被加數(shù)這樣倆個十進制數(shù),從而我們就可以
26、簡單的將兩個數(shù)進行相加,結果就是我們所求的數(shù)值。但這個數(shù)值不能直接顯示到數(shù)碼管上,我們還要對其進行處理,使其變?yōu)閷M位的四個數(shù)存入數(shù)組內(nèi),以便顯示。既通過對結果數(shù)值分別除以1000、100、10和對10取余,得到我們想要的四個數(shù),送顯示子程序顯示。其余減、乘、除的計算方法與加法的計算方法一樣,這里不再累述。</p><p> 以下為移位子程序和結果計算子程序的程序清單。</p><p>
27、; 這部分嵌入到了主函數(shù)中。</p><p><b> 調(diào)用輸入數(shù)據(jù)函數(shù):</b></p><p> 4.3顯示子程序設計</p><p> 從始至終無論是輸入的計算數(shù)據(jù),還是計算后的結果值。都存儲在同一數(shù)組dat[ ]中,這樣我們只要在顯示時一直調(diào)用dat[ ]中的值,就能正確的顯示數(shù)據(jù)。</p><p>
28、以下為顯示子程序的程序清單。</p><p> void diaplay(void) interrupt 1</p><p><b> {</b></p><p> uchar len;</p><p> TH0=(65536-2000)/256;</p><p> TL0=(65536
29、-2000)%256;</p><p> P2=Disbuf[dcounter];</p><p> len=dcounter; </p><p> P0=xx[len]; </p><p> dcounter+=1;</p><p> if(dcounter==8)</p><p&g
30、t;<b> {</b></p><p> dcounter=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> 延時程序:</b></p><p> void D
31、elay_1ms(uint i)//1ms延時</p><p><b> {</b></p><p> uchar x,j;</p><p> for(j=0;j<i;j++)</p><p> for(x=0;x<=148;x++);</p><p><b>
32、}</b></p><p> void delay()</p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=0; i<=10; i++)</p><p> for(j=0; j&l
33、t;=2; j++)</p><p><b> ;</b></p><p><b> }</b></p><p><b> 4.4主程序設計</b></p><p> 主程序既把以上各子程序串連成一個整體,使整個程序循環(huán)運行。而在以上程序中也已經(jīng)加入了個程序之間的連接點
34、,首先進入程序后就立即進入顯示子程序,而顯示子程序內(nèi)又調(diào)用鍵盤掃描子程序,若有鍵按下,則會跳轉到移位子程序和結果計算子程序進行相應的處理。通過計算或移位后,數(shù)組內(nèi)的值發(fā)生改變,顯示的值也會同時發(fā)生改變。之后再進行鍵盤掃描,如此反復運行,就構成了程序的整體。</p><p><b> 整體程序清單如下:</b></p><p> #include<reg52.
35、h></p><p> #include<intrins.h></p><p> #include<math.h></p><p> typedef unsigned char uchar;</p><p> typedef unsigned int uint;</p><p>
36、 void delay();</p><p> uchar Keyscan(void);</p><p> void result_a(void);</p><p> void diaplay(void);</p><p> void Delay_1ms(uint i);</p><p> uchar vie
37、_a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};</p><p> uchar exchg_a[16]={7,8,9,13,4,5,6,12,1,2,3,11,14,0,15,10};</p><p> uchar xx[8];</p><p> uchar xxu[8];</p>
38、;<p> void Speak_a(void);</p><p> sbit spp=P3^7;//響鈴</p><p> sbit cl3=P3^6;//小數(shù)點</p><p> sbit cl=P3^1;//求ln</p><p> sbit cl0=P3^2;//開方</p><p>
39、 sbit cl1=P3^3;//求log</p><p> sbit cl2=P3^4;//求e的x次冪</p><p> uchar flo[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xef,0xef};</p><p> uchar zz[8]={0x77,0x3f,0x77,0x77,0x79};<
40、;/p><p> uchar Disbuf[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};</p><p> uchar yy[8]={0x3f,0,0};</p><p> float a=0,b=0,c;</p><p> uchar L=1;</p><p> u
41、char cal_a=0,dcounter=0;</p><p> void main(void)</p><p><b> {</b></p><p> uchar singlp_a=1,n=1;</p><p> uchar key=18;</p><p> uchar all_m=
42、0,ent_a=0,att=1;</p><p> signed long s,r;</p><p> TMOD=0x01;</p><p> TH0=(65536-2000)/256;</p><p> TL0=(65536-2000)%256;</p><p><b> EA=1;</b&
43、gt;</p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> spp=0;</b></p><p><b> while(1)</b></p><p>&l
44、t;b> {</b></p><p> if(singlp_a==1)</p><p><b> {</b></p><p> singlp_a=0;</p><p><b> P3=0x7f;</b></p><p> if(P3!=0x7f)
45、</p><p><b> {</b></p><p> Delay_1ms(2);</p><p><b> if(cl==0)</b></p><p><b> {</b></p><p> Speak_a();</p>&l
46、t;p> cal_a=14;//求以㏑x</p><p><b> key=15;</b></p><p><b> }</b></p><p> if(cl0==0)</p><p><b> {</b></p><p> Speak
47、_a();</p><p> cal_a=15;//開方</p><p><b> key=15;</b></p><p><b> }</b></p><p> if(cl1==0)</p><p><b> {</b></p>
48、<p> Speak_a();</p><p> cal_a=16;//求以十為底對數(shù)</p><p><b> key=15;</b></p><p><b> }</b></p><p> if(cl2==0)</p><p><b>
49、{</b></p><p> Speak_a();</p><p> cal_a=17;//求e的x次冪</p><p><b> key=15;</b></p><p><b> }</b></p><p> if(cl3==0)</p>
50、<p><b> {</b></p><p><b> att=0;</b></p><p> xx[0]=xx[0]+0x80;</p><p><b> }</b></p><p><b> }</b></p>&l
51、t;p><b> P1=0x0f;</b></p><p> if(P1!=0x0f)</p><p><b> {</b></p><p> Delay_1ms(2);</p><p> if(P1!=0x0f)</p><p><b> {&l
52、t;/b></p><p> key=exchg_a[Keyscan()];</p><p> Speak_a();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
53、/p><p><b> P1=0x0f;</b></p><p><b> P3=0x7f;</b></p><p> if(P1==0x0f&&P3==0x7f)</p><p><b> {</b></p><p> singl
54、p_a=1;</p><p><b> }</b></p><p> if(key<=9&&key>=0)</p><p><b> {</b></p><p> if(all_m==0)</p><p><b> {</
55、b></p><p> if(ent_a==0)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> ent_a=1;</b></p><p> for(i=0;i<=
56、7;i++)</p><p><b> {</b></p><p><b> xx[i]=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> els
57、e </b></p><p><b> {}</b></p><p> if(att==1)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> a=a*10+key;<
58、/p><p> for(i=7;i>0;i--)</p><p><b> {</b></p><p> xx[i]=xx[i-1];</p><p><b> }</b></p><p> xx[0]=vie_a[key];</p><p&g
59、t;<b> key=18;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> uchar i;</b></p&g
60、t;<p> double m;</p><p> for(i=7;i>0;i--)</p><p><b> {</b></p><p> xx[i]=xx[i-1];</p><p><b> }</b></p><p> xx[0]=v
61、ie_a[key];</p><p><b> m=key;</b></p><p> for(i=1;i<=n;i++)</p><p><b> {</b></p><p><b> m=m/10;</b></p><p><b&
62、gt; }</b></p><p><b> a=m+a;</b></p><p><b> n++;</b></p><p><b> key=28;</b></p><p><b> }</b></p><p
63、><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(att==1)</p><p><b> {</b></p><p><b>
64、; uchar i;</b></p><p> b=b*10+key;</p><p> for(i=7;i>0;i--)</p><p><b> {</b></p><p> xx[i]=xx[i-1];</p><p><b> }</b>
65、</p><p> xx[0]=vie_a[key];</p><p><b> key=18;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
66、;</p><p><b> uchar i;</b></p><p> double m;</p><p> for(i=7;i>0;i--)</p><p><b> {</b></p><p> xx[i]=xx[i-1];</p>&l
67、t;p><b> }</b></p><p> xx[0]=vie_a[key];</p><p><b> m=key;</b></p><p> for(i=1;i<=n;i++)</p><p><b> {</b></p><p
68、><b> m=m/10;</b></p><p><b> }</b></p><p><b> b=m+b;</b></p><p><b> n++;</b></p><p><b> key=28;</b>&
69、lt;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(key>=10&&key<=13)</p><p><b> {&l
70、t;/b></p><p><b> uchar i;</b></p><p> cal_a=key;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> xx[i]=xxu[i];</p&
71、gt;<p><b> }</b></p><p><b> all_m=1;</b></p><p><b> key=18;</b></p><p><b> att=1;</b></p><p><b> n=1;&
72、lt;/b></p><p><b> }</b></p><p> if(key==14)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> key=18;&l
73、t;/b></p><p><b> ent_a=0;</b></p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> xx[i]=yy[i];</p><p><b> }</b&g
74、t;</p><p><b> a=0;</b></p><p><b> b=0;</b></p><p><b> c=0;</b></p><p><b> all_m=0;</b></p><p><b>
75、 L=1;</b></p><p><b> att=1;</b></p><p><b> n=1;</b></p><p><b> cal_a=0;</b></p><p><b> }</b></p><p
76、> if(key==15)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> all_m=0;</b></p><p><b> key=28;</b></p>
77、<p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p><b> xx[i]=0;</b></p><p><b> }</b></p><p> result_a();//調(diào)用求計算結果</p>
78、;<p><b> if(L==1)</b></p><p><b> {</b></p><p><b> if(c==0)</b></p><p><b> {</b></p><p> xx[0]=0x3f;</p&g
79、t;<p><b> }</b></p><p> if(c>=0.0001)</p><p><b> {</b></p><p><b> r=c;</b></p><p> s=10000*(c-r);</p><p>
80、;<b> n=0;</b></p><p> xx[n]=vie_a[s%10];</p><p> if(s%10!=0)</p><p><b> {</b></p><p><b> n++;</b></p><p><b>
81、 }</b></p><p> if(c>=0.001)</p><p><b> {</b></p><p><b> r=c;</b></p><p> s=1000*(c-r);</p><p> xx[n]=vie_a[s%10];<
82、;/p><p> if(n==0&&s%10==0)</p><p><b> {}</b></p><p><b> else</b></p><p><b> {</b></p><p><b> n++;</b
83、></p><p><b> }</b></p><p> if(c>=0.01)</p><p><b> {</b></p><p><b> r=c;</b></p><p> s=100*(c-r);</p>
84、<p> xx[n]=vie_a[s%10];</p><p> if(n==0&&s%10==0)</p><p><b> {}</b></p><p><b> else</b></p><p><b> {</b></p>
85、<p><b> n++;</b></p><p><b> }</b></p><p> if(c>=0.1)</p><p><b> {</b></p><p><b> r=c;</b></p><
86、p> s=10*(c-r);</p><p> xx[n]=vie_a[s%10];</p><p> if(n==0&&s%10==0)</p><p><b> {}</b></p><p><b> else</b></p><p>&l
87、t;b> {</b></p><p><b> n++;</b></p><p><b> }</b></p><p><b> if(c>=1)</b></p><p><b> {</b></p><
88、;p><b> s=c;</b></p><p> xx[n]=flo[s%10];</p><p><b> n++;</b></p><p><b> if(c>=10)</b></p><p><b> {</b></p&
89、gt;<p><b> s=c/10;</b></p><p> xx[n]=vie_a[s%10];</p><p><b> n++;</b></p><p> if(c>=100)</p><p><b> {</b></p>
90、<p><b> s=c/100;</b></p><p><b> if(n>=8)</b></p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<
91、=7;i++)</p><p><b> {</b></p><p> xx[i]=xx[i+1];</p><p><b> }</b></p><p> xx[n-1]=vie_a[s%10];</p><p><b> }</b><
92、/p><p><b> else</b></p><p><b> {</b></p><p> xx[n]=vie_a[s%10];</p><p><b> n++;</b></p><p><b> }</b></
93、p><p> if(c>=1000)</p><p><b> {</b></p><p><b> s=c/1000;</b></p><p><b> if(n>=8)</b></p><p><b> {</b&g
94、t;</p><p><b> uchar i;</b></p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> xx[i]=xx[i+1];</p><p><b> }</b>&l
95、t;/p><p> xx[n-1]=vie_a[s%10];</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> xx[n]=vie_a[s%10];</p
96、><p><b> n++;</b></p><p><b> }</b></p><p> if(c>=10000)</p><p><b> {</b></p><p> s=c/10000;</p><p>&l
97、t;b> if(n>=8)</b></p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p>
98、<p> xx[i]=xx[i+1];</p><p><b> }</b></p><p> xx[n-1]=vie_a[s%10];</p><p><b> }</b></p><p><b> else</b></p><p&g
99、t;<b> {</b></p><p> xx[n]=vie_a[s%10];</p><p><b> n++;</b></p><p><b> }</b></p><p> if(c>=100000)</p><p><b&
100、gt; {</b></p><p> s=c/100000;</p><p><b> if(n>=8)</b></p><p><b> {</b></p><p><b> uchar i;</b></p><p> f
101、or(i=0;i<=7;i++)</p><p><b> {</b></p><p> xx[i]=xx[i+1];</p><p><b> }</b></p><p> xx[n-1]=vie_a[s%10];</p><p><b> }&l
102、t;/b></p><p><b> else</b></p><p><b> {</b></p><p> xx[n]=vie_a[s%10];</p><p><b> n++;</b></p><p><b> }<
103、;/b></p><p> if(c>=1000000)</p><p><b> {</b></p><p> s=c/1000000;</p><p><b> if(n>=8)</b></p><p><b> {</b>
104、;</p><p><b> uchar i;</b></p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> xx[i]=xx[i+1];</p><p><b> }</b><
105、;/p><p> xx[n-1]=vie_a[s%10];</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> xx[n]=vie_a[s%10];</p&
106、gt;<p><b> n++;</b></p><p><b> }</b></p><p> if(c>=10000000)</p><p><b> {</b></p><p> s=c/10000000;</p><p&
107、gt;<b> if(n>=8)</b></p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p
108、><p> xx[i]=xx[i+1];</p><p><b> }</b></p><p> xx[n-1]=vie_a[s%10];</p><p><b> }</b></p><p><b> else</b></p>&l
109、t;p><b> {</b></p><p> xx[n]=vie_a[s%10];</p><p><b> n++;</b></p><p><b> }</b></p><p> if(c>=100000000)</p><p&g
110、t;<b> {</b></p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> xx[i]=zz[i];</p><p><b> }</b></p><p><b>
111、}</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }<
112、/b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b
113、></p><p> xx[n]=0xbf;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
114、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><
115、;p> void result_a(void)</p><p><b> {</b></p><p> switch(cal_a)</p><p><b> {</b></p><p> case 0:c=a;break;</p><p> case 10:
116、c=a+b;break;</p><p> case 11:if(a<b)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<=7;i++)</p><p><b>
117、 {</b></p><p> xx[i]=zz[i];</p><p><b> }</b></p><p><b> L=0;</b></p><p><b> }</b></p><p><b> else</
118、b></p><p><b> {</b></p><p><b> c=a-b;</b></p><p><b> }</b></p><p><b> break;</b></p><p> case 12:c
119、=a*b;break;</p><p> case 13:c=a/b;break;</p><p> case 14:c=log(a);</p><p> a=c;break;</p><p> case 15:c=sqrt(a);</p><p> a=c;break;</p><p&g
120、t; case 16:c=log10(a);</p><p> a=c;break;</p><p> case 17:c=exp(a);</p><p> a=c;break;</p><p> default:c=0;</p><p><b> }</b></p>&
121、lt;p><b> }</b></p><p> void Delay_1ms(uint i)//1ms延時</p><p><b> {</b></p><p> uchar x,j;</p><p> for(j=0;j<i;j++)</p><p>
122、; for(x=0;x<=148;x++);</p><p><b> }</b></p><p> void delay()</p><p><b> {</b></p><p><b> int i,j;</b></p><p>
123、 for(i=0; i<=10; i++)</p><p> for(j=0; j<=2; j++)</p><p><b> ;</b></p><p><b> }</b></p><p> uchar Keyscan(void)</p><p>&l
124、t;b> {</b></p><p> uchar i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};</p><p> for(j=0; j<4; j++)</p><p><b> {</b></p><p> P1 = Buffer[j
125、];</p><p> /*以下三個_nop_();作用為讓 P1 口的狀態(tài)穩(wěn)定*/</p><p><b> delay();</b></p><p> temp = 0x01; </p><p> for(i=0
126、; i<4; i++)</p><p><b> {</b></p><p> if(!(P1 & temp)) </p><p><b> {</b></p><p> return (i+j*4);</p><p><b> }</
127、b></p><p> temp <<= 1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void diaplay(void) int
128、errupt 1</p><p><b> {</b></p><p> uchar len;</p><p> TH0=(65536-2000)/256;</p><p> TL0=(65536-2000)%256;</p><p> P2=Disbuf[dcounter];</
129、p><p> len=dcounter; </p><p> P0=xx[len]; </p><p> dcounter+=1;</p><p> if(dcounter==8)</p><p><b> {</b></p><p> dcounter=0;&
130、lt;/p><p><b> }</b></p><p><b> }</b></p><p> void Speak_a(void)</p><p><b> {</b></p><p><b> uchar i;</b>&
131、lt;/p><p> for(i=0;i<=20;i++)</p><p><b> {</b></p><p><b> spp=1;</b></p><p><b> delay();</b></p><p><b> dela
132、y();</b></p><p><b> spp=0;</b></p><p><b> delay();</b></p><p><b> delay();</b></p><p><b> }</b></p><
133、;p><b> }</b></p><p><b> 五、調(diào)試及性能分析</b></p><p><b> 5.1調(diào)試步驟</b></p><p> 在焊接好器件后,先不要將芯片插在芯片座上,要先驗證先板上電源是否好用,有無短路等。接上電源,用萬用表測量個芯片座對應電源和地之間的電壓值,
134、觀察電壓值是否正常。一切正常后方可將芯片插入芯片座,以繼續(xù)測試其他功能。</p><p> 將芯片插上后,對各個模塊進行調(diào)試,按鍵是否工作正常,數(shù)碼管是否顯示正常等。編寫相關部分的測試程序?qū)ζ溥M行測試。</p><p> 各部分硬件檢測無誤后,下載程序進行整體調(diào)試,一切正常后,結束調(diào)試過程。</p><p> 在具體調(diào)試時首先遇到的問題是程序無法下載進入單片機
135、,通過將電路板接線與原理電路圖接線的對比發(fā)現(xiàn),串口芯片與單片機連接的輸入,輸出接反,重新用銅線連接后,依然無法下載程序。后找到原因是由于下載串口與設計封裝不符,用相對應的下載線可以下載。</p><p> 成功下載程序后,發(fā)現(xiàn)數(shù)碼管顯示不正確,查看后發(fā)現(xiàn)有先沒有連接,可能是制板時漏印,連接后顯示正常。</p><p><b> 5.2性能分析</b></p&
136、gt;<p> 對于計算器的性能,主要的衡量指標就在于計算的精度,本次制作的計算器性能情況如下:</p><p> 加法運算:四位加法運算,和值不超過9999,若超過上限,則顯示錯誤提示ERROR。</p><p> 減法運算:四位減法運算,若結果為負,對其取絕對值。</p><p> 乘法運算:積不超過9999的乘法運算,若超出上限,顯示錯誤
137、提示Error。</p><p> 除法運算:整數(shù)除法,既計算結果為整數(shù),若除數(shù)為零,則顯示錯誤提示Error。</p><p> 通過對實際性能的分析,可以得到本次設計滿足設計的要求。</p><p><b> 六、心得體會</b></p><p> 通過本次課程設計我真正的自己完成了對給定要求系統(tǒng)的硬件設計、
138、電路設計、電路板設計、軟件設計以及對成品的調(diào)試過程。從整個過程中學習到了很多方面的知識,了解到以往學習中自己知識在某方面的不足之處,是對以往學習科目的一種貫穿和承接,從而能更好的認識和學習,也對將來從事工作大有裨益。</p><p> 本次實驗過程中,我切實體驗到了,認真對待每一個細小零件的重要性。對于實驗室提供的零件要具有檢錯能力。我做的是計算器,實驗中換取了4個鍵盤,最后才得到正確的結果顯示。此外從本次試驗
139、中我學會到了,焊接電路布局的重要性,以及在布線時,對線路的長度要有一定的冗余,以提供糾錯方便。還有最重要的一點是,要學會使用萬用表對電路進行檢測,查出問題。</p><p> 從本次課設中我也看到了自身的很多不足之處,對知識的掌握不夠扎實,有一知半解的現(xiàn)象。有時做事不夠穩(wěn)定,過于毛躁,不能平心靜氣的去分析所遇到的問題和錯誤。這在以后的工作和生活中是不可取的,通過對自身問題的認識與改正相信再遇到同樣問題時會更好的
140、解決。以后的設計實驗也會更好的完成。</p><p><b> 參考文獻</b></p><p> [1] 李群芳,黃建. 單片機微型計算機與接口技術. 北京:電子工業(yè)出版社,2001</p><p> [2] 徐維祥、劉旭敏. 單片微型機原理及應用. 大連:大連理工大學出版社,1996</p><p> [3]
141、 李光飛、樓然苗、胡佳文、謝象佐. 單片機課程設計與實例指導. 北京: 北京航空航天大學出版社,2004 </p><p> [4] 樓然苗、李光飛. 51系列單片機設計實例. 北京:北京航空航天大學出版社,2003</p><p> 附錄1 系統(tǒng)硬件電路圖</p><p> 附錄2 硬件實物圖</p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計報告-簡易計算器
- 簡易計算器單片機課程設計報告
- 單片機課程設計報告-- 簡易計算器設計
- 單片機課程設計--簡易計算器
- 單片機課程設計簡易計算器
- 單片機課程設計-簡易計算器
- 單片機課程設計簡易計算器
- 單片機課程設計--簡易計算器
- 課程設計---單片機簡易計算器設計
- 單片機課程設計--簡易數(shù)字計算器
- 單片機課程設計---簡易計算器的設計
- 單片機課程設計--簡易計算器的設計
- 單片機課程設計報告--簡易計算器的設計、制作
- 基于51單片機簡易計算器課程設計
- 單片機課程設計報告---計算器
- 單片機計算器課程設計
- 單片機課程設計--計算器
- 單片機課程設計-計算器
- 課程設計-單片機計算器
- 單片機課程設計報告計算器2
評論
0/150
提交評論