久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9712|回復: 13
收起左側

基于單片機的6路搶答器的設計報告+源碼+仿真

  [復制鏈接]
ID:329016 發表于 2018-12-30 16:15 | 顯示全部樓層 |閱讀模式
實訓題目:基于單片機的搶答器的設計
1 系統設計
1.1 設計要求
1.1.1設計任務  
基于單片機的搶答器的設計
1.1.2性能指標要求
① 需要自己設計電路并焊接電路板。
② 基本要求:有一個主持人控制開關和6路搶答按扭,當主持人允許搶答時才能進行搶答操作,并用一個數碼管顯示搶答選手的號碼,同時其他選手不能再搶答。
③ 當主持人允許搶答后倒計時5秒時間,在這5秒內搶答有效,過后就不能進行搶答了。
④ 電路上要加個蜂鳴器的電路,當有選手搶答時蜂鳴器響一下。
⑤ 當有選手搶答后,進行倒計時20秒作為選手回答問題時間,用兩個數碼管顯示,倒計時時間到時有聲光提示。
⑥ 畫電路板時要增加下載接口,方便調試程序。
⑦ 擴展功能(選做):
用按鍵可設置倒計時的時間,范圍在5秒到30秒之間。
1.2 設計思路及設計框圖
1.2.1設計思路
設計思路如下:
電路通電后,LED閃爍三次,表示電路各功能正常。搶答之前必須由主持人控制,所以在芯片的P1^0腳處接入開始按鍵。搶答時必須有選手搶答電路,因為題目要求6位選手搶答,所以分別在P1^1~P1^6設置了從1~6號選手的搶答按鍵。當主持人按下開始搶答鍵時,6位選手連接的單片機從P1^1~P1^6的任意1位選手都可以進行搶答,搶答時間為5s。主持人按下開始搶答按鍵以后,會進入5s倒計時搶答時間,如若在5s之內,有選手搶答成功,則數碼管顯示搶答選手的號數,搶答成功后燈光提示0.5秒,系統開始自動設定回答問題時間為20s,倒計結束時LED燈亮,并且蜂鳴器響1s,1秒后重新等待主持人控制。
拓展功能利用三個按鍵來實現控制回答問題的時間的增減,有1號和6號選手按鍵同時按下開啟回答時間調整功能,時間加計數的設置控制鍵為P1^1,每當按鍵按下并松開,則倒計時加一。時間減計數的設置控制按鍵為P1^6,每當按鍵按下并松開,則倒計時減一,主持人按鍵P1^0按下來確定回答問題的時間,而且加減計時時間的范圍在5s~30s內,主持人確定時間后會有1s的燈光提示,表示調整完成。P0口接的是一個四位一體共陰數碼管,P2.0~P2.3作為數碼管的位選。三極管8050在電路當中起了開關的作用,當控制三極管開關狀態的管腳P3^3輸出高電平時,蜂鳴器響,反之蜂鳴器停。

1.2.2總體設計框圖


2 各個模塊程序的設計
2.1 單片機


STC89C52RC是以51為內核的8位單片機,芯片總共有40個引腳。
P0~P3:總共占32個引腳,其中P0是低8位地址線/數據線的端口,P1是數據線端口,P2是高8位地址線/數據線端口,P3是數據線/第二功能線端口。P0口內部沒有上拉電阻,所以在P0用作輸出時必須外加上拉電阻。
EA~ /VPP:片外程序ROM有效編程電源,作EA~用時為輸出信號,EA~=0片外程序ROM有效,EA~=1片內ROM有效,作VPP用時為電源輸入。
XTAL1和XTAL2:外部時鐘震蕩輸入端
RST/VPD:復位/備用電源接入。正常工作時作復位信號引入,當VCC失電時,此腳接入備用電源,使片內RAM中的數據處于底功能保護。
2.2 最小系統


這兩部分電路分別為晶振電路和復位電路,這兩塊電路與單片機的電源電路共同組成了單片機的最小系統。
晶振電路由晶振和兩個瓷片電容組成,本實訓采用晶振為12MHZ,瓷片電容的容量為22PF,瓷片電容是沒有正負極之分的。
本次實訓采用的復位電路是手動復位方式,當復位鍵按下,RST由低電平變為高電平,RST引腳獲得2個機器周期的脈沖后,實現手動硬件復位,使單片機重新開始執行程序。
2.3 按鍵模塊電路


