2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計任務(wù)書</b></p><p>  課 程 名 稱 單片機(jī)原理及應(yīng)用A </p><p>  設(shè) 計 課 題 電子琴設(shè)計 </p><p>  院(系、部、中心) 自動化學(xué)院 </p><p>  專 業(yè)

2、 自動化(數(shù)控技術(shù)) </p><p>  班 級 數(shù)控094 </p><p><b>  目 錄</b></p><p><b>  設(shè)計目的及任務(wù)</b></p><p><b>  設(shè)計目的</b></p>&

3、lt;p><b>  設(shè)計任務(wù)題目及要求</b></p><p><b>  總體方案設(shè)計</b></p><p><b>  設(shè)計任務(wù)分析</b></p><p><b>  設(shè)計方案</b></p><p><b>  設(shè)計原理<

4、/b></p><p><b>  程序流程圖</b></p><p><b>  硬件原理圖</b></p><p><b>  模塊設(shè)計</b></p><p><b>  鍵盤掃描模塊</b></p><p><b

5、>  定時器模塊</b></p><p><b>  調(diào)試過程</b></p><p><b>  問題發(fā)現(xiàn)與解決</b></p><p><b>  設(shè)計總結(jié)</b></p><p><b>  七、參考文獻(xiàn)</b></p>

6、<p><b>  八.程序清單</b></p><p><b>  一、設(shè)計目的及任務(wù)</b></p><p>  1.課程設(shè)計應(yīng)達(dá)到的目的</p><p> ?。?)運用<<單片機(jī)原理及應(yīng)用A>>課程等知識,根據(jù)題目要求進(jìn)行軟硬件系統(tǒng)的設(shè)計和調(diào)試,從而加深對本課程知識點的理解,使學(xué)

7、生綜合應(yīng)用知識能力、設(shè)計能力、調(diào)試能力及報告撰寫能力等顯著提高。</p><p>  (2)了解計算機(jī)發(fā)聲原理, 進(jìn)一步熟悉定時器編程方法及鍵盤掃描電路工作原理及編程方法。</p><p>  2.課程設(shè)計題目及要求</p><p><b> ?。?)、題目</b></p><p><b>  電子琴設(shè)計<

8、;/b></p><p><b>  (2)、設(shè)計要求:</b></p><p>  利用實驗儀上提供的鍵盤,使數(shù)字鍵1、2、3、4、5、6、7、8、9作為電子琴按鍵,其中1~7號鍵按下后即發(fā)出相應(yīng)的音調(diào)。8號鍵按下后依次發(fā)出“1、2、3、4、5、6、7” 音調(diào),9號鍵按下后依次發(fā)出“7、6、5、4、3、2、1” 音調(diào),用8255的PA.0 口發(fā)出音頻脈沖,驅(qū)動

9、喇叭。</p><p>  利用定時器,可以發(fā)出不同頻率的脈沖,不同頻率的脈沖經(jīng)喇叭驅(qū)動電路放大濾波后,就會發(fā)出不同的音調(diào).定時器按設(shè)置的定時參數(shù)產(chǎn)生中斷,這一次中斷發(fā)出脈沖低電平,下一次反轉(zhuǎn)發(fā)出脈沖高電平.由于定時參數(shù)不同,就發(fā)出了不同頻率的脈沖. 本實驗中按鍵一次,會發(fā)50個脈沖.發(fā)完后繼續(xù)檢測鍵盤,如果鍵還按下,繼續(xù)發(fā)音。</p><p><b>  二、總體方案設(shè)計<

10、;/b></p><p><b>  1、設(shè)計任務(wù)分析</b></p><p>  本任務(wù)的要求是根據(jù)不同的數(shù)字鍵被按下后,發(fā)出相對應(yīng)的音調(diào),或者順序、逆序連續(xù)的發(fā)出七中音調(diào),不同音調(diào)的產(chǎn)生對喇叭發(fā)出不同頻率的脈沖,而脈沖則是根據(jù)定時器中斷產(chǎn)生正負(fù)脈沖的跳變,這樣就形成了脈沖。與此同時,定時時間的長短,及頻率的高低,是由定時間的初值決定的。</p>

