基于單片機的多人搶答器課程設計_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科綜合課程設計報告</p><p>  題 目 __________________________________</p><p>  2013 年_1 月 14 日</p><p><b>  報告正文</b></p><p><b>  一、需求概要</b></p

2、><p>  單片機 即單片微型計算機。(Single-Chip Microcomputer ),是 集 CPU ,RAM ,ROM ,定時,計數(shù)和多種接口于一體的微控制器。他體積小,成本低,功能強,廣泛應用于工業(yè)自動化上和智能產(chǎn)品。在信息技術急速發(fā)展的今天,計算機科學日新月異。而單片機作為計算機科學的一個分支,在微機控制領域得到長足的發(fā)展。隨著單片機的發(fā)展與科學技術的提高,單片機已經(jīng)成為人類生產(chǎn)生活中不可缺少的工具

3、。現(xiàn)在,單片機的應用已經(jīng)滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。</p><p>  單片機要解決的問題多數(shù)仍是老問題,新穎之處是比以前用較少的元件。尤其是設計邏輯關系復雜的控制系統(tǒng),過去用通用的邏輯門集成電路芯片將需要幾十片甚至上百片,而現(xiàn)在只用幾片就能夠?qū)崿F(xiàn),而且方便靈活,做設計修改或改動功能時,只需改寫軟件,硬件幾乎不需要改動,這樣就大大減少芯片個數(shù)主要是靠單片機的可編程性和高度集成

4、化。使開發(fā)周期更短,制造成本更低,用電更省和可靠性更高。要求用各種邏輯門芯片實現(xiàn)的邏輯電路,可以用一片單片機芯片加上相應的控制軟件就可以實現(xiàn)。用單片機的另一個優(yōu)點是設計軟件將不斷積累,不斷模塊化,形成標準化軟件,大大提高了開發(fā)效率。</p><p>  如今越來越多的選秀求職節(jié)目涌現(xiàn),搶答器的作用日益凸顯,我們小組于是就想通過制作簡易搶答器來加強對單片機的掌握。</p><p>  【關鍵

5、字】單片機 控制系統(tǒng) 集成化 搶答器</p><p><b>  1.1系統(tǒng)開發(fā)環(huán)境</b></p><p><b>  硬件:單片機開發(fā)板</b></p><p><b>  軟件:Keil 2</b></p><p><b>  1.2系統(tǒng)運行環(huán)境</

6、b></p><p><b>  硬件:單片機</b></p><p>  軟件:Windows</p><p><b>  1.3功能需要</b></p><p>  初始顯示三位選手號碼及得分</p><p>  主持人宣布搶答后,選手按鍵搶答</p>

7、<p>  示意答對并加分,示意答錯并扣分</p><p><b>  進入下一題</b></p><p><b>  1.4系統(tǒng)功能</b></p><p> ?。?)應用MCS-51單片機設計實現(xiàn)搶答器電路</p><p>  (2)使用定時器/計數(shù)器中斷實現(xiàn)計時</p>

8、<p> ?。?)使用LCD液晶顯示屏顯示結(jié)果</p><p> ?。?)使用鍵盤搶答,使用遙控器判定得分吧 </p><p> ?。?)使用蜂鳴器做提示音</p><p><b> ?。?)用C語言編程</b></p><p>  二、系統(tǒng)硬件電路設計</p><p>  系統(tǒng)由S

9、TC89C54RD+、顯示電路、LED電路、按鍵鍵盤電路、蜂鳴器電路、其電路如圖2所示。</p><p><b>  圖2 系統(tǒng)電路總圖</b></p><p>  2.1 顯示電路設計:</p><p>  顯示電路采用液晶 LCD16O2。它是一種字符型液晶模塊,是一種用 5×7 點陣圖形來顯示字符的 16 × 2