按鍵一端接地,一端接單片機I/O口。當按鍵按下時,電平狀態因一端接地被拉低。
2.4 數碼管顯示模塊電路


本次實訓用的是四位共陰數碼管,A,B,C,D,E,F,G,DP控制段選;1,2,3,4控制位選。
2.5 蜂鳴器與LED燈模塊電路

在本次實訓中,蜂鳴器電路材料有8050(NPN)三極管,一個限流電阻,一個蜂鳴器,此時電路中的三極管充當開關作用,當P3^3=1時三極管導通,則蜂鳴器響,反之不響。
LED負極端通過限流電阻接地,正極接入I/O口,當P3^4=1時,LED亮,反之滅。
3  調試過程
焊完板子后用下載線接通電源,觀察電源指示燈是否正常,指示燈閃爍后停止工作,斷電檢查電路,發現有一接地端未聯通,接通后發現電源指示燈不在工作。
軟件燒錄時一直在檢測單片機,在嘗試斷電重連,讀寫反接后燒錄成功。
在驗證功能期間發現“選手回答問題結束”后,蜂鳴器和LED一直處在開啟狀態,需要復位按鍵復位后才能使用;電源指示燈不工作(可能燒壞了),無法判斷電路是否正常;修改代碼將聲光提醒改為1s,1s后自動恢復等待主持人操作;通電后LED閃爍三次,閃爍結束后等待主持人操作。
在硬件不改變的前提增加擴展功能,使用1號和6號選手按鍵同時按下開啟回答時間調整功能,時間加計數的設置控制鍵為P1^1,每當按鍵按下并松開,則倒計時減1。時間減計數的設置控制按鍵為P1^6,每當按鍵按下并松開,則倒計時加1,或者一直按著加(減)按鍵,倒計時會每個0.5s實現自加(減)1,主持人按鍵P1^0按下來確定回答問題的時間,加減計時時間的調整范圍在5s~30s內,主持人確定時間后會有1s的燈光提示,表示調整完成。
4  功能測試
4.1 測試儀器與設備
電腦 :一臺
萬用表 :一臺
燒錄器 :一個
4.2 性能指標測試
1.總共有六路搶答,在主持人允許搶答才可以開始搶答,倒計時5秒。
2.一個搶答后,其他選手不能再搶答,可以設定時間來限制回答問題的時間。
3.當有選手開始搶答時,蜂鳴器響一聲。
4.選手回答時間結束時有聲光顯示
5.可以通過按鍵來設置回答問題時間(5-30秒)。
4.3 誤差分析
有時候按鍵不防抖或無反應
5  實訓心得體會
經過這一周的單片機實訓,結合之前的單片機理論課和實驗課,各個書本與老師的答疑解惑下,我終于完成了本次實訓,在單片機電路連接中只需要把單片機最小系統做出來然后把IO口接各個外圍器件,寫好程序進行操控就可以了,但是也非常考察人的細心和焊功是否牢固。
在這學習的過程中,我通過網上查了許多單片機的資料,讓我明白了51單片機的I/0的作用,由于P0口與P1\P2\P3口不同,因為其內部沒有上拉電阻,如果不加上拉電阻,會呈現高阻狀態,所以當我們需要用P0口給數碼管進行段選時,P0口必須外加上拉電阻,通常為10K的排阻。通過分析網上列出的幾種不同的蜂鳴器控制電路,我懂得了本次實訓蜂鳴器控制電路中的三極管在電路中充當著開關作用,電阻充當著限流作用,保護電路。51單片機I/O口充當控制作用。
在此,我感謝指導我的老師們,通過本次實訓學習到的知識是從理論課本上獲取不到的,這些調試電路的經驗,調試代碼的經驗,51單片機的原理,統統需要實踐的積累。在今后遇到使用單片機所做的項目,我都會通過這次的實訓的經驗來擬定好一個方案,并能夠設計基礎電路,在軟件方面還需多加練習,多寫程序,吸收別人的思維方式,腦海中要構造好流程圖,流程圖做好,每一步需要怎么寫怎么做就一目了然了。

附錄1:仿真圖

