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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8240|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

四路競(jìng)賽搶答器論文+Proteus仿真+單片機(jī)程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我做了兩個(gè)星期的畢業(yè)設(shè)計(jì),四路競(jìng)賽搶答器,
附件里面包含了仿真圖可直接下載打開(kāi)
還有程序哦,請(qǐng)各位大神進(jìn)行指教吧

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):


搶答器的設(shè)計(jì)論文:


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. char s;
  5. uchar num=0;
  6. char time=20;        //搶答時(shí)間
  7. char datitime=30;        //答題限時(shí)時(shí)間
  8. uint tt,t1;        //T0,T1定時(shí)器定一秒時(shí)
  9. bit flag,s_flag=1,b_flag,fall_flag;        //標(biāo)志位
  10. bit K_startcountflag,K_timecountflag;        //時(shí)間調(diào)整標(biāo)志位
  11. sbit K0=P3^0;
  12. sbit beep=P3^7;         //蜂鳴器輸出口
  13. sbit rled=P3^1;                //指示燈輸出口
  14. sbit K1=P1^0;               
  15. sbit K2=P1^1;
  16. sbit K3=P1^2;
  17. sbit K4=P1^3;
  18. sbit K_Time=P3^2;        //答題計(jì)時(shí)鍵
  19. sbit K_startcount=P3^3;        //開(kāi)始搶答時(shí)間調(diào)整鍵
  20. sbit K_timecount=P3^4;        //答題計(jì)時(shí)時(shí)間調(diào)整鍵
  21. void delay(uchar ms)
  22. {
  23.         uchar y;
  24.         for(;ms>0;ms--)
  25.                 for(y=120;y>0;y--);
  26. }
  27. uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,
  28. 0x66,0x6d,0x7d,0x07,
  29. 0x7f,0x6f,0x77,0x7c,
  30. 0x39,0x5e,0x79,0x71
  31. };
  32. uchar code tablewe[]={0XFE,0XFD,0XFB,0XF7};
  33. void T0_Init(void)
  34. {
  35.         TMOD=0X01;
  36.         TH0=(65536-2000)/256;
  37.         TL0=(65536-2000)%256;
  38.         TH1=(65536-2000)/256;
  39.         TL1=(65536-2000)%256;
  40.         ET0=1;
  41.         ET1=1;
  42.         EA=1;
  43.         P0=0;
  44. }
  45. void Key_Scan(void)                //開(kāi)始鍵掃描
  46. {
  47.         if(K0==0)
  48.         {
  49.                 delay(10);
  50.                 if(K0==0)
  51.                 {
  52.                         while(!K0);
  53.                         TR0=1;
  54.                         s=time;
  55.                         tt=0;
  56.                         flag=1;
  57.                         s_flag=1;
  58.                         b_flag=1;
  59.                         num=0;
  60.                         beep=1;
  61.                         rled=1;
  62.                         fall_flag=0;        //清除違規(guī)標(biāo)志位
  63.                         K_startcountflag=0;
  64.                         K_timecountflag=0;
  65.                 }
  66.         }
  67. }
  68. void Scan(void)                //四路熱鍵掃描(哪個(gè)鍵先按下,哪個(gè)優(yōu)先級(jí)最高)
  69. {
  70.         if(K1==0)
  71.         {
  72.                 delay(10);
  73.                 if(K1==0)
  74.                 {
  75.                         while(!K1);
  76.                         num=1;                //數(shù)碼管顯示1號(hào)"1"
  77.                         TR0=0;                //關(guān)閉定時(shí)器0,時(shí)間停止
  78.                         TR1=1;                //打開(kāi)定時(shí)器1,使揚(yáng)聲器響一聲
  79.                         s_flag=0;        //關(guān)閉開(kāi)始鍵標(biāo)志位,使再按其他三個(gè)鍵不會(huì)響應(yīng)
  80.                 }
  81.         }
  82.         if(K2==0)                        //下面三個(gè)鍵的處理同上
  83.         {
  84.                 delay(10);
  85.                 if(K2==0)
  86.                 {
  87.                         while(!K2);
  88.                         num=2;               
  89.                         TR0=0;
  90.                         TR1=1;
  91.                         s_flag=0;        //重要
  92.                 }
  93.         }
  94.         if(K3==0)
  95.         {
  96.                 delay(10);
  97.                 if(K3==0)
  98.                 {
  99.                         while(!K3);
  100.                         num=3;
  101.                         TR0=0;
  102.                         TR1=1;
  103.                         s_flag=0;
  104.                 }
  105.         }
  106.         if(K4==0)
  107.         {
  108.                 delay(10);
  109.                 if(K4==0)
  110.                 {
  111.                         while(!K4);
  112.                         num=4;
  113.                         TR0=0;
  114.                         TR1=1;
  115.                         s_flag=0;
  116.                 }
  117.         }
  118. }
  119. void display(void)
  120. {
  121.         if(flag==1)                //開(kāi)始鍵按下,開(kāi)始計(jì)時(shí)搶答
  122.         {
  123.                 if(num!=0)        //如果有人搶答,則顯示相應(yīng)的幾號(hào)
  124.                 {
  125.                         P0=tabledu[num];        //顯示幾號(hào)搶到了
  126.                         P2=tablewe[0];
  127.                         delay(2);
  128.                         P0=0;
  129.                         P2=0XFF;
  130.                 }
  131.                 else                //否則沒(méi)人搶答,則前面不顯示幾號(hào)
  132.                 {
  133.                         P0=0;               
  134.                         P2=0XFF;
  135.                 }
  136.                 P0=tabledu[s/10];                //下面為顯示搶答倒計(jì)時(shí)
  137.                 P2=tablewe[2];
  138.                 delay(2);
  139.                 P0=0;
  140.                 P2=0XFF;
  141.                 P0=tabledu[s%10];
  142.                 P2=tablewe[3];
  143.                 delay(2);
  144.                 P2=0XFF;
  145.                 P0=0;
  146.         }
  147.         else        //如果開(kāi)始鍵沒(méi)有按下,則顯示F FF(若有違規(guī)者,則顯示違規(guī)號(hào)碼及 FF)或時(shí)間調(diào)整
  148.         {
  149.                 if(fall_flag==1)        //違規(guī)顯示
  150.                 {
  151.                         if(num!=0)
  152.                         {
  153.                                 P0=tabledu[num];        //顯示幾號(hào)違規(guī)了
  154.                                 P2=tablewe[0];
  155.                                 delay(2);
  156.                                 P0=0;
  157.                                 P2=0XFF;
  158.                                 P0=tabledu[15];                //下面顯示 FF,表示違規(guī)了
  159.                                 P2=tablewe[2];
  160.                                 delay(2);
  161.                                 P0=0;                //消隱
  162.                                 P2=0XFF;
  163.                                 P0=tabledu[15];
  164.                                 P2=tablewe[3];
  165.                                 delay(2);
  166.                                 P0=0;
  167.                                 P2=0XFF;
  168.                         }
  169.                         else               
  170.                         {
  171.                                 P0=0;               
  172.                                 P2=0XFF;
  173.                         }
  174.                 }
  175.                 else        //沒(méi)有人違規(guī)才顯示調(diào)整時(shí)間
  176.                 {
  177.                         if(K_startcountflag==1)
  178.                         {
  179.                                 P0=0X6D;                //第一位數(shù)碼管顯示"5(S)"(表示搶答時(shí)間調(diào)整)
  180.                                 P2=tablewe[0];
  181.                                 delay(2);
  182.                                 P0=0;
  183.                                 P2=0XFF;
  184.                                 P0=tabledu[time/10];        //下面顯示調(diào)整的搶答時(shí)間
  185.                                 P2=tablewe[2];
  186.                                 delay(2);
  187.                                 P0=0;
  188.                                 P2=0XFF;
  189.                                 P0=tabledu[time%10];
  190.                                 P2=tablewe[3];
  191.                                 delay(2);
  192.                                 P0=0;
  193.                                 P2=0XFF;
  194.                         }
  195.                         else if(K_timecountflag==1)
  196.                         {
  197.                                 P0=0X07;        //第一位與第二位數(shù)碼管合起來(lái)顯示"T",表示答題時(shí)間調(diào)整
  198.                                 P2=tablewe[0];
  199.                                 delay(2);
  200.                                 P0=0;
  201.                                 P2=0XFF;
  202.                                 P0=0X31;
  203.                                 P2=tablewe[1];
  204.                                 delay(2);
  205.                                 P0=0;
  206.                                 P2=0XFF;
  207.                                 P0=tabledu[datitime/10];
  208.                                 P2=tablewe[2];
  209.                                 delay(2);
  210.                                 P0=0;
  211.                                 P2=0XFF;
  212.                                 P0=tabledu[datitime%10];
  213.                                 P2=tablewe[3];
  214.                                 delay(2);
  215.                                 P0=0;
  216.                                 P2=0XFF;
  217.                         }
  218.                         else                //否則顯示F FF
  219.                         {
  220.                                 P0=tabledu[15];
  221.                                 P2=tablewe[0];
  222.                                 delay(2);
  223.                                 P0=0;
  224.                                 P0=tabledu[15];
  225.                                 P2=tablewe[2];
  226.                                 delay(2);
  227.                                 P0=0;                //消隱
  228.                                 P2=0XFF;
  229.                                 P0=tabledu[15];
  230.                                 P2=tablewe[3];
  231.                                 delay(2);
  232.                                 P0=0;
  233.                                 P2=0XFF;
  234.                         }        
  235.                 }        
  236.         }
  237. }
  238. void Time_Scan(void)                //調(diào)整時(shí)間鍵掃描
  239. {
  240.         if(K_startcount==0)                //搶答時(shí)間調(diào)整
  241.         {
  242.                 delay(10);
  243.                 if(K_startcount==0)        
  244.                 {
  245.                         while(!K_startcount);
  246.                         time++;                        
  247.                         if(time==50)
  248.                         {
  249.                                 time=20;
  250.                         }
  251.                         K_startcountflag=1;        //將搶答時(shí)間標(biāo)志位置1
  252.                         K_timecountflag=0;        //同時(shí)關(guān)閉答題時(shí)間標(biāo)志位
  253.                 }
  254.         }
  255.         if(K_timecount==0)                //答題時(shí)間調(diào)整
  256.         {
  257.                 delay(10);
  258.                 if(K_timecount==0)
  259.                 {
  260.                         while(!K_timecount);
  261.                         datitime++;
  262.                         if(datitime==60)
  263.                         {
  264.                                 datitime=30;
  265.                         }
  266.                         K_timecountflag=1;
  267.                         K_startcountflag=0;
  268.                 }
  269.         }
  270. }
  271. void main(void)
  272. {
  273.         T0_Init();
  274.         while(1)
  275.         {
  276.                 Key_Scan();                //開(kāi)始鍵掃描
  277.                 if((flag==0)&(s_flag==1))        //當(dāng)開(kāi)始鍵沒(méi)按下及沒(méi)有人違規(guī)時(shí)才可進(jìn)行時(shí)間調(diào)整
  278.                 {
  279.                         Time_Scan();
  280.                 }
  281.                 if((flag==1)&(s_flag==0))//當(dāng)開(kāi)始鍵按下及有人搶答才進(jìn)行開(kāi)始回答計(jì)時(shí)倒計(jì)時(shí)
  282.                 {
  283.                         if(K_Time==0)
  284.                         {
  285.                                 delay(10);
  286.                                 if(K_Time==0)
  287.                                 {
  288.                                         while(!K_Time);
  289.                                         s=datitime;
  290.                                         TR0=1;
  291.                                         tt=0;
  292.                                         TR1=1;
  293.                                 }
  294.                         }
  295.                 }        
  296.                 if((flag==0)&(s_flag==1))        //違規(guī)
  297.                 {
  298.                         Scan();
  299.                         if(num!=0)                //開(kāi)始鍵沒(méi)有按下時(shí),有人按下了搶答器,則置違規(guī)標(biāo)志位
  300.                         {
  301.                                 fall_flag=1;
  302.                                 rled=0;
  303.                         }
  304.                 }
  305.                 if((flag==1)&(s_flag==1))        //如果開(kāi)始鍵按下且搶答鍵沒(méi)有人按下,則進(jìn)行八路搶答鍵掃描
  306.                 {
  307.                         Scan();
  308.                 }        
  309.                 display();                //顯示到數(shù)碼管上
  310.         }
  311. }
  312. void timer0(void) interrupt 1
  313. {
  314.         TH0=(65536-2000)/256;        //2ms
  315.         TL0=(65536-2000)%256;
  316.         if(b_flag)        //開(kāi)始(START)鍵按下,嘟一聲(長(zhǎng)1秒),表示開(kāi)始搶答
  317.         {
  318.                 beep=~beep;
  319.         }
  320.         else
  321.         beep=1;
  322.         if(s<5)        //搶答時(shí)間快到報(bào)警,隔1秒響一聲且紅燈閃爍,響三聲
  323.         {
  324.                 if(s%2==0)
  325.                 {
  326.                         b_flag=1;
  327. ……………………

  328. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
四路競(jìng)賽搶答器編程程序.zip (168.37 KB, 下載次數(shù): 295)



評(píng)分

參與人數(shù) 1黑幣 +1 收起 理由
libicheng + 1 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:207455 發(fā)表于 2017-6-3 19:00 來(lái)自手機(jī) | 只看該作者
棒,真好!!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:89286 發(fā)表于 2017-6-4 04:56 | 只看該作者
thanks for sharing
回復(fù)

使用道具 舉報(bào)

地板
ID:207897 發(fā)表于 2017-6-7 15:53 來(lái)自手機(jī) | 只看該作者
很好…感謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:198404 發(fā)表于 2017-12-3 18:31 | 只看該作者
非常感謝 分享
回復(fù)

使用道具 舉報(bào)

6#
ID:420224 發(fā)表于 2018-11-5 09:21 | 只看該作者
要花多少幣才能下載完???
回復(fù)

使用道具 舉報(bào)

7#
ID:868377 發(fā)表于 2020-12-28 14:30 | 只看該作者
10,12,13,14這幾個(gè)引腳得開(kāi)關(guān)是干嘛得?
回復(fù)

使用道具 舉報(bào)

8#
ID:865245 發(fā)表于 2021-5-11 20:09 | 只看該作者
求大佬指教一下怎么把時(shí)間改成計(jì)分?jǐn)?shù)
回復(fù)

使用道具 舉報(bào)

9#
ID:1025285 發(fā)表于 2022-5-10 09:47 | 只看該作者
怎么把里面的串口改成at89c52的型號(hào)啊 有大佬知道嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:1121150 發(fā)表于 2024-5-17 12:57 | 只看該作者
膜拜大佬!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区免费在线观看 | 日本色综合 | 久久久www成人免费精品张筱雨 | 久久99精品久久久久久国产越南 | 毛片久久久 | 国产一区二区在线免费观看 | 欧美不卡在线 | a视频在线观看 | 日韩精品成人免费观看视频 | 国产精品18hdxxxⅹ在线 | 成人精品啪啪欧美成 | 日韩视频在线一区二区 | 国产在线一区二区三区 | 亚洲精品一二三区 | 亚洲国产二区 | 久久久精品网站 | 在线观看亚洲 | 国产一区二区精品自拍 | 中文字幕视频在线观看 | 久久精品av | 视频在线一区 | 91视频在线 | 欧美一区二区视频 | 欧美一级欧美三级在线观看 | 国产欧美精品一区二区 | 欧美日韩视频在线播放 | www.免费看片.com | 2一3sex性hd | 国产 欧美 日韩 一区 | 欧美性久久 | 91精品国产综合久久国产大片 | 国产在线视频在线观看 | 中文字幕日韩三级 | 亚洲高清av在线 | 欧美精品导航 | 天天操网 | 夜夜骑首页 | 国产精品高潮呻吟久久av黑人 | 中文字幕在线免费 | 免费一级淫片aaa片毛片a级 | 自拍偷拍第一页 |