欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 33528|回復: 2
打印 上一主題 下一主題
收起左側

單片機四路搶答器課程設計報告 含完整源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:161768 發表于 2017-8-15 02:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
課程設計報告
課程名稱電子技術課程設計
學院(部)
專    業      
班    級      
指導教師   
題    目     四路搶答器
組    員   

目錄
設計要求2
方案討論2
系統軟件仿真3
系統硬件實現7
心得體會10
6.仿真代碼11
附錄17


  • 設計要求
四路搶答器
設計要求:搶答器整個系統可分為三個主要模塊:搶答鑒別模塊、計分模塊、答題倒計時模塊。即當搶答開始后,選手搶答按動按鈕,鎖存器鎖存相應的選手編碼,同時用數碼管把選手的編碼顯示出來,對應加分模塊的發光二極管也會發光。當有選手搶答成功后,30秒答題倒計時開始跑秒,若選手在規定的時間內答對題,主持人按下S6給相應的選手加一分并且按下S5,系統清零。

  • 方案論述

方案:對于仿真,我們是將整個系統分為三個主要模塊:搶答鑒別模塊AIM;搶答計時模塊ATM;搶答計分模塊ASM。整個系統的組成框圖如下圖所示。三個模塊,選手搶答,然后倒計時開始,答完主持人加分(答對)。


I.本搶答器最多可提供4名參賽選手使用,編號為1~4號,各隊分別用一個按鈕(S1~S4)控制,并設置一個系統清零和搶答控制開關S5,該開關由主持人控制。

II.搶答器具有數據鎖存功能,并將鎖存數據用發光二極管指示燈顯示出來,同時蜂鳴器發出間歇式聲響,主持人清零后,聲音提示停止。

III.搶答先后的分辨率為1ms。

IV.開關S5作為清零及搶答控制開關(有主持人控制),當開關S5被按下時,搶答電路清零,松開后則允許搶答,輸入搶答信號由搶答按鈕的S1~S4實現。

V.有搶答信號輸入時,有數碼管顯示出相應組別的號碼。此時再按其他任何一個搶答開關均無效,指示燈依舊保持第一個開關按下時所對應的狀態不變。

VI.能完成由主持人控制的30秒倒計時,有搶答信號輸入后計時器開始倒計時。

VII.能完成定時器復位,啟動,暫停/繼續計數。

VIII.能完成對每個選手搶答次數的記錄,并可復位。


  • 系統軟件仿真

仿真電路組成:




(1)完整電路:


(2)搶答電路:


電路組成

該電路由四個D觸發器、與非門及脈沖觸發電路等組成。。其中S1,S2,S3、S4為搶答人按鈕,S5為主持人復位。74LS175為四D觸發器。


電路測試:

①無人搶答時,S1~S2均未被按下,1D~4D均為低電平,Q1~Q2為低電平,7段數碼管顯示數值為0.

②當 主持人宣布“搶答開始”后,答題者立即按下搶答開關,產生輸入信號,電路就可以工作了。例如,S1開關被按下,輸入為D4D2D1=001,輸出Q4Q2Q1=D3D2D1(7段數碼管的輸入,且D4==0)=001,數碼管顯示為1。Q4非Q2非Q1非和時鐘脈沖通過一個與門形成上升沿信號作為74LS175的CLK端的輸入,因為74LS175是下降沿觸發,故除按下復位鍵之外不論什么按鍵都將不會發生電路狀態的變化,即輸入鎖存,實現了搶答功能。

③若要清除,當主持人按下S5復位鍵完成,為下一次搶答做好準備。

(3)搶答計時模塊:


電路組成:由兩片74LS192同步十進制計數器、7段數碼管、時鐘脈沖以及相應邏輯門(3個或非門、與門、非門)構成。

電路測試

①無人搶答時,預置輸入控制端輸入為0,復位輸入端為1,異步預置,十位片DCBA=0011,個位片 DCBA=0000,數碼館管顯示30。