附錄2:程序

  1. #include <reg52.h>
  2. /*******定 義 參 數*******/
  3. unsigned char xianshi, kaishi=5, daojishi=20, haoma=0, bitdisplay=0, k=0;
  4. unsigned int i,n=0,  bittime=0;
  5. sbit d1=P1^1;      //選手1
  6. sbit d2=P1^2;      //選手2
  7. sbit d3=P1^3;      //選手3
  8. sbit d4=P1^4;      //選手4
  9. sbit d5=P1^5;      //選手5
  10. sbit d6=P1^6;      //選手6
  11. sbit start=P1^0;   //主持人
  12. sbit LED=P3^4;
  13. sbit fmq=P3^3;     //蜂鳴器
  14. unsigned char Tab[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
  15. /*******延 時 計 數*******/
  16. void delay (unsigned int t) //t=1時,延時1ms
  17. {
  18.               unsigned int a,b;
  19.               for(a=0;a<t;a++)
  20.                             for(b=0;b<120;b++);
  21. }
  22. /*******中斷函數*******/
  23. void timer0(void)interrupt 1  //5ms中斷一次
  24. {
  25.               TH0 = (65536-5000)/256;
  26.               TL0 = (65536-5000)%256;
  27.               switch(bitdisplay)   //動態顯示
  28.               {
  29.               case 0:P2=0xFE;P0=Tab[xianshi/10];break;
  30.               case 1:P2=0xFD;P0=Tab[xianshi%10];
  31. break;
  32.               case 2:P2=0xF7;P0=Tab[haoma];break;
  33.               case 3:P2=0xFB;P0=0x40; break;
  34.               }
  35.               bitdisplay++;                 
  36.               bittime++;                                         
  37.               if(bitdisplay==4)
  38.                             bitdisplay=0;
  39.               if(bittime==200)               //5*200=1000ms
  40.               {
  41.                             bittime=0;
  42.                             xianshi--;
  43.               }
  44.               if(xianshi==0) /*如果倒計時結束則蜂鳴器與LED顯示*/
  45.               {
  46.                             P2=0xff;
  47.                             fmq=1;
  48.                             LED=1;              
  49.                             delay(1000);
  50.                             fmq=0;
  51.                             LED=0;
  52.                             TR0=0;
  53.               }
  54. }
  55. void djtime() //倒計時間修改
  56. {
  57. if(d1==0&&d6==0)
  58.               {
  59.                             n=1;
  60.               }
  61.               while(n)
  62.                             {
  63.                                           for(i=0;i<50;i++)
  64.                                           {
  65.                                           P2=0xFB;P0=Tab[daojishi/10];
  66.                                                         delay(5);
  67.                                P2=0xF7;P0=Tab[daojishi%10];
  68.                                                         delay(5);
  69.                                           }
  70.                                           if(d1==0)
  71.                                           delay(33);
  72.                                           if(d1==0)
  73.                                           daojishi--;
  74.                                           if(d6==0)
  75.                                           delay(33);
  76.                                           if(d6==0)
  77.                                           daojishi++;
  78.                                           if(daojishi>30)
  79.                                           daojishi=30;
  80.                                           if(daojishi<5)
  81.                                           daojishi=5;
  82.                                           if(start==0)
  83.                                           delay(33);
  84.                                           if(start==0)
  85.                                           {
  86.                                           n=0;
  87.                                           LED=1;
  88.                                           for(i=0;i<100;i++)
  89.                                           {
  90.                                           P2=0xFB;P0=Tab[daojishi/10];
  91.                                                         delay(5);
  92. P2=0xF7;P0=Tab[daojishi%10];
  93.                                                         delay(5);
  94.                                           }
  95.                                           P2=0xff;                                                                     
  96.                                           LED=0;
  97.                                           }
  98.                             }
  99. }
  100. /*******主  函  數*******/
  101. void main()
  102. {            
  103.               TMOD=0X01;                           
  104.               TH0 = (65536-5000)/256;
  105.               TL0 = (65536-5000)%256;
  106.               EA=1;                           
  107.               ET0=1;                 //定時器中斷
  108.               TR0=0;              //定時器,等待手動開啟
  109.               fmq=0;
  110.               for(i=0;i<6;i++)
  111.                             {
  112.                                           LED=~LED;
  113.                                           delay(500);
  114.                             }
  115.               LED=0;  
  116.               while(1)
  117.               {  
  118.                             djtime();
  119.                             if(start==0)      
  120.                                           delay(33);
  121.                             if(start==0)
  122.                             {
  123.                                           k=1;
  124.                                           haoma=0;                 
  125.                                           xianshi=kaishi;               
  126.                                           TR0=1;
  127.                             }                                         
  128.                             while(k)
  129.                             {
  130.                                           while(xianshi)
  131.                                           {
  132.                                                         if(d1==0)
  133.                                                                       delay(33);
  134.                                                         if(d1==0)
  135.                                                         {            
  136.                                                                       haoma=1;
  137.                                                                       break;            
  138.                                                         }
  139.                                                         if(d2==0)
  140.                                                                       delay(33);
  141.                                                         if(d2==0)
  142.                                                         {                                                      
  143.                                                                       haoma=2;
  144.                                                                       break;                                         
  145.                                                         }
  146.                                                         if(d3==0)              
  147.                                                                       delay(33);
  148.                                                         if(d3==0)
  149.                                                         {                                                      
  150.                                                                       haoma=3;
  151.                                                                       break;                                         
  152.                                                         }                           
  153.                                                         if(d4==0)                                          
  154.                                                                       delay(33);
  155.                                                         if(d4==0)
  156.                                                         {                                                      
  157.                                                                       haoma=4;
  158.                                                                       break;                                         
  159.                                                         }                                         
  160.                                                         if(d5==0)                                          
  161.                                                                       delay(33);
  162.                                                         if(d5==0)

  163.                                                         {                                                      
  164. ……………………

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

全部資料51hei下載地址:
搶答器.7z (445.8 KB, 下載次數: 230)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:555534 發表于 2019-6-5 12:49 | 顯示全部樓層
后面為啥看不見
回復

使用道具 舉報

ID:551117 發表于 2019-6-6 13:59 | 顯示全部樓層
求一個三路搶答器帶液晶屏的仿真和源代碼
回復

使用道具 舉報

ID:561689 發表于 2019-6-13 14:01 | 顯示全部樓層
厲害~~~~~
回復

使用道具 舉報

ID:570523 發表于 2019-6-24 09:39 | 顯示全部樓層
太厲害了吧
回復

使用道具 舉報

ID:570523 發表于 2019-6-24 09:41 | 顯示全部樓層
厲害厲害 太愛樓樓了
回復

使用道具 舉報

ID:641767 發表于 2019-11-14 10:52 | 顯示全部樓層
后面的沒有了嗎
回復

使用道具 舉報

ID:644142 發表于 2019-11-18 11:30 來自觸屏版 | 顯示全部樓層
也太厲害了吧
回復

使用道具 舉報

ID:110278 發表于 2019-11-19 14:14 | 顯示全部樓層
看不到了。
回復

使用道具 舉報

ID:674921 發表于 2019-12-30 03:02 | 顯示全部樓層
有12個按鍵的嘛
回復

使用道具 舉報

ID:678490 發表于 2019-12-31 22:43 | 顯示全部樓層
寫的很好,也很對,里面通過1和6按鍵修改倒計時,而且還能實現搶答的功能,k用來控制搶答,n用來控制修改時間,多謝樓主幫助。
回復

使用道具 舉報

ID:1099065 發表于 2023-11-23 20:59 來自觸屏版 | 顯示全部樓層
用不了
回復

使用道具 舉報

ID:1098917 發表于 2023-11-28 21:09 | 顯示全部樓層
還不錯的程序,值得借鑒
回復

使用道具 舉報

ID:1132365 發表于 2024-9-22 14:19 | 顯示全部樓層

確定是用不了嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美黄色网 | 男女视频在线观看 | 一区二区在线免费观看 | 日日噜噜噜夜夜爽爽狠狠视频, | 亚洲在线一区 | 欧美爱爱视频网站 | 激情小视频 | 欧产日产国产精品国产 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 九九99靖品 | 亚洲成人免费电影 | 亚洲精品日韩一区二区电影 | av大全在线观看 | 欧美多人在线 | 国产情侣一区 | 99久久精品免费看国产小宝寻花 | 99热这里有精品 | www.久久.com | av大片| 可以看黄的视频 | 二区欧美 | 四虎网站在线观看 | 日韩精品久久久久 | 亚洲欧美日韩系列 | 国产精品美女一区二区 | 草在线 | 亚洲aⅴ | 在线观看亚洲一区二区 | 91免费电影 | 久久国产精品视频 | 国产精品视频久久久 | 成人欧美一区二区三区黑人孕妇 | 在线观看国产视频 | 粉嫩av久久一区二区三区 | 精品久久影院 | 久久久国产一区二区三区 | a在线免费观看视频 | 成人av电影在线观看 | 精品久久久久久久久久久下田 | 国产激情视频 | 亚洲成人精品免费 |