10、點陣液晶顯示器。其特點是:亮度高、工作電壓低、功耗小、易于集成、驅(qū)動簡單、壽命長、耐沖擊且性能穩(wěn)定。LCD16O2 與單片機接口采用串行方式控制。LCD1602與單片機的連接如圖3所示。</p><p>  圖3 液晶LCD1602電路</p><p><b>  程序如下:</b></p><p>  /******************

11、**********************</p><p><b>  寫指令程序</b></p><p>  ****************************************/</p><p>  void writecom(unsigned char com)</p><p><b>  

12、{</b></p><p>  while(busy());</p><p><b>  rs_clr;</b></p><p>  rw_clr;//這里為寫指令,rs rw為00組合</p><p>  dataport=com;//指令送給端口</p><p><b>

13、  en_set;</b></p><p>  en_clr;//在下降沿時將指令寫進LCD里</p><p><b>  }</b></p><p>  /************************************</p><p><b>  寫數(shù)據(jù)程序</b></

14、p><p>  *************************************/</p><p>  void writedata(unsigned char data0)</p><p><b>  {</b></p><p>  while(busy());</p><p><b

15、>  rs_set;</b></p><p>  rw_clr;//這里為寫指令,rs rw為00組合</p><p>  dataport=data0;//數(shù)據(jù)送給端口</p><p><b>  en_set;</b></p><p>  en_clr;//在下降沿時將數(shù)據(jù)寫進LCD里</p&

16、gt;<p><b>  }</b></p><p>  /*******************************************</p><p><b>  寫字符串程序</b></p><p>  ********************************************/&

17、lt;/p><p>  void writestring(unsigned char x,unsigned char y,unsigned char *s)</p><p><b>  {</b></p><p>  if(y==0)//如果y為0則第一行顯示</p><p>  { writecom(0x80+x);}//

18、x表示數(shù)據(jù)從該行的第幾個單元開始</p><p>  else//否則第二行顯示</p><p>  { writecom(0xc0+x);}</p><p>  while(*s)//用寫數(shù)據(jù)函數(shù)將字符串各個字符寫入LCD</p><p><b>  {</b></p><p>  writed

19、ata(*s);</p><p><b>  s++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /********************************************</p>

20、<p><b>  寫字符程序</b></p><p>  ******************************************/</p><p>  void writechar(unsigned char x,unsigned char y,unsigned char data1)</p><p><b>

21、;  {</b></p><p>  if(y==0)//如果y為0則第一行顯示</p><p>  { writecom(0x80+x);}//x表示數(shù)據(jù)從該行的第幾個單元開始</p><p>  else//否則第二行顯示</p><p>  { writecom(0xc0+x);}</p><p> 

22、 writedata(data1);</p><p>  2.2 LED電路設計:</p><p>  假如最左邊的晶體管為T1,依次為T2、T3、T4、T5。最左邊的晶體管的集電極二極管為D1,依次為D2、D3、D4、D5。最左邊的晶體管集電極電容為C1,依次為C2、C3、C4、C5。在接通電源的瞬間,五個晶體管總有一個要先導通,假如T1先導通,T1導通后,可以認為集電極和發(fā)射極短路,集

23、電極上的發(fā)光二級管點燃。同時C1的正端接入T2的發(fā)射極,T2的發(fā)射結(jié)因接入反向偏置而截止,D1將不亮。T2的截止使C2進入充電狀態(tài),使T3基極電位上升,從而使T3導通,T3的導通使D3點亮,C3因T3的導通而對T4的發(fā)射極放電,T4晶體管截止,D4不亮。同前面一樣。T5導通D5點燃。這里要注意,T5導通而使T1的基極和發(fā)射極處于反向偏置,T1迅速截止,D1將熄滅。根據(jù)以上的道理,T2將導通,D2點燃。緊接著D4點燃,D5熄滅,D1點燃.

24、.....。五只發(fā)光二級管將輪流循環(huán)點燃。其電路圖如圖4和圖5所示。</p><p>  圖4 LED電路1</p><p>  圖5 LED電路2</p><p>  2.3 紅外遙控電路設計:</p><p>  紅外遙控電路主要使用了紅外接收頭。紅外接收頭的原理為:內(nèi)置接收管將紅外發(fā)射管發(fā)射出來的光信號轉(zhuǎn)換為微弱的電信號,將此信號經(jīng)

25、由IC內(nèi)部放大器進行放大,然后通過自動增益控制、帶通濾波、解調(diào)、波形整形后還原為遙控器發(fā)射出的原始編碼,經(jīng)由接收頭的信號輸出腳輸出到電器上的編碼識別電路。其中紅外一體化接收電路如圖6所示。</p><p>  圖 6 紅外接收頭</p><p><b>  程序如下:</b></p><p>  #include"hongwai.

26、h"</p><p>  idata unsigned char value;</p><p>  bit irok,irpok;//irok為接收完畢標志,irpok為處理完畢標志</p><p>  unsigned char irtime;//定時器定時變量</p><p>  unsigned char idata irda

27、ta[33];//該寄存器為每位碼對應的定時變量值寄存器</p><p>  unsigned char irframe[4];//該數(shù)組為幀寄存器</p><p>  /**************************************</p><p><b>  定時器測碼元寬度</b></p><p> 

28、 **************************************/</p><p>  void timer1(void)</p><p><b>  {</b></p><p>  TMOD|=0x20;</p><p><b>  EA=1;</b></p><

29、p><b>  TH1=0;</b></p><p><b>  TL1=0;</b></p><p><b>  ET1=1;</b></p><p><b>  TR1=1;</b></p><p><b>  }</b>&

30、lt;/p><p>  /*************************************</p><p><b>  定時器執(zhí)行程序</b></p><p>  *************************************/</p><p>  void timer1zx(void)interrup

31、t 3</p><p><b>  {</b></p><p><b>  irtime++;</b></p><p><b>  }</b></p><p>  /************************************</p><p>

32、;  外部中斷0用于檢測位碼是否輸入</p><p>  ************************************/</p><p>  void inter0(void)</p><p><b>  {</b></p><p><b>  PX0=1;</b></p>

33、<p><b>  IT0=1;</b></p><p><b>  EA=1;</b></p><p><b>  EX0=0;</b></p><p><b>  }</b></p><p>  /*********************

34、**************</p><p><b>  中斷服務子程序</b></p><p>  ***********************************/</p><p>  void inter0zx(void) interrupt 0</p><p><b>  {</b>&

35、lt;/p><p>  static unsigned char i;//i為位序列</p><p>  if(irtime<63&&irtime>=33)//當irtime滿足條件后,證明有前導碼輸入,這時是一幀的開始</p><p>  i=0;//這時將對應的位序清零,即將真正地幀數(shù)據(jù)放入寄存器</p><p>

36、  irdata[i]=irtime;//記下前一碼元的時間寬度</p><p>  irtime=0;//將irtime清零,以便記錄下一碼元的時間寬度</p><p>  i++;//數(shù)組序號加1</p><p>  if(i==33)//若數(shù)組計滿后,證明一幀接收完畢</p><p><b>  {</b><

37、/p><p>  i=0;//這時i清零</p><p>  irok=1;//接受標志置1</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*************************************</

38、p><p><b>  對接收數(shù)據(jù)進行處理</b></p><p>  *************************************/</p><p>  void irzx(void)</p><p><b>  {</b></p><p>  unsigned

39、char i,j,k;//i為幀字節(jié)的序號,j為一個字節(jié)的位序號,k為irdata的單元序號</p><p>  unsigned char cord,val;//cord為將irdata里該單元的數(shù)據(jù)放入其中,val為對應8個irdata數(shù)據(jù)的編碼</p><p>  k=1;//先將k置1,以跳過前導碼</p><p>  for(i=0;i<4;i++)

40、</p><p><b>  {</b></p><p>  for(j=0;j<8;j++)</p><p><b>  {</b></p><p>  val>>=1;//先將val右移一位</p><p>  cord=irdata[k];//在將該單

41、元里數(shù)據(jù)放入cord</p><p>  if(cord>7)//并判斷其值對應的編碼,若大于7判為1,否則為0</p><p>  val|=0x80;</p><p><b>  k++;</b></p><p><b>  }</b></p><p>  irfr

42、ame[i]=val;//8位編碼值送到irframe對應的字節(jié)單元里</p><p>  val=0;//再將該值清零,一邊下一字節(jié)使用</p><p><b>  }</b></p><p>  irpok=1;//一幀數(shù)據(jù)識別完后處理標志加1</p><p><b>  }</b></p

43、><p>  /*********************************</p><p>  對于識別值進行相應操作</p><p>  *********************************/</p><p>  unsigned char keyscan(void)</p><p><b&g

44、t;  {</b></p><p>  switch(irframe[2])//</p><p><b>  {</b></p><p>  case 0x45:return 11;break;</p><p>  case 0x46:return 12;break;</p><p>

45、  case 0x47:return 13;break;</p><p>  case 0x07:return '-';break;</p><p>  case 0x15:return '+';break;</p><p>  case 0x16:return 0;break;</p><p>  case

46、0x0c:return 1;break;</p><p>  case 0x18:return 2;break;</p><p>  case 0x5e:return 3;break;</p><p>  case 0x08:return 4;break;</p><p>  case 0x1c:return 5;break;</p&g

47、t;<p>  case 0x5a:return 6;break;</p><p>  case 0x42:return 7;break;</p><p>  case 0x52:return 8;break;</p><p>  case 0x4a:return 9;break;</p><p>  default:retur

48、n 0xff;break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  #include<reg52.h></p><p>  #ifndef __HONGWAI_H__</p><p>  #define

49、__HONGWAI_H__</p><p>  extern unsigned char idata value;</p><p>  extern bit irok,irpok;//irok為接收完畢標志,irpok為處理完畢標志</p><p>  void timer1(void);</p><p>  void inter0(void

50、);</p><p>  void irzx(void);</p><p>  unsigned char keyscan(void);</p><p><b>  #endif</b></p><p>  2.4 蜂鳴器電路設計:</p><p>  三極管主要是做驅(qū)動用的。因為單片機的IO口驅(qū)

51、動能力不夠讓蜂鳴器發(fā)出聲音,所以我們通過三極管放大驅(qū)動電流,從而可以讓蜂鳴器發(fā)出聲音,你要是輸出高電平,三極管導通,集電極電流通過蜂鳴器讓蜂鳴器發(fā)出聲音,當輸出低電平時,三極管截止,沒有電流流過蜂鳴器,所以就不會發(fā)出聲音。電路如圖7</p><p>  圖 7 蜂鳴器電路</p><p>  2.5 獨立按鍵鍵盤電路設計:</p><p>  獨立按鍵的工作原理是

52、把對應的端口復制高電平,即“1”,按鍵按下,端口被拉低至低電平,即“0”,通過檢測該端口的電平即可判斷按鍵是否按下。電路圖如圖 8</p><p>  圖 8 獨立按鍵電路</p><p><b>  三、軟件系統(tǒng)的設計</b></p><p>  本系統(tǒng)主要的控制是由軟件實現(xiàn)的。軟件系統(tǒng)中共有四文件,其中主要有主文件、延時子文件、LCD16

53、02液晶顯示文件和紅外遙控處理文件等。主函數(shù)放置在主文件之中,各文件之間的調(diào)用是通過文件的頭文件來實現(xiàn)的,共同完成系統(tǒng)功能。</p><p><b>  3.1 主文件:</b></p><p>  主文件首先調(diào)用其他文件的頭文件,并且定義搶答按鍵、開始搶答按鍵、提示音、LED顯示燈所對應的輸入輸出端口。在主文件中定義了八個不同的標志位,這些標志位的作用是在主函數(shù)執(zhí)行

54、中標記各個進程的狀態(tài),再根據(jù)這些標志位來判斷下一步的執(zhí)行操作。在主文件中一共有八個函數(shù),其中di0()、di1()、di2()、di3()、di4()用來定義不同頻率和音調(diào)的聲音給蜂鳴器。Timer0()是定時器0的初始化程序主要完成定時模式、定時初值、定時觸發(fā)方式等定義。Timer0zx()是每次中斷就將定時初值減一,其目的是經(jīng)過多次的中斷完成倒計時功能。然后是main()函數(shù)整個系統(tǒng)的整體邏輯是在主函數(shù)中完成的,其邏輯是首先對定時器

55、液晶屏進行初始化,初始化完成之后讓液晶屏顯示其程序流程圖如圖 9 所示。</p><p>  圖 9 液晶屏初始化顯示</p><p>  先判斷遙控器的開始搶答按鍵是否按下,若按則現(xiàn)在可以按開始搶答按鍵,若是沒在該條件下是則蜂鳴器會發(fā)出音調(diào)1提示有選手違規(guī)搶答,若選手正規(guī)搶答則相應的搶答成功選手的分數(shù)閃爍顯示,并且10秒倒計時開始倒計如圖10</p><p>  

56、圖 10 液晶屏顯示</p><p>  當選手在倒計時結(jié)束后還未回答出問題,則答題超時音調(diào)響起,若在倒計時內(nèi)回答出問題后主持人則按下對應的回答正確或錯誤鍵,這時對應顏色的LED燈亮起,不同的音調(diào)響起??蓪υ撨x手進行相應的操作。如果有按鍵按下,然后判斷按鍵是什么按鍵,若是‘+’,‘-’按鍵則將該按鍵存儲起來,并將接下來的輸入數(shù)字和于是分數(shù)進行加或減操作,操作結(jié)果顯示如圖11</p><p>

57、;<b>  圖 11液晶屏顯示</b></p><p>  擋加減操作完之后主持人按下確認鍵這是加減操作后的最終分數(shù)顯示在液晶屏上承接上圖的操作結(jié)果如圖12</p><p><b>  圖 12液晶屏顯示</b></p><p>  3.2 LCD1602液晶顯示文件:</p><p>  此文件

58、中首先定義讀寫指令、讀寫數(shù)據(jù)、使能端所對應的硬件端口。此文件中一共包含七個函數(shù),busy ( )函數(shù)的作用是在讀取指令和數(shù)據(jù)時首先要判斷該器件是否已經(jīng)準備好,以保證操作的有序進行程序如下。writecom(unsigned char com)函數(shù)的作用是想液晶屏芯片寫入指令。void writedata(unsigned char data0)函數(shù)的作用是想液晶芯片寫入數(shù)據(jù)。上兩個函數(shù)式液晶屏初始化的基礎條件,且在操作之前必須判忙。wr

59、itestring(unsigned char x,unsigned char y,unsigned char *s)函數(shù)是在液晶屏上顯示想要顯示的字符串。writechar(unsigned char x,unsigned char y,unsigned char data1)函數(shù)是在液晶屏上顯示字符。上兩個函數(shù)是在調(diào)用writecom(unsigned char com)和void writedata(unsigned char d

60、ata0)的操作下完成的。</p><p>  3.3 紅外遙控處理文件:</p><p>  此文件一共包括六個函數(shù),timer1(void)函數(shù)是定時器1的初始化函數(shù),在該函數(shù)內(nèi)完成定時模式、觸發(fā)方式的選擇等操作。timer1zx(void)interrupt 3 函數(shù)是定時器1的中斷服務子程序,當紅外接收頭有信號時,則該技術起開始計數(shù),當?shù)较乱粋€波形到來時定時截止,計數(shù)的值為該波型的

61、時間寬度。void irzx(void)函數(shù)的作用是記一幀數(shù)據(jù)對應的時間內(nèi)寬度,若寬度數(shù)據(jù)記滿之后置位irpok=1。keyscan(void)函數(shù)是對于識別值進行相應的操作,對應不同的識別值對應不同的返回值。</p><p>  3.7 延時子文件:</p><p>  此文件中包含以下函數(shù):delay0(unsigned char t)和delay1(unsigned char t)。

62、其延時時間作為一個延時單元。</p><p><b>  程序如下:</b></p><p>  #include "delay.h"</p><p>  void delay0(unsigned char t)</p><p><b>  {</b></p>&l

63、t;p>  while(--t);</p><p><b>  }</b></p><p>  void delay1(unsigned char t)</p><p><b>  {</b></p><p>  while(t--)</p><p><b>

64、  {</b></p><p>  delay0(245);</p><p>  delay0(245);</p><p><b>  }</b></p><p><b>  }</b></p><p>  #ifndef __DELAY_H__</p>

65、;<p>  #define __DELAY_H__</p><p>  void delay0(unsigned char t);</p><p>  void delay1(unsigned char t);</p><p><b>  #endif</b></p><p><b>  三、流

66、程圖</b></p><p>  圖13 主程序流程圖</p><p><b>  四、結(jié)束語</b></p><p>  經(jīng)過數(shù)月的單片機課程設計,我們組完成了預期的設計要求。功能上達標:可以搶答,判斷對錯,實現(xiàn)加減分,完全可以滿足日常生活的需要,軟件設計可以配合硬件實現(xiàn)要求功能。</p><p>  單片

67、機作為我們通信專業(yè)主要的課程之一,我覺得單片機課程設計很有必要,而且很有意義。因為我覺得單片機不僅是一門理論課,也是一門實踐課,只有看書是學不好單片機的,單片機要在實踐動手中才能理解的更加通透,因此理論加實踐才是學習單片機的好方法。在這次課程設計中,運用到了很多以前的專業(yè)知識,單片機是大二學的,經(jīng)過這次設計的實踐,讓我溫習和鞏固了單片機理論知識。并且在學習的過程中我發(fā)現(xiàn)帶著問題去學效率很高,這是我做這次課程設計的一大收獲。另外,要做好一

68、個課程設計,就必須做到:在設計程序之前,對所用單片機的內(nèi)部結(jié)構(gòu)有一個系統(tǒng)的了解,知道該單片機內(nèi)有哪些資源;要有一個清晰的思路和一個完整的軟件流程圖;在設計程序時,不能妄想一次就將整個程序設計好,反復修改、不斷改進是程序設計的必經(jīng)之路;要養(yǎng)成注釋程序的好習慣,一個程序的完美與否不僅僅是實現(xiàn)功能,而應該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設計課程過程中遇到問題是很正常的,但我們應該將每次遇到的問題記錄下來,并分析

69、清楚,以免下次再碰到同樣的問題。</p><p>  經(jīng)過這次搶答器作品設計與制作讓我收獲很多:一、增進我和同學之間的友誼情感,在與同學互動學習的過程中使我體會了不同的解決問題的方法與思路,讓我領會了解決問題精髓,使我們學習更有活力更有自信,培養(yǎng)了我們的協(xié)助合作能力;二、培養(yǎng)了我們的動手能力和獨立解決問題的能力,當你碰到問題時,有時由于是分工合作,自己的事要學會獨立解決;三、培養(yǎng)了我們的自主學習能力和利用網(wǎng)上這個

70、廣闊平臺的學習能力。還有就是對word更加熟練的運用,這次在用word寫課程設計報告時,我發(fā)現(xiàn)怎樣讓自己的報告更加美觀,簡潔,這也是需要花精力的,并且這其中還有一些技巧,這次用word時遇見了一些困難,我向一些會熟練使用word的人請教討論,掌握了一些平時自己沒有注意到的功能。</p><p>  在這次設計中,我學會對困難無所畏懼,以及對問題的一些很重要的思考方法。在軟件方面,由于自己的粗心,使一些小錯誤影響設

溫馨提示

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

評論

0/150

提交評論