②答題者搶答時,開關接通,個位片工作模式為減計數,在數碼管顯示,當執行到輸出QDQCQBQA=0000時,此時由于個位片的借位輸出端BO與十位片的DOWN相連,十位片減計數一次,相應數碼管數值減1,也即每當個位片的數碼管從9—0時,十位片才做一次減計數。這樣就實現了30秒倒計時。

③當數碼館顯示00時或者答題者回答正確加分后,主持人按下復位鍵S5,74LS192的預置輸入端為0,復位輸入端為1,可實現異步置數,數碼管顯示30,為下一輪的搶答做準備。


(4)計分模塊




電路組成

由四片74LS160、4個反相器、4個LED燈,4個7段數碼管組成。

電路測試:

①無人搶答時,數碼管全部顯示為0,LED熄滅狀態。

②搶答成功后并且在規定時間答對后,主持人按下S6加分鍵,通過74LS138譯碼器實現片選,選中的數碼管工作模式為計數,此時對應的選手的數碼管的值就會顯示加1。

③主持人按下復位鍵S5的時候,因為74LS160的工作模式是保持不變,所以計分的數保持不變。


四、系統硬件實現

系統實現是由51單片機實現的。基于STC51開發板,用keil軟件編寫C語言程序代碼實現其功能。              由于數碼管數量有限,所以用四個LED小燈來分別代表四位選手,前面四個數碼管依次顯示四位選手的分數,最后兩個數碼管顯示30秒倒計時,調試過程下載程序,開發板上電之后,數碼管顯示000030      按下第一行第一個按鍵,第一個LED小燈亮,倒計時開始;按下第四行第一個按鍵,第一個數碼管加1,其他顯示為0按下第四行第二個按鍵,LED熄滅,倒計時恢復為30,加分不變。      每次按下相應的按鍵,對應的小燈會分別亮,且每次只亮一個小燈。


51單片機最小系統

6位共陽極數碼管

程序實現:

第一位選手搶答成功并加分
第二位選手搶答成功并加分
第三位選手搶答成功并加分:

第四位選手搶答成功并加分:
、心得體會這是第一次課設,還是遇到了很多的問題,從分析題目要求到軟件仿真再到硬件實現,花費了很多的精力,但是也收獲了很多。在使用Multism時,    許多元器件的英文不知道,不能很輕松的從元器件庫里選出正確的器件;    一些元器件參數的選擇并不是隨意選定的,需要計算和參考課本或者網上的經驗分享;    也學到了通過二極管單向導通的性質和D觸發器以及7段數碼管可以實現二進制的計數,大大簡化了電路。

6、仿真代碼

51單片機仿真
     因為并沒有單片機基礎,所以是邊自學單片機邊研究分析別人的程序;     關于程序中的中斷,定時,數碼管顯示,以及消除按鍵抖動等都是反復練習和調試才慢慢熟練的。

  • 附錄

部分芯片的管腳圖以及功能


74LS192:


74LS160


