版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告</p><p><b> 簡(jiǎn)易計(jì)算器</b></p><p><b> 目 錄</b></p><p> 一、設(shè)計(jì)任務(wù)和性能指標(biāo)………………………………………………3</p><p> 1.1設(shè)計(jì)任務(wù)………………………………………………………
2、3</p><p> 1.2性能指標(biāo)………………………………………………………3</p><p> 二、設(shè)計(jì)方案……………………………………………………………3</p><p> 三、系統(tǒng)硬件設(shè)計(jì)………………………………………………………4</p><p> 3.1單片機(jī)最小系統(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)軟件設(shè)計(jì)………………………………………………………7</p><p>
4、; 4.1鍵盤掃描子程序設(shè)計(jì)…………………………………………7</p><p> 4.2移位子程序及結(jié)果計(jì)算子程序設(shè)計(jì)…………………………8</p><p> 4.3顯示子程序設(shè)計(jì)………………………………………………8</p><p> 4.4主程序設(shè)計(jì)……………………………………………………21</p><p> 五、調(diào)試及性能分
5、析……………………………………………………21</p><p> 5.1調(diào)試步驟………………………………………………………21</p><p> 5.2性能分析………………………………………………………21</p><p> 六、心得體會(huì)……………………………………………………………22</p><p> 參考文獻(xiàn) ………………………
6、………………………………………22</p><p> 附錄1、系統(tǒng)硬件電路圖………………………………………………23</p><p> 附錄2、硬件實(shí)物圖……………………………………………………24</p><p> 附錄3、器件清單 …………………………………………………… 25</p><p> 一、設(shè)計(jì)任務(wù)和性能指標(biāo)</p
7、><p><b> 1.1設(shè)計(jì)任務(wù)</b></p><p> 自制一個(gè)單片機(jī)最小系統(tǒng),包括復(fù)位電路,采用外部小鍵盤輸入數(shù)據(jù),能夠?qū)崿F(xiàn)加法、乘法及一個(gè)科學(xué)計(jì)算,計(jì)算結(jié)果顯示在四位一體的數(shù)碼管上。</p><p><b> 1.2性能指標(biāo)</b></p><p> 加法:四位加法,計(jì)算結(jié)果若超過(guò)四位
8、則顯示計(jì)算錯(cuò)誤;</p><p> 減法:四位減法,計(jì)算結(jié)果若小于零則顯示計(jì)算錯(cuò)誤;</p><p><b> 乘法:個(gè)位數(shù)乘法;</b></p><p><b> 除法:整數(shù)除法;</b></p><p><b> 取對(duì)數(shù);</b></p><p&
9、gt;<b> 開平方;</b></p><p><b> 指數(shù)運(yùn)算;</b></p><p><b> 有清零功能</b></p><p><b> 二.設(shè)計(jì)方案</b></p><p> 按照系統(tǒng)設(shè)計(jì)的功能的要求,初步確定設(shè)計(jì)系統(tǒng)由主控模塊、
10、監(jiān)測(cè)模塊、顯示模塊、鍵掃描接口電路共四個(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)用最多。</p><p> 監(jiān)測(cè)模塊采用二極管和揚(yáng)聲器(實(shí)驗(yàn)室用二極管代替)組成電路。</p><p> 鍵盤電路采用4*4矩
11、陣鍵盤電路。</p><p> 顯示模塊采用4枚共陽(yáng)極數(shù)碼管和74ls273鎖存芯片構(gòu)成等器件構(gòu)成。</p><p> 整個(gè)單片機(jī)的接口電路:</p><p><b> P0用于顯示輸出;</b></p><p> P1用于鍵掃描輸入;</p><p> P2用于數(shù)碼管位選控制;<
12、/p><p> P3用于鍵盤擴(kuò)展(部分運(yùn)算符輸入);</p><p><b> 三.系統(tǒng)硬件設(shè)計(jì)</b></p><p> 3.1單片機(jī)最小系統(tǒng)</p><p> 單片機(jī)最小系統(tǒng)就是支持主芯片正常工作的最小電路部分,包括主控芯片、復(fù)位電路和晶振電路。</p><p> 主控芯片選取STC89
13、C52RC芯片,因其具有良好的性能及穩(wěn)定性,價(jià)格便宜應(yīng)用方便。</p><p> 晶振選取11.0592MHz,晶振旁電容選取20pF。</p><p> 采用按鍵復(fù)位電路,電阻分別選取100Ω和10K,電容選取10μF。</p><p> 以下為單片機(jī)最小系統(tǒng)硬件電路圖。</p><p> 單片機(jī)最小系統(tǒng)硬件電路</p>
14、<p><b> 3.2鍵盤接口電路</b></p><p><b> 計(jì)算器所需按鍵有:</b></p><p> 數(shù)字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’</p><p> 功能鍵:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C(
15、清零)’</p><p> 擴(kuò)展鍵:“l(fā)og”,“l(fā)n”,“x^2”“小數(shù)點(diǎn)”,“開方”</p><p> 共計(jì)25個(gè)按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行和四列的8個(gè)公共端分別接P1.0~P1.7,這樣掃描P1口就可以完成對(duì)矩陣鍵盤的掃描,通過(guò)對(duì)16個(gè)按鍵進(jìn)行編碼,從而得到鍵盤的口地址,對(duì)比P1口德掃描結(jié)果和各按鍵的地址,我們就可以得到是哪個(gè)鍵按下,從而完成鍵
16、盤的功能。</p><p> 以下為鍵盤接口電路的硬件電路圖</p><p><b> 鍵盤接口電路</b></p><p><b> 實(shí)物圖:</b></p><p><b> 擴(kuò)展鍵接口電路:</b></p><p> 3.3數(shù)碼管顯示電路
17、</p><p> 采用8位數(shù)碼管對(duì)計(jì)算數(shù)據(jù)和結(jié)果的顯示(實(shí)驗(yàn)時(shí)只用到了4位),這里選取共陰數(shù)碼管,利用74LS244N對(duì)數(shù)碼管進(jìn)行驅(qū)動(dòng),為了節(jié)省I/O資源,采取動(dòng)態(tài)顯示的方法來(lái)顯示計(jì)算數(shù)據(jù)及結(jié)果。</p><p><b> P0口輸出顯示值,</b></p><p> P2.0~P2.7(實(shí)際操作用到P2.0-P2.3)用來(lái)作為位選端,
18、控制哪幾位數(shù)碼管進(jìn)行顯示。</p><p> 以下為數(shù)碼顯示電路的硬件電路圖</p><p><b> 3.4按鍵監(jiān)視電路</b></p><p> 按鍵監(jiān)視電路就是在按鍵時(shí),發(fā)出聲音提醒,以確保輸入數(shù)字有效。這里就采用5V蜂鳴器作為示音設(shè)備(實(shí)際操作用發(fā)光二極管代替)。用p3.7口輸出信號(hào)。</p><p>
19、以下為報(bào)警電路硬件電路圖</p><p><b> 按鍵監(jiān)視電路圖</b></p><p> 系統(tǒng)整體硬件電路圖見(jiàn)附錄一</p><p><b> 四、系統(tǒng)軟件設(shè)計(jì)</b></p><p> 4.1鍵盤掃描子程序設(shè)計(jì)</p><p> 要進(jìn)行數(shù)據(jù)的計(jì)算就必須先進(jìn)行數(shù)
20、據(jù)的輸入,也就必須確定按鍵輸入的數(shù)值是什么,這就需要對(duì)鍵盤進(jìn)行掃描,從而確定究竟是哪個(gè)鍵按下。</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> /*以下三個(gè)_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移位程序及結(jié)果計(jì)算代碼設(shè)計(jì)</p><p> 輸入數(shù)據(jù)要存儲(chǔ)在一四位數(shù)組內(nèi),而我們鍵入的值是數(shù)據(jù)的高位,后鍵入的值是低位,這樣我們就需要在輸入低位數(shù)值
25、時(shí)將高位數(shù)值從數(shù)組的低位移向數(shù)組的高位,這就是編寫移位子程序的目的。</p><p> 對(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ì)算。</p><p> 首先將數(shù)組內(nèi)的數(shù)按照對(duì)應(yīng)的位關(guān)系,將其轉(zhuǎn)化為一個(gè)十進(jìn)制數(shù),這樣我們就得到了加速和被加數(shù)這樣倆個(gè)十進(jìn)制數(shù),從而我們就可以
26、簡(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ì)算方法一樣,這里不再累述。</p><p> 以下為移位子程序和結(jié)果計(jì)算子程序的程序清單。</p><p>
27、; 這部分嵌入到了主函數(shù)中。</p><p><b> 調(diào)用輸入數(shù)據(jù)函數(shù):</b></p><p> 4.3顯示子程序設(shè)計(jì)</p><p> 從始至終無(wú)論是輸入的計(jì)算數(shù)據(jù),還是計(jì)算后的結(jié)果值。都存儲(chǔ)在同一數(shù)組dat[ ]中,這樣我們只要在顯示時(shí)一直調(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> 延時(shí)程序:</b></p><p> void D
31、elay_1ms(uint i)//1ms延時(shí)</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主程序設(shè)計(jì)</b></p><p> 主程序既把以上各子程序串連成一個(gè)整體,使整個(gè)程序循環(huán)運(yùn)行。而在以上程序中也已經(jīng)加入了個(gè)程序之間的連接點(diǎn)
34、,首先進(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)成了程序的整體。</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ù)點(diǎn)</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;//求以十為底對(duì)數(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)用求計(jì)算結(jié)果</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延時(shí)</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> /*以下三個(gè)_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> 在焊接好器件后,先不要將芯片插在芯片座上,要先驗(yàn)證先板上電源是否好用,有無(wú)短路等。接上電源,用萬(wàn)用表測(cè)量個(gè)芯片座對(duì)應(yīng)電源和地之間的電壓值,
134、觀察電壓值是否正常。一切正常后方可將芯片插入芯片座,以繼續(xù)測(cè)試其他功能。</p><p> 將芯片插上后,對(duì)各個(gè)模塊進(jìn)行調(diào)試,按鍵是否工作正常,數(shù)碼管是否顯示正常等。編寫相關(guān)部分的測(cè)試程序?qū)ζ溥M(jìn)行測(cè)試。</p><p> 各部分硬件檢測(cè)無(wú)誤后,下載程序進(jìn)行整體調(diào)試,一切正常后,結(jié)束調(diào)試過(guò)程。</p><p> 在具體調(diào)試時(shí)首先遇到的問(wèn)題是程序無(wú)法下載進(jìn)入單片機(jī)
135、,通過(guò)將電路板接線與原理電路圖接線的對(duì)比發(fā)現(xiàn),串口芯片與單片機(jī)連接的輸入,輸出接反,重新用銅線連接后,依然無(wú)法下載程序。后找到原因是由于下載串口與設(shè)計(jì)封裝不符,用相對(duì)應(yīng)的下載線可以下載。</p><p> 成功下載程序后,發(fā)現(xiàn)數(shù)碼管顯示不正確,查看后發(fā)現(xiàn)有先沒(méi)有連接,可能是制板時(shí)漏印,連接后顯示正常。</p><p><b> 5.2性能分析</b></p&
136、gt;<p> 對(duì)于計(jì)算器的性能,主要的衡量指標(biāo)就在于計(jì)算的精度,本次制作的計(jì)算器性能情況如下:</p><p> 加法運(yùn)算:四位加法運(yùn)算,和值不超過(guò)9999,若超過(guò)上限,則顯示錯(cuò)誤提示ERROR。</p><p> 減法運(yùn)算:四位減法運(yùn)算,若結(jié)果為負(fù),對(duì)其取絕對(duì)值。</p><p> 乘法運(yùn)算:積不超過(guò)9999的乘法運(yùn)算,若超出上限,顯示錯(cuò)誤
137、提示Error。</p><p> 除法運(yùn)算:整數(shù)除法,既計(jì)算結(jié)果為整數(shù),若除數(shù)為零,則顯示錯(cuò)誤提示Error。</p><p> 通過(guò)對(duì)實(shí)際性能的分析,可以得到本次設(shè)計(jì)滿足設(shè)計(jì)的要求。</p><p><b> 六、心得體會(huì)</b></p><p> 通過(guò)本次課程設(shè)計(jì)我真正的自己完成了對(duì)給定要求系統(tǒng)的硬件設(shè)計(jì)、
138、電路設(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)從事工作大有裨益。</p><p> 本次實(shí)驗(yàn)過(guò)程中,我切實(shí)體驗(yàn)到了,認(rèn)真對(duì)待每一個(gè)細(xì)小零件的重要性。對(duì)于實(shí)驗(yàn)室提供的零件要具有檢錯(cuò)能力。我做的是計(jì)算器,實(shí)驗(yàn)中換取了4個(gè)鍵盤,最后才得到正確的結(jié)果顯示。此外從本次試驗(yàn)
139、中我學(xué)會(huì)到了,焊接電路布局的重要性,以及在布線時(shí),對(duì)線路的長(zhǎng)度要有一定的冗余,以提供糾錯(cuò)方便。還有最重要的一點(diǎn)是,要學(xué)會(huì)使用萬(wàn)用表對(duì)電路進(jìn)行檢測(cè),查出問(wèn)題。</p><p> 從本次課設(shè)中我也看到了自身的很多不足之處,對(duì)知識(shí)的掌握不夠扎實(shí),有一知半解的現(xiàn)象。有時(shí)做事不夠穩(wěn)定,過(guò)于毛躁,不能平心靜氣的去分析所遇到的問(wèn)題和錯(cuò)誤。這在以后的工作和生活中是不可取的,通過(guò)對(duì)自身問(wèn)題的認(rèn)識(shí)與改正相信再遇到同樣問(wèn)題時(shí)會(huì)更好的
140、解決。以后的設(shè)計(jì)實(shí)驗(yàn)也會(huì)更好的完成。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 李群芳,黃建. 單片機(jī)微型計(jì)算機(jī)與接口技術(shù). 北京:電子工業(yè)出版社,2001</p><p> [2] 徐維祥、劉旭敏. 單片微型機(jī)原理及應(yīng)用. 大連:大連理工大學(xué)出版社,1996</p><p> [3]
141、 李光飛、樓然苗、胡佳文、謝象佐. 單片機(jī)課程設(shè)計(jì)與實(shí)例指導(dǎo). 北京: 北京航空航天大學(xué)出版社,2004 </p><p> [4] 樓然苗、李光飛. 51系列單片機(jī)設(shè)計(jì)實(shí)例. 北京:北京航空航天大學(xué)出版社,2003</p><p> 附錄1 系統(tǒng)硬件電路圖</p><p> 附錄2 硬件實(shí)物圖</p><p><b>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)報(bào)告-簡(jiǎn)易計(jì)算器
- 簡(jiǎn)易計(jì)算器單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告-- 簡(jiǎn)易計(jì)算器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器
- 課程設(shè)計(jì)---單片機(jī)簡(jiǎn)易計(jì)算器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易數(shù)字計(jì)算器
- 單片機(jī)課程設(shè)計(jì)---簡(jiǎn)易計(jì)算器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--簡(jiǎn)易計(jì)算器的設(shè)計(jì)、制作
- 基于51單片機(jī)簡(jiǎn)易計(jì)算器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---計(jì)算器
- 單片機(jī)計(jì)算器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--計(jì)算器
- 單片機(jī)課程設(shè)計(jì)-計(jì)算器
- 課程設(shè)計(jì)-單片機(jī)計(jì)算器
- 單片機(jī)課程設(shè)計(jì)報(bào)告計(jì)算器2
評(píng)論
0/150
提交評(píng)論