11、<p>  通過以上的析,可以明確,本課題需要涉及到的就是鍵盤掃描,和定時器。圍繞這兩個模塊,就可以制定出總體的設(shè)計方案。</p><p><b>  2、設(shè)計方案</b></p><p>  通過以上的分析,可以制定出以下的設(shè)計方案:</p><p>  (1)、 因為要用到9個按鍵,可以用4*4的矩陣鍵盤,,對其中的9個按鍵進(jìn)行

12、標(biāo)號,再根據(jù)鍵盤掃描的原理,就可以找出是哪個鍵被按下。</p><p> ?。?)、不同頻率的脈沖均通過定時器來產(chǎn)生,定時器的初值不同,計滿溢出的頻率</p><p>  也是不同的,從而正負(fù)電平的跳變的頻率也不同,就產(chǎn)生了不停頻率的脈沖,所以只需對定時器設(shè)置不同德計數(shù)初值,便可實現(xiàn)不同頻率脈沖的產(chǎn)生。</p><p> ?。?)、喇叭發(fā)聲原理則是:對喇叭驅(qū)動電路交

13、替的施加施加低電平,喇叭發(fā)聲;否則就不發(fā)聲。把這一原理和定時器中斷產(chǎn)生的電平跳變相結(jié)合,就可以聽到不同頻率的音調(diào)。</p><p><b>  三、設(shè)計原理</b></p><p><b>  1、程序流程圖</b></p><p>  根據(jù)上述的設(shè)計方案,可以用流程圖畫出本次課程設(shè)計的整體思路,在以下的流程圖中,包括主程

14、序和各個相關(guān)的子程序。</p><p>  在程序中,首先是進(jìn)行掃描,找出是哪個鍵被按下,然后根據(jù)相應(yīng)的鍵號,采取不同的操作,以此構(gòu)成循環(huán)</p><p>  本程序中涉及到的子程序模塊包括:鍵盤掃描子程序;定時器中斷子程序;順序連續(xù)發(fā)出1234567七個音調(diào);連續(xù)發(fā)出7654321七個音調(diào)。</p><p>  以下分別主程序各個相關(guān)的子程序:</p>

15、<p><b>  2、硬件原理圖</b></p><p>  以下是電子琴電路的實際硬件原理圖,主要是一個單片機(jī),和一個8255以及一個喇叭組成。是通過8255的PA.0口發(fā)出脈沖,來產(chǎn)生不同頻率的音調(diào)。單片機(jī)則是用到一個定時器,來產(chǎn)生定時中斷。</p><p>  值得注意的是,由于電路圖中是直接用P1口來進(jìn)行鍵盤掃描的,則在實驗箱上進(jìn)行實物連接時,

16、一定要把跳線器短接,否則將使鍵盤掃描不能正常工作。</p><p>  在連線時,不能使用已損壞的導(dǎo)線,并且把多余的導(dǎo)線放到一邊,一面影響正常的工作。</p><p><b>  四.模塊設(shè)計</b></p><p><b>  1.鍵盤掃描模塊</b></p><p>  通過鍵盤掃描的流程圖可以

17、清晰的知道其工作原理,可將其歸納為:</p><p>  先將P1的高四位置1,低四位置0,在讀P1口的值,若讀到的值得高四位不是全1,則代表有鍵按下或者是鍵盤抖動。</p><p>  為消除鍵盤抖動的影響,先采用延時,延時后重復(fù)上述操作,若讀到的值得高四位不是全1,則代表確實有鍵按下。</p><p>  在有鍵按下的情況下,則可以找出是哪個鍵被按下,方法是:在

