欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告

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

      第一篇:?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)潔,主程序和子程序分開(kāi),使程序有較強(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)潔,主程序和子程序分開(kāi),使程序有較強(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年?!?】李光飛、樓然苗、胡佳文、謝象佐.,《單片機(jī)課程設(shè)計(jì)與實(shí)例指導(dǎo).》,北京航空航天大學(xué)出版社,2004年。

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

      第三篇:基于AT89C51單片機(jī)的電子計(jì)算器的課程設(shè)計(jì)

      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)正以前所未見(jiàn)的速度被單片機(jī)智能控制系統(tǒng)所取代。單片機(jī)具有體積小、功能強(qiáng)、成本低、應(yīng)用面廣等優(yōu)點(diǎn),可以說(shuō),智能控制與自動(dòng)控制的核心就是單片機(jī)。目前,一個(gè)學(xué)習(xí)與應(yīng)用單片機(jī)的高潮正在工廠、學(xué)校及企事業(yè)單位大規(guī)模地興起。過(guò)去習(xí)慣于傳統(tǒng)電子領(lǐng)域的工程師、技術(shù)員正面臨著全新的挑戰(zhàn),如不能在較短時(shí)間內(nèi)學(xué)會(huì)單片機(jī),勢(shì)必會(huì)被時(shí)代所遺棄,只有勇敢地面對(duì)現(xiàn)實(shí),挑戰(zhàn)自我,加強(qiáng)學(xué)習(xí),爭(zhēng)取在較短的時(shí)間內(nèi)將單片機(jī)技術(shù)融會(huì)貫通,才能跟上時(shí)代的步伐。

      它所給人帶來(lái)的方便也是不可否定的,它在一塊芯片內(nèi)集成了計(jì)算機(jī)的各種功能部件,構(gòu)成一種單片式的微型計(jì)算機(jī)。20世紀(jì)80年代以來(lái),國(guó)際上單片機(jī)的發(fā)展迅速,其產(chǎn)品之多令人目不暇接,單片機(jī)應(yīng)用不斷深入,新技術(shù)層出不窮。20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。本設(shè)計(jì)是由單片機(jī)實(shí)現(xiàn)的模擬計(jì)算器,它不僅能實(shí)現(xiàn)數(shù)據(jù)的加減乘除運(yùn)算,而且還能使數(shù)據(jù)及其計(jì)算結(jié)果在數(shù)碼管上顯示出來(lái),能夠?qū)崿F(xiàn)0-256的數(shù)字四則運(yùn)算。本設(shè)計(jì)是用單片機(jī)AT89C51來(lái)控制,采用共陽(yáng)極數(shù)碼顯示,軟件部分是由C語(yǔ)言來(lái)編寫的。設(shè)計(jì)任務(wù)

      二、元器件清單及簡(jiǎn)介

      89c51型芯片 一片

      排阻 兩個(gè)

      晶振12MHZ 一個(gè)

      電容22uf 兩個(gè)

      面包板 三個(gè)

      導(dǎo)線 若干

      三、設(shè)計(jì)原理及分析

      根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用MCS 51 單片機(jī)為主控機(jī)。通過(guò)擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。具體設(shè)計(jì)考慮如下: ①由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行四則運(yùn)算,對(duì)數(shù)字的大小范圍要求不高,故我們采用可以進(jìn)行四位數(shù)字的運(yùn)算,選用8 個(gè)LED 數(shù)碼管顯示數(shù)據(jù)和結(jié)果。

      ②另外鍵盤包括數(shù)字鍵(0~9)、符號(hào)鍵(+、-、×、÷)、清除鍵和等號(hào)鍵,故只需要16 個(gè)按鍵即可。系統(tǒng)模塊圖:

      2.1 輸入模塊:

      鍵盤掃描計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O 口資源,因此在很多情況下都不采用這種方式。為此,我們引入了矩陣鍵盤的應(yīng)用,采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤。在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4×4個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。矩陣鍵盤的工作原理:計(jì)算器的鍵盤布局如圖所示:一般有16 個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P 口實(shí)現(xiàn)16 個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。

      以上鍵盤從上到下依次編號(hào)為1,2,3,4,D,C,B,A 1

      由圖 3 矩陣鍵盤內(nèi)部電路圖可以知道,當(dāng)無(wú)按鍵閉合時(shí),P10~P13 與P14~P17 之間開(kāi)路。當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O 口線之間短路。判斷有無(wú)按鍵按下的方法是:第一步,置列線P14~P17 為輸入狀態(tài),從行線P10~P13 輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P14~P17 讀入數(shù)據(jù),若有某一列為低電平,則對(duì)應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。2.2 運(yùn)算模塊:(單片機(jī)控制)AT89C51 單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O等一臺(tái)計(jì)算機(jī)所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM/EPROM)、并行I/O 口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。[3][5]單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過(guò)不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,通過(guò)使用單片機(jī)編寫的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機(jī)作為計(jì)算器的主要功能部件,可以進(jìn)行很快地實(shí)現(xiàn)運(yùn)算功能。2.3 顯示模塊:

      LED 顯示發(fā)光二極管LED 是單片機(jī)應(yīng)用系統(tǒng)中的一宗簡(jiǎn)單而常用的輸出設(shè)備,其在系統(tǒng)中的主要作用是顯示單片機(jī)的輸出數(shù)據(jù)、狀態(tài)等。因而作為典型的外圍器件,LED 顯示單元是反映系統(tǒng)輸出和操作輸入的有效器件。LED 具備數(shù)字接口可以方便的和大年紀(jì)系統(tǒng)連接;它的優(yōu)點(diǎn)是價(jià)格低,壽命長(zhǎng),對(duì)電壓電流的要求低及容易實(shí)現(xiàn)多路等,因而在單片機(jī)應(yīng)用系統(tǒng)中獲得了廣泛的應(yīng)用。[2][4]通常的數(shù)碼顯示器是由7 段條形的LED 組成(如圖4 所示),點(diǎn)亮適當(dāng)?shù)淖侄?,就可顯示出不同的數(shù)字。我們采用8 段數(shù)碼管,其中位于顯示器右下角的LED 作小數(shù)點(diǎn)用。LED 顯示器有兩種不同的形式:共陰極和共陽(yáng)極。本次設(shè)計(jì)采用共陰極接法(如圖5所示)。

      3、軟件設(shè)計(jì)

      在程序設(shè)計(jì)方法上,模塊化程序設(shè)計(jì)是單片機(jī)應(yīng)用中最常用的程序設(shè)計(jì)方法。設(shè)計(jì)的中心思想是把一個(gè)復(fù)雜應(yīng)用程序按整體功能劃分成若干相對(duì)獨(dú)立的程序模塊,各模塊可以單獨(dú)設(shè)計(jì)、編程和調(diào)試,然后組合起來(lái)。這種方法便于設(shè)計(jì)和調(diào)試,容易實(shí)現(xiàn)多個(gè)程序共存,但各個(gè)模塊之間的連接有一定的難度。根據(jù)需要我們可以采用自上而下的程序設(shè)計(jì)方法,此方法先從主程序開(kāi)始設(shè)計(jì),然后再編制各從屬程序和子程序,層層細(xì)化逐步求精,最終完成一個(gè)復(fù)雜程序的設(shè)計(jì)。這種方法比較符合人們的日常思維,缺點(diǎn)是一級(jí)的程序錯(cuò)誤會(huì)對(duì)整個(gè)程序產(chǎn)生影響。功能流程圖如下:

      4、硬件原理 以下為簡(jiǎn)易計(jì)算器的總體電路圖

      加運(yùn)算:

      減運(yùn)算:

      乘運(yùn)算:

      除運(yùn)算:

      清零: 四.總結(jié)

      通過(guò)此次單片機(jī)實(shí)訓(xùn)設(shè)計(jì),我們學(xué)到了很多東西,在器件的了解和器件選擇上有個(gè)明確的認(rèn)識(shí),并在程序的設(shè)計(jì),及理論在實(shí)踐反面的運(yùn)用能力有巨大的提高。

      這次單片機(jī)課程設(shè)計(jì)由我們六位同學(xué)經(jīng)過(guò)一周努力設(shè)計(jì)得到。軟件的編程要我們不斷的調(diào)試,最終我們終于完成了單片機(jī)實(shí)訓(xùn)課程設(shè)計(jì),很高興它能按著設(shè)計(jì)思想與要求運(yùn)動(dòng)起來(lái)。

      當(dāng)然,這其中也有很多的問(wèn)題。第一、不夠細(xì)心,由于對(duì)課本理論的不熟悉導(dǎo)致的編程錯(cuò)誤,對(duì)于器件的實(shí)際情況的不了解,理論與實(shí)踐的差距導(dǎo)致我們?cè)谠O(shè)計(jì)實(shí)際電路時(shí)出現(xiàn)了很多錯(cuò)誤,使得實(shí)驗(yàn)不能一次通過(guò)。第二、是在學(xué)習(xí)態(tài)度上,這次課程設(shè)計(jì)是對(duì)我們的學(xué)習(xí)態(tài)度的一次體驗(yàn)。對(duì)于這次單片機(jī)綜合課程實(shí)習(xí),我們的第一大心得體會(huì)就是作為一名工程技術(shù)人員,要求具備的首要素質(zhì)絕對(duì)應(yīng)該是嚴(yán)謹(jǐn),這次的課程設(shè)計(jì)我們所遇到的問(wèn)題多半是由于我們不夠嚴(yán)謹(jǐn)。第三、在做人上,我們認(rèn)識(shí)到,無(wú)論做什么事情,只要你足夠堅(jiān)強(qiáng),有足夠的毅力和決心,有足夠的挑戰(zhàn)困難的勇氣,就沒(méi)什么辦不到的。還有就是團(tuán)隊(duì)的合作精神。

      在這次難得的課程設(shè)計(jì)過(guò)程中我們鍛煉了自己的思考能力和動(dòng)手能力,加強(qiáng)了我們思考問(wèn)題的完整性和實(shí)際生活聯(lián)系的可行性。在方案設(shè)計(jì)選擇和芯片的選擇上,培養(yǎng)了我們綜合應(yīng)用單片機(jī)的能力,對(duì)單片機(jī)的各個(gè)管腳的功能也有了進(jìn)一步的認(rèn)識(shí)。還鍛煉我們個(gè)人的查閱技術(shù)資料的能力,動(dòng)手能力,發(fā)現(xiàn)問(wèn)題、解決問(wèn)題的能力。

      五.參考文獻(xiàn)

      《單片機(jī)原理及應(yīng)用》 張毅剛 高等教育出版社

      《MCS—51單片機(jī)應(yīng)用設(shè)計(jì)》 張毅剛 哈爾濱工業(yè)大學(xué)出版社 《MCS—51系列單片機(jī)實(shí)用接口技術(shù)》 李華 北京航空航天大學(xué)出版社 《單片機(jī)應(yīng)用技術(shù)選集》 何立民 北京航空航天大學(xué)出版社 《單片機(jī)原理及其接口技術(shù)》 胡漢才 《數(shù)碼管顯示驅(qū)動(dòng)和鍵盤掃描控制器CH451及其應(yīng)用》

      清華大學(xué)出版社 施隆照 /*********************************************** **實(shí)現(xiàn)說(shuō)明:

      1:變量flag_fuhao為鍵入+、-、*、/運(yùn)算符標(biāo)志

      (即當(dāng)前一個(gè)鍵值為+、-、*、/運(yùn)算符時(shí),flag_fuhao為1,其他鍵值則flag_fuhao置零,其用在顯示時(shí))

      2:變量flag_shu數(shù)輸入情況,flag_shu為0時(shí),輸入的符號(hào)無(wú)效(flag_shu為2時(shí),變量fuhao更新為新鍵值)

      *********************************************/ #include #define uchar unsigned char #define uint unsigned int #define duan P0//數(shù)碼管顯示段選定義 #define wei P2//數(shù)碼管顯示位選定義 #define key P3//鍵盤接口定義

      sbit OFF = P1^0;//關(guān)機(jī)鍵定義

      float shu1,shu2;//進(jìn)行運(yùn)算的兩個(gè)變量數(shù) uchar num;////鍵盤掃描返回值

      char flag1,flag_shu,flag_fuhao,fuhao,newkey,update;

      //flag1開(kāi)機(jī)標(biāo)志newkey新按鍵標(biāo)志,fuhao運(yùn)算符,update表示等于號(hào) //之后緊接著輸入的是數(shù)的話則清零shu1

      char key_shu;//按鍵值 char ge=0xdf;//char code Wela[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//六位數(shù)碼管的位選

      unsigned char code Duan[]={0x3f,0x06,0x5b, //

      0 1 2 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};// 3 4 5 6 7 8 9 無(wú)顯示

      共陰極數(shù)碼管

      // 函數(shù)聲明

      uchar keyscan();//鍵盤掃描函數(shù)

      void display(float);//數(shù)碼管顯示函數(shù)

      void delay(uint i)//延時(shí)函數(shù) {

      while(i--);}

      /***********************************************

      主函數(shù)

      ************************************************/ void main(){

      flag1=0;//標(biāo)志關(guān)機(jī)

      while(1){

      if(keyscan()==15)//開(kāi)機(jī)檢測(cè)

      {

      flag1=1;//標(biāo)志開(kāi)機(jī)

      shu1=shu2=fuhao=flag_shu=newkey=0;//初始化變量

      while(flag1)//判斷是否已開(kāi)機(jī)

      {

      if(!flag_fuhao)

      display(shu1);//如果輸入的不是

      else

      display(shu2);

      key_shu=keyscan();

      if(newkey==1)//有新鍵值

      {

      if(key_shu==15)//按下ON/C鍵,清零

      {

      flag_fuhao=update=0;

      shu1=shu2=fuhao=flag_shu=newkey=0;

      }

      else if(key_shu==14&&flag_shu==1&&fuhao)//按下“=”

      {

      switch(fuhao)

      {

      case 10:shu1=shu2+shu1;break;

      case 11:shu1=shu2-shu1;break;

      case 12:shu1=shu2*shu1;break;

      case 13:shu1=shu2/shu1;break;

      }

      flag_fuhao=0;

      fuhao=0;

      update=1;

      } 10

      else if((key_shu>=0)&&(key_shu<=9))//按下數(shù)字鍵

      {

      if(update)

      shu1=0;

      if(shu1<100000)

      {

      shu1=key_shu+shu1*10;

      flag_shu=1;

      }

      update=0;

      flag_fuhao=0;

      }

      else if((key_shu>=10)&&(key_shu<=13))//按下運(yùn)算符

      {

      flag_fuhao=1;//表示按下了運(yùn)算符號(hào)鍵

      update=0;

      if(flag_shu==1)//表示之前有數(shù)字鍵按下

      {

      if(fuhao==0)//表示計(jì)算時(shí)只有一次按下運(yùn)算符,如1*8=8,第二個(gè)數(shù)字后面是=,而不是其他運(yùn)算符

      {

      shu2=shu1;

      shu1=0;

      fuhao=key_shu;//將按下的運(yùn)算符號(hào)的鍵的值賦值給fuhao,記錄前一個(gè)運(yùn)算符,以便按=后實(shí)現(xiàn)相應(yīng)的計(jì)算。

      flag_shu=2;

      }

      else

      //表示計(jì)算時(shí)按了多次運(yùn)算符,如1*8*9=72,第二個(gè)數(shù)字后面并沒(méi)有=,而是*

      {

      switch(fuhao)

      {

      case 10:shu2=shu2+shu1;break;

      case 11:shu2=shu2-shu1;break;

      case 12:shu2=shu2*shu1;break;

      case 13:shu2=shu2/shu1;break;

      }

      shu1=0;

      fuhao=key_shu;//將按下的運(yùn)算符號(hào)的鍵的值賦值給fuhao,記錄前一個(gè)運(yùn)算符,以便按=后實(shí)現(xiàn)相應(yīng)的計(jì)算。

      }

      }

      else if(flag_shu==2)

      fuhao=key_shu;//將按下的運(yùn)算符號(hào)的鍵的值賦值給fuhao,記錄前一個(gè)運(yùn)算符,以便按=后實(shí)現(xiàn)相應(yīng)的計(jì)算。

      }

      newkey=0;

      }

      }

      } } }

      /***********************************************

      數(shù)碼管顯示函數(shù)

      ************************************************/ void display(float dis_shu){

      long zhengshu=(long)dis_shu;char dis_flag,dis_aa,dis_zero=0;uchar dis_data[6]={0,0,0,0,0,0},xiaoshu[6]={0,0,0,0,0,0};

      ge=0xdf;//11 01 111 if(zhengshu>99999)dis_flag=6;else if(zhengshu>9999)dis_flag=5;else if(zhengshu>999)dis_flag=4;else if(zhengshu>99)dis_flag=3;else if(zhengshu>9)dis_flag=2;else dis_flag=1;

      dis_shu=dis_shu-zhengshu;

      for(dis_aa=0;(dis_aa<6-dis_flag)&&(dis_shu=(dis_shu-(char)dis_shu)*10);dis_aa++){

      xiaoshu[dis_aa]=(long)dis_shu;}

      for(dis_aa=0;(dis_aa<6-dis_flag);dis_aa++){

      if(dis_zero||xiaoshu[5-dis_flag-dis_aa])12

      {

      duan=Duan[xiaoshu[5-dis_flag-dis_aa]];

      wei=ge;

      ge>>=1;

      delay(100);

      wei=0xff;

      dis_zero=1;

      } }

      // for(dis_aa=0;dis_aa

      dis_data[dis_aa]=zhengshu%10;

      zhengshu=zhengshu/10;} //數(shù)碼管段選

      for(dis_aa=0;dis_aa

      if(0xdf!=ge&&dis_aa==0)

      {

      duan=Duan[dis_data[dis_aa]]|0x80;

      wei=ge;

      ge>>=1;

      delay(100);

      wei=0xff;

      }

      else

      {

      duan=Duan[dis_data[dis_aa]];

      wei=ge;

      ge>>=1;

      delay(100);

      wei=0xff;

      }

      } //數(shù)碼管位選 }

      /***********************************************

      鍵盤掃描函數(shù)

      ************************************************/ uchar keyscan()// 函數(shù)返回按鍵的值

      {

      //將第一行線置低電平,其余行線全部為高電平,即掃描第一行

      key=0xfe;

      if(key!=0xfe){

      delay(500);//延時(shí)消抖操作

      if(key!=0xfe)

      {

      switch(key)

      {

      case 0xee:num=7;break;//7

      case 0xde:num=8;break;//8

      case 0xbe:num=9;break;//9

      case 0x7e:num=13;break;//除號(hào) ”/”

      }

      newkey=1;

      delay(500);

      while(key!=0xfe)

      {

      if(flag1)//如果已開(kāi)機(jī)

      if(!shu1&&num>=0&&num<=9)//如果輸入的第一個(gè)數(shù)不為0且第二個(gè)數(shù)為數(shù)字,則顯示第二個(gè)數(shù)字,否則顯示第一個(gè)數(shù)字

      display(num);

      else

      display(shu1);

      }

      return num;

      } }

      //將第二行線置低電平,其余行線全部為高電平,即掃描第二行

      key=0xfd;if(key!=0xfd){

      delay(500);//延時(shí)消抖操作

      if(key!=0xfd)

      {

      switch(key)

      {

      case 0xed:num=4;break;//4

      case 0xdd:num=5;break;//5

      case 0xbd:num=6;break;//6

      case 0x7d:num=12;break;//*

      }

      newkey=1;

      delay(500);

      while(key!=0xfd)

      {

      if(flag1)

      if(!shu1&&num>=0&&num<=9)//如果輸入的第一個(gè)數(shù)不為0且第二個(gè)數(shù)為數(shù)字,則顯示第二個(gè)數(shù)字,否則顯示第一個(gè)數(shù)字

      display(num);

      else

      display(shu1);

      }

      return num;

      } }

      //將第三行線置低電平,其余行線全部為高電平,即掃描第三行

      key=0xfb;if(key!=0xfb){

      delay(500);

      if(key!=0xfb)

      {

      switch(key)

      {

      case 0xeb:num=1;break;//1

      case 0xdb:num=2;break;//2

      case 0xbb:num=3;break;//3 15

      case 0x7b:num=11;break;//-

      }

      newkey=1;

      delay(500);

      while(key!=0xfb)

      {

      if(flag1)

      if(!shu1&&num>=0&&num<=9)//如果輸入的第一個(gè)數(shù)不為0且第二個(gè)數(shù)為數(shù)字,則顯示第二個(gè)數(shù)字,否則顯示第一個(gè)數(shù)字

      display(num);

      else

      display(shu1);

      }

      return num;

      } }

      //將第四行線置低電平,其余行線全部為高電平,即掃描第四行

      key=0xf7;if(key!=0xf7){

      delay(500);

      if(key!=0xf7)

      {

      switch(key)

      {

      case 0xe7:num=15;break;// ON/C:開(kāi)關(guān)機(jī)按鍵

      case 0xd7:num=0;break;// 0

      case 0xb7:num=14;break;// =

      case 0x77:num=10;break;// +

      }

      newkey=1;

      delay(500);

      while(key!=0xf7)

      {

      if(flag1)

      if(!shu1&&num>=0&&num<=9)//如果輸入的第一個(gè)數(shù)不為0且第二個(gè)數(shù)為數(shù)字,則顯示第二個(gè)數(shù)字,否則顯示第一個(gè)數(shù)字

      display(num);

      else

      display(shu1);

      } 16

      return num;

      } }

      //判斷關(guān)機(jī)按鍵是否被按下 if(!OFF){

      delay(500);//延時(shí)消抖操作

      if(!OFF)

      {

      flag1=0;//

      }

      } return 100;

      }

      若關(guān)機(jī)按鍵被按下,則將關(guān)機(jī)標(biāo)志位flag1置1 17

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

      《單片機(jī)課程設(shè)計(jì)》報(bào)告格式

      一、封面(注明:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)報(bào)告、課題名稱、班級(jí)、姓名、指導(dǎo)教師、日期)

      二、摘要(課題簡(jiǎn)要說(shuō)明)

      三、課題設(shè)計(jì)目標(biāo)(功能、性能指標(biāo))、方案論證(要求作兩種以上方案比較)

      四、設(shè)計(jì)過(guò)程(關(guān)鍵電路工作原理、元器件參數(shù)選用、程序流程圖、程序)

      五、軟硬件的安裝、調(diào)試方法

      六、完整電路圖、性能參數(shù)測(cè)試

      七、存在的問(wèn)題和改進(jìn)方向

      八、參考文獻(xiàn)資料

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

      單片機(jī)課程設(shè)計(jì)報(bào)告格式要求

      統(tǒng)一的A4紙打印。每頁(yè)約44行,每行約34字;打印正文用宋體小四號(hào)字;版面頁(yè)邊距上空2.5cm,下空2cm,左空2.5cm,右空2cm;頁(yè)碼用小五號(hào)字,底端居中。

      A、封面;B、課程設(shè)計(jì)任務(wù)書;C、摘要; D、目錄; E、正文;F、參考文獻(xiàn);G、附錄(源程序代碼);H、有關(guān)圖紙(系統(tǒng)的總體原理圖)

      摘要(內(nèi)容提要)

      摘要是論文內(nèi)容的簡(jiǎn)要陳述,應(yīng)盡量反映主要信息,內(nèi)容包括研究目的、方法、成果和結(jié)論,不含圖表,不加注釋,具有獨(dú)立性和完整性,?摘要?字樣位置居中。

      目錄

      目錄按三級(jí)標(biāo)題編寫,要求層次清晰,且要與正文標(biāo)題一致。主要包括緒論、正文主體、結(jié)論、主要參考文獻(xiàn)及附錄等。

      題序?qū)哟未笾掠幸韵聨追N格式:

      1、緒論

      1.1課題背景

      ˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ

      1.2交會(huì)對(duì)接技術(shù)發(fā)展概況

      ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ

      1.2.1俄羅斯空間交會(huì)對(duì)接發(fā)展概況

      ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ

      1.2.2美國(guó)空間交會(huì)對(duì)接發(fā)展概況

      ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ

      2、空間飛行器

      2.1引言

      ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ

      結(jié)論

      ˉˉˉˉˉˉˉ(正文)ˉˉˉˉˉˉˉˉˉ

      主要參考文獻(xiàn)

      為了反映報(bào)告的科學(xué)依據(jù)和作者尊重他人研究成果的嚴(yán)肅態(tài)度,同時(shí)向讀者提供有關(guān)信息的出處,正文之后一般應(yīng)列出主要參考文獻(xiàn)(只限于那些作者親自閱讀過(guò)的,最重要的且發(fā)表在公開(kāi)出版物上的文獻(xiàn)或網(wǎng)上下載的資料)。報(bào)告中被引用的參考文獻(xiàn)序號(hào)置于所引用部分的右上角。參考文獻(xiàn)所列著作按報(bào)告中引用順序排列,著作按如下格式著錄:序號(hào)、著作者、書名、出版地、出版社、出版日期。

      例1(著作):1.宋尚桂.大學(xué)通識(shí)教育的理論和模式.青島:中國(guó)海洋大學(xué)出版社,2007年9月

      例2(文章):2.朱曉剛.以人為本----美國(guó)大學(xué)通識(shí)教育理念和實(shí)踐的解讀.民辦教育研究,2005(5)

      設(shè)計(jì)報(bào)告裝訂順序

      (一)課程設(shè)計(jì)封面

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

      (三)摘要

      (四)目錄

      例:

      1、緒論ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ

      11.1課題背景ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ1

      1.2交會(huì)對(duì)接技術(shù)發(fā)展概況ˉˉˉˉˉˉˉˉˉˉˉˉˉ

      31.2.1俄羅斯空間交會(huì)對(duì)接發(fā)展概況ˉˉˉˉˉˉˉˉˉ

      51.2.2美國(guó)空間交會(huì)對(duì)接發(fā)展概況ˉˉˉˉˉˉˉˉˉˉ72、空間飛行器ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ20

      2.1引言ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ20

      2.2空間飛行器姿態(tài)表示ˉˉˉˉˉˉˉˉˉˉˉˉˉˉ23 結(jié)論ˉˉˉˉˉˉˉˉˉˉˉˉ ˉˉˉˉˉˉˉˉˉˉ50 主要參考文獻(xiàn)ˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉˉ

      51(五)正文

      (六)參考文獻(xiàn)

      (七)附錄

      (八)有關(guān)圖紙

      撰寫設(shè)計(jì)報(bào)告的幾點(diǎn)要求

      1、文字

      設(shè)計(jì)中漢字應(yīng)采用《簡(jiǎn)化漢字總表》規(guī)定的簡(jiǎn)化字,并嚴(yán)格執(zhí)行漢字的規(guī)范,所有文字字面清晰,不得涂改。

      第一層次(章)題序和標(biāo)題居中放置,其余各層次(節(jié)、條、款)題序和標(biāo)題一律沿版面左側(cè)邊線頂格排列。第一層次(章)題序和標(biāo)題距下文雙倍行距。段落開(kāi)始后縮兩個(gè)字。行與行之間,段落和層次標(biāo)題以及各段落之間均為單倍行距。

      第一層次(章)題序和標(biāo)題用小二號(hào)黑體字。題序和標(biāo)題之間空兩個(gè)字,不加標(biāo)點(diǎn),下同。

      第二層次(節(jié))題序和標(biāo)題用小三號(hào)黑體字。

      第三層次(條)題序和標(biāo)題用四號(hào)黑體字。

      第四層次及以下層次題序及標(biāo)題一律用小四號(hào)黑體字。

      結(jié)論(結(jié)束語(yǔ))作為單獨(dú)一章排列,但標(biāo)題前不加?第XXX?字樣。結(jié)論是整個(gè)設(shè)計(jì)的總結(jié),應(yīng)以簡(jiǎn)練的文字說(shuō)明所做的工作。

      2、表格

      設(shè)計(jì)中的表格可以統(tǒng)一編序,也可以逐章單獨(dú)編序,方式應(yīng)與插圖及公式的編序方式統(tǒng)一。表序必須連續(xù),不得重復(fù)或跳躍。表格的結(jié)構(gòu)應(yīng)簡(jiǎn)潔,各欄都應(yīng)標(biāo)注量和相應(yīng)的單位。表格內(nèi)數(shù)字須上下對(duì)齊,相鄰欄內(nèi)的數(shù)值相同時(shí),不能用‘同上’、‘同左’和其它類似用詞,應(yīng)一一重新標(biāo)注。表序和表題置于表格上方中間位置,無(wú)表題的表序置于表格的左上方或右上方(同一篇論文位置應(yīng)一致)。

      3、插圖

      插圖要精選,圖序可以連續(xù)編序,也可以逐章單獨(dú)編序,方式應(yīng)與表格、公式的編序方式統(tǒng)一,圖序必須連續(xù),不得重復(fù)或跳躍。僅有一圖時(shí),在圖題前加‘附圖’字樣。設(shè)計(jì)中的插圖以及圖中文字符號(hào)應(yīng)打印,無(wú)法打印時(shí)一律用鋼筆繪制和標(biāo)出。由若干個(gè)分圖組成的插圖,分圖用a,b,c,……標(biāo)出。圖序和圖題置于圖下方中間位置。

      4、公式

      設(shè)計(jì)中重要的或者后文中須重新提及的公式應(yīng)注序號(hào)并加圓括號(hào),序號(hào)一律用阿拉伯?dāng)?shù)字連續(xù)編序或逐章編序,序號(hào)排在版面右側(cè),且距右邊距相等。公式與序號(hào)之間不加虛線。

      5、數(shù)字用法

      公歷世紀(jì)、年代、年、月、日、時(shí)間和各種計(jì)數(shù)、計(jì)量,均用阿拉伯?dāng)?shù)字。年份不能簡(jiǎn)寫(如1999年不能寫成99年)。數(shù)值的有效數(shù)字應(yīng)全部寫出,如:0.50∶20.0不能寫作0.5∶20。

      6、軟件

      軟件流程圖和原程序清單要按軟件文檔格式附在報(bào)告后面,特殊情況可在答辯時(shí)展示,不附在報(bào)告內(nèi)。

      7、計(jì)量單位的定義和使用方法按國(guó)家計(jì)量標(biāo)準(zhǔn)執(zhí)行。

      下載單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告word格式文檔
      下載單片機(jī)計(jì)算器課程設(shè)計(jì)報(bào)告.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)范文推薦

        單片機(jī)課程設(shè)計(jì)報(bào)告

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

        單片機(jī)課程設(shè)計(jì)報(bào)告

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

        單片機(jī)課程設(shè)計(jì)報(bào)告

        單片機(jī)課程設(shè)計(jì)報(bào)告題目:小直流電機(jī)調(diào)速實(shí)驗(yàn)教學(xué)單位: 機(jī) 電 工 程 系專業(yè): 機(jī)械設(shè)計(jì)制造及其自動(dòng)化班級(jí): 0803班學(xué)號(hào): 0811050342姓名: 程懷虎2011 年 11月(以下內(nèi)容用宋體,五號(hào),單......

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

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

        單片機(jī)課程設(shè)計(jì)報(bào)告

        單片機(jī)課程設(shè)計(jì)報(bào)告? 課程名稱:?jiǎn)纹瑱C(jī)原理及接口課程設(shè)計(jì)? 題目:基于? 學(xué)院:電氣信息學(xué)院? 專業(yè)班級(jí):測(cè)控技術(shù)與儀器? 姓名:江讓? 學(xué)號(hào):? 指導(dǎo)老師:劉升老師 ? 時(shí)間: C51單片機(jī)的ADC0809數(shù)模......

        單片機(jī)課程設(shè)計(jì)報(bào)告

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

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

        1 --計(jì)算器 Java實(shí)習(xí)報(bào)告目錄一、課程設(shè)計(jì)目的 ................................................................................................................. 2......

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