單片機源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. sbit D1=P1^0;
  7. sbit D2=P1^1;
  8. sbit D3=P1^2;
  9. sbit D4=P1^3;
  10. sbit beep=P2^3;
  11. uchar code table[]={
  12. 0x3f,0x06,0x5b,0x4f,
  13. 0x66,0x6d,0x7d,0x07,
  14. 0x7f,0x6f,0x77,0x7c,
  15. 0x39,0x5e,0x79,0x71,0};
  16. uchar key,temp,daojishi=0x1e,x1=0,x2=0,x3=0,x4=0;
  17. bit begin,end,clear;
  18. unsigned int pp,qq;
  19. uchar a0=0;b0=0;c0=0;d0=0;e0=0;f0=3;
  20. void delay(uint z)
  21. {
  22.               uint x,y;
  23.               for(x=z;x>0;x--)
  24.                             for(y=110;y>0;y--);
  25. }

  26. void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
  27. {
  28.    dula=1;
  29.    P0=table[a];
  30.    dula=0;
  31.    wela=1;
  32.    P0=0xfe;
  33.    wela=0;
  34.    delay(5);
  35. /////////////   
  36.    dula=1;
  37.    P0=table[b];
  38.    dula=0;
  39.    wela=1;
  40.    P0=0xfd;
  41.    wela=0;
  42.    delay(5);
  43. /////////////////
  44.    dula=1;
  45.    P0=table[c];
  46.    dula=0;
  47.    wela=1;  
  48.    P0=0xfb;
  49.    wela=0;
  50.    delay(5);
  51. /////////////
  52.    dula=1;
  53.    P0=table[d];
  54.    dula=0;
  55.    wela=1;  
  56.    P0=0xf7;
  57.    wela=0;
  58.    delay(5);
  59. // //////////////
  60.    dula=1;
  61.    P0=table[e];
  62.    dula=0;
  63.    wela=1;  
  64.    P0=0xef;
  65.    wela=0;
  66.    delay(5);
  67. /////////////
  68.    dula=1;
  69.    P0=table[f];
  70.    dula=0;
  71.    wela=1;  
  72.    P0=0xdf;
  73.    wela=0;
  74.    delay(5);
  75. }
  76. void keyscan()
  77. {
  78.               //P3^0口按下,矩陣第一行,P3^0            
  79.                             P3=0xfe;
  80.                             temp=P3;
  81.                             temp=temp&0xf0;//如果按下了,那么肯定就和0xf0不相等了
  82.                             while(temp!=0xf0)//有鍵按下了,此時為真,進入循環
  83.                             {
  84.                                           delay(5);//延時后,消除抖動;確認確實是有開關鍵按下了
  85.                                           temp=P3;//重新讓temp讀取P3口
  86.                                           temp=temp&0xf0;
  87.                                           D1=1;D2=1;D3=1;D4=1;
  88.                                           while(temp!=0xf0)
  89.                                           {
  90.                                                         temp=P3;//如果沒有這條語句,此時的temp值是與0xf0與完后的值。而下面case中是為了給對應的數碼管口顯示
  91.                                                         switch(temp)
  92.                                                         {
  93.                                                                       case 0xee:D1=0;key=1;x1++;      //0xee=11101110  看第一行的哪一列被按下去
  94.                                                                                     break;//檢測到是第一個按鍵被按下,就跳出這個while循環
  95.                                                                       case 0xde: D2=0; key=2;x2++; //11011110即第一行第二個按鍵按下之后顯示2;
  96.                                                                                     break;
  97.                                                                       case 0xbe:D3=0;key=3;x3++;
  98.                                                                                     break;
  99.                                                                       case 0x7e: D4=0;key=4; x4++;
  100.                                                                                     break;
  101.                                                         }
  102.                                                         //松手檢測
  103.                                                         while(temp!=0xf0)//檢測是否松手,如果松手兩者相等,while條件為假,不執行。但是若是因為抖動,那么就讓temp重新與0xf0 AND
  104.                                                  {               
  105.                                                                       temp=P3;
  106.                                                                       temp=temp&0xf0;
  107.                                                                       beep=0;
  108.                                                         }
  109.                                                         beep=1;//按鍵按下發出響聲,松開響聲停止
  110.                                           }
  111.                             }
  112.                             P3=0xf7;//第四行
  113.                             temp=P3;
  114.                             temp=temp&0xf0;            
  115.                             while(temp!=0xf0)
  116.                             {
  117.                                           delay(5);//確認確實有鍵按下去了
  118.                                           temp=P3;
  119.                                           temp=temp&0xf0;
  120.                                           while(temp!=0xf0)
  121.                                           {
  122. ……………………

  123. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

全部資料(源碼)51黑下載地址:



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表