18、值為0的那一行,繼續(xù)賦零,其余行和所有列均給1,在此情況下,讀出列的值,在列中,哪一列為0,則代表該列的鍵被按下。</p><p>  用上述的方法就可以找出被按下的鍵,然后將對應(yīng)的鍵號取出,就可以在主程序中使用。</p><p><b>  2、定時器模塊</b></p><p>  定時器模塊則是簡單的運用定時器的中斷,對于定時器而言,其初

19、值不同,計數(shù)的溢出率就不同,又因為,每次定時器產(chǎn)生的中斷將電平信號取反,就可以產(chǎn)生不同頻率的脈沖,有了脈沖就可以驅(qū)動喇叭產(chǎn)生不同頻率的音調(diào)。</p><p>  以上就是該任務(wù)的兩個模塊,這都是簡單的運用單片機(jī)鍵盤掃描知識和定時器的運用,其原理都是很基本的。</p><p><b>  五、調(diào)試過程</b></p><p><b> 

20、 1、問題發(fā)現(xiàn)與解決</b></p><p>  在進(jìn)行調(diào)試是,還是發(fā)現(xiàn)了一些問題。但最終都得到解決。問題之一就是,在等待50脈沖時,由于while語句位置的使用不當(dāng),導(dǎo)致程序不能正常運行。其次,就是1234567七個音調(diào)的不準(zhǔn)確,需要正確計算出定時器初值,而后在進(jìn)行調(diào)試,就可以聽到效果較好的其中音調(diào)。</p><p><b>  設(shè)計總結(jié)</b><

21、/p><p>  在此次課程設(shè)計中,我通過實踐操作,更好的正握了書本知識,尤其是鍵盤掃描模塊,其次就是定時的使用,當(dāng)然,對喇叭的發(fā)生原理也能掌握。</p><p>  另外,我還學(xué)到了如何正確,有效的調(diào)試程序。這說明,只有掌握正確的方法,才能提高效率。</p><p>  最重要的是,我的動手實踐能力,得到了較大的提高。所以,此次的課程使勁兒還是受益頗多的。 <

22、/p><p><b>  參考文獻(xiàn)</b></p><p>  《單片機(jī)原理及應(yīng)用實驗指導(dǎo)書》,屈波等編,2007年</p><p>  《單片機(jī)原理及應(yīng)用》,趙德安等編,機(jī)械工業(yè)出版社,2011</p><p>  《單片機(jī)基礎(chǔ)》,李廣弟等,北京航空航天大學(xué)出版社,2004年</p><p><

23、;b>  程序清單</b></p><p>  以下是電子琴設(shè)計的程序:</p><p>  #include<reg52.h> //頭文件的說明</p><p>  #include<absacc.h> //用于8255的使用</p><p>  #define uint unsi

24、gned int</p><p>  #define uchar unsigned char</p><p>  #define COM8255 XBYTE [0X8003] //8255的控制字地址</p><p>  #define PA XBYTE [0X8000] //8255端口A的地址</p><p&g

25、t;  uchar flag; //在鍵盤掃描時使用</p><p>  uchar key; //用于存放按鍵的對應(yīng)標(biāo)號</p><p>  uchar num; //用于對50次脈沖的電平跳變進(jìn)行計數(shù),跳變100次后就達(dá)到50次脈沖</p><p>  uint code table[]={ 64100,64224,64333,

26、64484,64577,64660,64734}; </p><p>  //以上數(shù)組中的數(shù)分別是發(fā)出1234567七個音調(diào)的定時器的初值</p><p><b>  //子程序的說明</b></p><p>  void keyscan(); //鍵盤掃描</p><p>  void delay(

27、); //簡單的延時程序,用于鍵盤掃描時的消抖</p><p>  void shun(); //順序播放1234567</p><p>  void ni(); //逆序播放7654321</p><p>  //簡單的延時子程序,用于鍵盤掃描時消抖</p><p>  void delay()<

