簡(jiǎn)易計(jì)算器單片機(jī)課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論