28、/p><p><b>  {</b></p><p><b>  uchar a;</b></p><p><b>  a=250;</b></p><p>  while(a--);</p><p><b>  }</b></p

29、><p><b>  //鍵盤掃描</b></p><p>  /*鍵盤掃描的原理是:用P1口的高四位分別連接4*4鍵盤的行,P1口的低四位分別連接列,在進(jìn)行鍵盤掃描時先判斷是否有鍵按下,若消抖后仍有鍵按下,則找出是哪個鍵被按下*/</p><p>  void keyscan()</p><p><b>  {

30、</b></p><p>  flag=0; //變量賦初值</p><p><b>  do{</b></p><p>  P1=0xf0; //檢查是否有鍵按下</p><p><b>  flag=P1;</b></p><p> 

31、 flag=flag&0xf0;</p><p>  if(flag!=0xf0) //等待有鍵按下,若有鍵按下則向下執(zhí)行</p><p><b>  {</b></p><p>  delay(); //延時消抖</p><p>  P1=0xf0; //重新檢測是否有鍵按下</

32、p><p><b>  flag=P1;</b></p><p>  flag=flag&0xf0;</p><p><b>  }</b></p><p>  } while(flag==0xf0); //確認(rèn)有鍵按下后,找出是1至9個鍵中哪個鍵按下</p><

33、;p>  if(flag==0xb0) //檢查第三行</p><p><b>  {</b></p><p>  P1=0xbf; /*給第三行賦零值,檢查該行哪個鍵被按下,哪一列電平被拉低,則該列的鍵被按下*/</p><p><b>  flag=P1;</b></p>

34、<p>  flag=flag&0x0f;</p><p>  switch(flag)</p><p><b>  {</b></p><p>  case 0x07:key=9;break; /*第三行中除了9號鍵外,其余鍵按下不采取操作*/</p><p>  case 0x0b:k

35、ey=0;break;</p><p>  case 0x0d:key=0;break;</p><p>  case 0x0e:key=0;break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(flag==0

36、xd0) //檢查第二行</p><p><b>  {</b></p><p>  P1=0xdf; /*給第二行賦零值,檢查該行哪個鍵被按下,哪一列電平被拉低,則該列的鍵被按下*/</p><p><b>  flag=P1;</b></p><p>  flag=fl

37、ag&0x0f;</p><p>  switch(flag)</p><p><b>  {</b></p><p>  case 0x0e:key=8;break; //根據(jù)對應(yīng)的鍵,對key賦值</p><p>  case 0x0d:key=7;break;</p><

38、;p>  case 0x0b:key=6;break;</p><p>  case 0x07:key=5;break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(flag==0xe0) //檢查第一行</p&g

39、t;<p><b>  {</b></p><p>  P1=0xef; /*給第一行賦零值,檢查該行哪個鍵被按下,哪一列電平被拉低,則該列的鍵被按下*/</p><p><b>  flag=P1;</b></p><p>  flag=flag&0x0f;</p><p

40、>  switch(flag)</p><p><b>  {</b></p><p>  case 0x0e:key=4;break; //根據(jù)對應(yīng)的鍵,對key賦值</p><p>  case 0x0d:key=3;break;</p><p>  case 0x0b:key=2;break;

41、</p><p>  case 0x07:key=1;break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //順序播放1234567七個音調(diào)</p

42、><p>  void shun() //順序播放</p><p><b>  {</b></p><p>  uchar i; //用于取數(shù)組中的對應(yīng)的數(shù)</p><p>  for(i=0;i<7;i++)</p><p><b>  {</b>

43、;</p><p>  TH0=table[i]/256; //定時器賦初值</p><p>  TL0=table[i]%256;</p><p>  TR0=1; // 開始計時</p><p>  while(num<100); //等待發(fā)出50個脈沖</p><p>

44、<b>  }</b></p><p>  TR0=0; //若已到50次脈沖,則關(guān)定時器</p><p>  PA=0x01; //喇叭停止發(fā)聲</p><p>  num=0; //num清零,準(zhǔn)備下次計數(shù)</p><p><b>  }</b></

45、p><p>  //逆序播放7654321七個音調(diào)</p><p>  void ni() //逆序播放</p><p><b>  {</b></p><p>  uchar i; //用于取數(shù)組中的對應(yīng)的數(shù)</p><p>  for(i=0;i<7;i++)<

46、/p><p><b>  {</b></p><p>  i=6-i; //逆序取數(shù)組中的數(shù)</p><p>  TH0=table[i]/256; //定時器賦初值</p><p>  TL0=table[i]%256;</p><p>  TR0=1; // 開

47、始計時</p><p>  while(num<100); //等待發(fā)出50個脈沖</p><p><b>  }</b></p><p>  TR0=0; //若已到50次脈沖,則關(guān)定時器</p><p>  PA=0x01; //喇叭停止發(fā)聲</p><p>

48、;  num=0; //num清零,準(zhǔn)備下次計數(shù)</p><p><b>  }</b></p><p>  //利用定時器的中斷來產(chǎn)生脈沖</p><p>  void time() interrupt 1 //定時中斷</p><p><b>  {</

49、b></p><p>  TH0=table[key]/256; //每次定時產(chǎn)生中斷,重新賦初值,可以產(chǎn)生連續(xù)的脈沖</p><p>  TL0=table[key]%256;</p><p>  PA=~PA;//對喇叭端口電平取反,形成脈沖</p><p>  num++; //對正

50、負(fù)電平數(shù)計數(shù),其值時脈沖數(shù)的兩倍</p><p><b>  }</b></p><p><b>  //主程序</b></p><p>  //主程序中根據(jù)鍵盤掃描得到是哪個鍵按下,來給定時器賦相應(yīng)的初值,產(chǎn)生不同頻率的脈沖</p><p>  void main()</p><

51、;p><b>  {</b></p><p>  key=0; //key值清零,用于鍵盤掃描</p><p>  num=0; //清零,用于脈沖計數(shù)</p><p>  PA=1; //初始化,使喇叭不發(fā)聲</p><p>  TMOD=0x01; //用T0工作于方式

52、1,用于定時</p><p>  EA=1; //開總中斷</p><p>  ET0=1; //開T0中斷</p><p>  COM8255 = 0X80; //8255初始化,僅使用PA口,用于輸出方式</p><p><b>  while(1)</b></p>&

53、lt;p><b>  {</b></p><p><b>  do{</b></p><p>  keyscan(); /*進(jìn)行鍵盤掃描,若有鍵按下,則KEY的值會改變,跳出循環(huán)*/</p><p>  }while(key==0); //等待鍵按下</p><p><b>

54、;  if(key<8)</b></p><p><b>  {</b></p><p>  key--; //key值減1后就可在數(shù)組中取到對應(yīng)的取值</p><p>  TH0=table[key]/256; //定時器賦初值</p><p>  TL0=table[key]%256;

55、</p><p>  TR0=1;//開定時器</p><p>  while(num<100); //等待產(chǎn)生50個脈沖</p><p>  TR0=0; //50次脈沖后關(guān)定時器</p><p>  PA=0x01; //停止喇叭發(fā)聲</p><p>  num=0; //n

56、um清零,為下次計數(shù)做好準(zhǔn)備</p><p><b>  }</b></p><p>  if(key==8)</p><p><b>  {</b></p><p>  shun(); //8鍵按下,進(jìn)行順序播放</p><p><b>  }</

57、b></p><p>  if(key==9)</p><p><b>  {</b></p><p>  ni(); //9鍵按下,進(jìn)行逆序播放</p><p><b>  }</b></p><p>  key=0; //key重新賦零,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論