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

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

QQ登錄

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

搜索
查看: 3955|回復(fù): 2
收起左側(cè)

十四路搶答器單片機(jī)代碼與AD畫(huà)的原理圖

[復(fù)制鏈接]
ID:208953 發(fā)表于 2017-6-7 20:39 | 顯示全部樓層 |閱讀模式
十四路搶答器原理圖 Altium Designer畫(huà)的(51hei附件中可下載工程文件):
0.png 0.png

單片機(jī)搶答器代碼如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit start=P3^0;          //主持人按鍵開(kāi)始
  5. sbit reset=P3^1;        //復(fù)位


  6. //sbit m1=P3^1;   //主持人按鍵答對(duì)加分,按一下加一分
  7. //sbit m2=P3^2;   //答錯(cuò)減分

  8. sbit add1=P3^2;           //搶答時(shí)間調(diào)整,加1
  9. sbit dec1=P3^7;           //搶答時(shí)間調(diào)整,減1
  10. sbit add2=P3^4;                   //答題時(shí)間調(diào)整,加1
  11. sbit dec2=P3^5;                //答題時(shí)間調(diào)整,減1

  12. sbit k1=P1^0;
  13. sbit k2=P1^1;
  14. sbit k3=P1^2;
  15. sbit k4=P1^3;
  16. sbit k5=P1^4;
  17. sbit k6=P1^5;      
  18. sbit k7=P1^6;
  19. sbit k8=P1^7;  //選手按鍵

  20. sbit beep=P3^6;   //蜂鳴器

  21. bit  qd;                        //搶答標(biāo)志位,=1時(shí)開(kāi)啟搶答
  22. bit  dt;                        //答題標(biāo)志位,=1時(shí)開(kāi)啟答題
  23. //時(shí)間計(jì)算
  24. #define Imax 14000    //此處為晶振為11.0592時(shí)的取值,
  25. #define Imin 8000    //如用其它頻率的晶振時(shí),
  26. #define Inum1 1450    //要改變相應(yīng)的取值。
  27. #define Inum2 700
  28. #define Inum3 3000
  29. //解碼變量
  30. unsigned char Im[4]={0x00,0x00,0x00,0x00};

  31. //全局變量
  32. uchar f;
  33. unsigned long m,Tc;
  34. unsigned char IrOK;                                       

  35. //uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};  //0-9代碼        abcdefg dp
  36. unsigned char code tab[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,0xDF,0xD7,0xCE,0xC7,0xDC}; //數(shù)字0-9的編碼   G C DP D E B F A
  37. uchar shiwei,gewei,xuanshou,count,p,second;
  38. uchar qd_time=30,dt_time=60;                                                //搶答時(shí)間,默認(rèn)30S,答題時(shí)間,默認(rèn)60S
  39. uint t,n,a,a1,a2,a3,a4,a5,a6,a7,a8;

  40. void Timer()
  41. {
  42.         TMOD=0x11;
  43.         TH1=0x3C;  //初值50ms
  44.         TL1=0xB0;
  45.         EA=1;           //打開(kāi)中斷總開(kāi)關(guān)
  46.         ET1=1;           //打開(kāi)中斷允許開(kāi)關(guān)
  47.         TR1=0;            //打開(kāi)定時(shí)開(kāi)關(guān)
  48.         IT1=1;//下降沿有效
  49.         EX1=1;//外部中斷1開(kāi)
  50.         TH0=0;//T0賦初值
  51.         TL0=0;
  52.         TR0=0;//t0暫時(shí)不計(jì)時(shí),等到有紅外信號(hào)時(shí)開(kāi)啟計(jì)時(shí)         
  53. }
  54. void delay(uint z)  //延時(shí)函數(shù)
  55. {
  56.         uint x,y;
  57.         for(x=z;x>0;x--)
  58.                 for(y=110;y>0;y--);                        //約1ms
  59. }

  60. void display (void) //顯示函數(shù)
  61. {
  62.         unsigned char shiwei,gewei,xuanshou;//定義數(shù)據(jù)變量,用于顯示時(shí)間和選手號(hào)碼
  63.         shiwei=tab[second/10];                                 //秒取十位數(shù)
  64.         gewei=tab[second%10];                                //取個(gè)位數(shù)
  65.         xuanshou=tab[p];                                        //選手號(hào)

  66.         P0=gewei;                //個(gè)位數(shù)據(jù)顯示
  67.         P2=0x7F;                //打開(kāi)位選
  68.         delay(5);                //延時(shí)一會(huì)
  69.         P2=0xFF;                //關(guān)閉顯示

  70.         P0=shiwei;                //顯示十位
  71.         P2=0xBF;                   //打開(kāi)顯示時(shí)間十位的位選
  72.         delay(5);                //延時(shí)一會(huì)
  73.         P2=0xFF;                //關(guān)閉顯示

  74.         P0=0x80;                //顯示橫線
  75.         P2=0xDF;                  
  76.         delay(5);
  77.         P2=0xFF;
  78.         
  79.         P0=xuanshou;
  80.         P2=0xEF;            //選手位選
  81.         delay(5);
  82.         P2=0xFF;
  83. }


  84. void keyscan(void)         //按鍵函數(shù)
  85. {
  86.         if(add1==0)                 //搶答加按鍵按下
  87.         {
  88.                 display();         //顯示函數(shù)當(dāng)做去抖用,防止按鍵按下時(shí)黑屏
  89.                 if(add1==0)         //再次判斷搶答加按鍵是否按下(其他按鍵功能類似)
  90.                 {
  91.                         p=11;         //P=11,顯示q
  92.                         qd_time++;           //搶答時(shí)間加
  93.                         if(qd_time>=99)        //最大加到99
  94.                                 qd_time=99;
  95.                 }
  96.                 second=qd_time;                 //將搶答時(shí)間賦值給計(jì)時(shí)變量
  97.                 do
  98.                         display();                 //掃描顯示
  99.                 while(add1==0);
  100.         }

  101.         if(dec1==0)                                //搶答時(shí)間減按鍵
  102.         {
  103.                 display();
  104.                 if(dec1==0)
  105.                 {
  106.                         p=11;                         //顯示q
  107.                         qd_time--;                 //時(shí)間減
  108.                         if(qd_time<=1)         //最小減到1
  109.                                 qd_time=1;
  110.                 }
  111.                 second=qd_time;
  112.                 do
  113.                         display();
  114.                 while(dec1==0);
  115.         }
  116.         if(add2==0)
  117.         {
  118.                 display();
  119.                 if(add2==0)
  120.                 {
  121.                         p=12;
  122.                         dt_time++;
  123.                         if(dt_time>=99)
  124.                                 dt_time=99;
  125.                 }
  126.                 second=dt_time;
  127.                 do
  128.                         display();
  129.                 while(add2==0);
  130.         }

  131.         if(dec2==0)
  132.         {
  133.                 display();
  134.                 if(dec2==0)
  135.                 {
  136.                         p=12;
  137.                         dt_time--;
  138.                         if(dt_time<=1)
  139.                                 dt_time=1;
  140.                 }
  141.                 second=dt_time;
  142.                 do
  143.                         display();
  144.                 while(dec2==0);
  145.         }
  146. }

  147. void init()                                                   //初始化函數(shù)
  148. {   
  149.         P2=0x04;
  150.         P0=0x3f;
  151.         t=0;
  152.         beep=1;
  153.         p=10;                                                        //選手號(hào)初始為顯示H,表示等待
  154.         second=qd_time;
  155. }

  156. void main()
  157. {
  158.         uchar i;
  159.     init();                                                        //調(diào)用初始化函數(shù)
  160.         Timer();                                                //定時(shí)器設(shè)置
  161.         while(1)
  162.         {
  163.                 if((qd==0)&&(dt==0))                //在非搶答,非答題狀態(tài)下
  164.                         keyscan();                                //按鍵掃描函數(shù)
  165.                 display();                                        //顯示函數(shù)

  166.                 if(start==0)                                  //主持人按下開(kāi)始鍵
  167.                 {
  168.                         if((qd==0)&&(dt==0))        //在非搶答,非答題狀態(tài)下
  169.                         {
  170.                                 p=10;                                //數(shù)碼管顯示H
  171.                                 second=qd_time;                //搶答時(shí)間賦值計(jì)時(shí)變量
  172.                                 qd=1;                                //進(jìn)入搶答模式
  173.                         }
  174.                         beep=0;                                        //蜂鳴器長(zhǎng)響一聲
  175.                         for(i=0;i<20;i++)                //此處用做延時(shí)
  176.                         {
  177.                                 display();
  178.                         }
  179.                         beep=1;                                        //關(guān)閉蜂鳴器
  180.                         TR1=~TR1;                                //定時(shí)器取反,可以開(kāi)始,可以隨時(shí)暫停

  181.                         do
  182.                                 display();                        //顯示函數(shù)
  183.                         while(!start);                        //等待釋放按鍵        
  184.                 }

  185.                 if(reset==0)                           //復(fù)位鍵按下
  186.                 {
  187.                         display();
  188.                         if(reset==0)
  189.                         {
  190.                                 second=qd_time;           //將搶答時(shí)間賦值給計(jì)時(shí)變量
  191.                                 t=0;                           //清零
  192.                                 p=10;                           //顯示H
  193.                                 TR1=0;                           //停止計(jì)時(shí)
  194.                                 beep=1;                           //蜂鳴器停止
  195.                                 qd=0;                           //搶答清零
  196.                                 dt=0;                           //答題清零
  197.                         }
  198.                         do
  199.                                 display();                   //顯示函數(shù)
  200.                         while(!reset);                   //按鍵釋放
  201.                 }
  202.                 if(qd==1)                                   //如果是搶答模式時(shí)
  203.                 {
  204.                         {
  205.                                  if(k1==0)                    //一號(hào)選手按下按鍵
  206.                                 {
  207.                                         display();           
  208.                                         if(k1==0)           
  209.                                         display();
  210.                                         t=1;                   //選手號(hào)置1
  211.                                         qd=0;                   //關(guān)閉搶答模式
  212.                                         dt=1;                   //準(zhǔn)備打開(kāi)答題模式(其他選手注釋相同)
  213.                                 }

  214.                                 else if(k2==0)
  215.                                 {
  216.                                         display();
  217.                                         if(k2==0)
  218.                                         display();
  219.                                         t=2;
  220.                                         qd=0;
  221.                                         dt=1;
  222.                                 }
  223.                                 else if(k3==0)
  224.                                 {
  225.                                         display();
  226.                                         if(k3==0)
  227.                                         display();
  228.                                         t=3;
  229.                                         qd=0;
  230.                                         dt=1;
  231.                                 }
  232.                                 else if(k4==0)
  233.                                 {
  234.                                         display();
  235.                                         if(k4==0)
  236.                                         display();
  237.                                         t=4;
  238.                                         qd=0;
  239.                                         dt=1;
  240.                                 }
  241.                                 else if(k5==0)
  242.                                 {
  243.                                         display();
  244.                                         if(k5==0)
  245.                                         display();
  246.                                         t=5;
  247.                                         qd=0;
  248.                                         dt=1;
  249.                                 }
  250.                                 else if(k6==0)
  251.                                 {
  252.                                         display();
  253.                                         if(k6==0)
  254.                                         display();
  255.                                         t=6;
  256.                                         qd=0;
  257.                                         dt=1;
  258.                                 }
  259.                                 else if(k7==0)
  260.                                 {
  261.                                         display();
  262.                                         if(k7==0)
  263.                                         display();
  264.                                         t=7;
  265.                                         qd=0;
  266.                                         dt=1;
  267.                                 }
  268.                                 else if(k8==0)
  269.                                 {
  270.                                         display();
  271.                                         if(k8==0)
  272.                                         display();
  273.                                         t=8;
  274.                                         qd=0;
  275.                                         dt=1;
  276.                                 }
  277.                         if(IrOK==1)   //有紅外信號(hào)時(shí)
  278.                         {
  279.                                 //1鍵
  280.                                 if(Im[2]==0x0c)                //是1號(hào)按下
  281.                                 {
  282.                                    display();
  283.                                         t=1;                        //選手號(hào)置1
  284.                                         qd=0;                        //關(guān)閉搶答模式
  285.                                         dt=1;                        //準(zhǔn)備打開(kāi)答題模式(其他選手注釋相同)
  286.                                 }
  287.                                 //2鍵
  288.                                 else if(Im[2]==0x18)
  289.                                 {
  290.                                            display();
  291.                                         t=2;
  292.                                         qd=0;
  293.                                         dt=1;
  294.                                 }
  295.                                 //3鍵
  296.                                 else if(Im[2]==0x5e)
  297.                                 {
  298.                                    display();
  299.                                         t=3;
  300.                                         qd=0;
  301.                                         dt=1;
  302.                                 }
  303.                                 //4鍵
  304.                                 else if(Im[2]==0x08)
  305.                                 {
  306.                                    display();
  307.                                         t=4;
  308.                                         qd=0;
  309.                                         dt=1;
  310.                                 }
  311.                                 //5鍵
  312.                                 else if(Im[2]==0x1c)
  313.                                 {
  314.                                    display();
  315.                                         t=5;
  316.                                         qd=0;
  317.                                         dt=1;
  318.                                 }
  319.                                 //6鍵
  320.                                 else if(Im[2]==0x5a)
  321.                                 {
  322.                                    display();
  323.                                         t=6;
  324.                                         qd=0;
  325.                                         dt=1;
  326.                                 }
  327.                                 //7鍵
  328.                                 else if(Im[2]==0x42)
  329.                                 {
  330.                                    display();
  331.                                         t=7;
  332.                                         qd=0;
  333.                                         dt=1;
  334.                                 }
  335.                                 //8鍵
  336.                                 else if(Im[2]==0x52)
  337.                                 {
  338.                                    display();
  339.                                         t=8;
  340.                                         qd=0;
  341.                                         dt=1;
  342.                                 }
  343.                            IrOK=0;          //紅外檢測(cè)完后將變量清零
  344.                         }
  345.                         }
  346.                         if(t)          //t不為0時(shí)
  347.                         {
  348.                                 switch(t)         //判斷t的數(shù)值
  349.                                 {
  350.                                         case 1:                                                         //數(shù)值為1時(shí)
  351.                                                 {
  352.                                                         TR1=0;                                         //關(guān)閉定時(shí)器
  353.                                                         p=1;                                         //顯示1
  354.                                                         second=dt_time;                         //答題時(shí)間賦值給計(jì)時(shí)變量
  355.                                                         beep=0;                                         //蜂鳴器響
  356.                                                         for(i=0;i<20;i++)                 //延時(shí)
  357.                                                         {
  358.                                                                 display();
  359.                                                         }
  360.                                                         beep=1;                                         //蜂鳴器停止
  361.                                                         qd=0;break;                                 //搶答模式關(guān)閉(其他選手注釋相同)
  362.                                                 }
  363.                                         case 2:
  364.                                                 {
  365.                                                         TR1=0;
  366.                                                         p=2;
  367.                                                         second=dt_time;
  368.                                                         beep=0;
  369.                                                         for(i=0;i<20;i++)
  370.                                                         {
  371.                                                                 display();
  372.                                                         }
  373.                                                         beep=1;
  374.                                                         qd=0;break;
  375.                                                 }
  376.                                         case 3:
  377.                                                 {
  378.                                                         TR1=0;
  379.                                                         p=3;
  380.                                                         second=dt_time;
  381.                                                         beep=0;
  382.                                                         for(i=0;i<20;i++)
  383.                                                         {
  384.                                                                 display();
  385.                                                         }
  386.                                                         beep=1;
  387.                                                         qd=0;break;
  388.                                                 }
  389.                                         case 4:
  390.                                                 {
  391.                                                         TR1=0;
  392.                                                         p=4;
  393.                                                         second=dt_time;
  394.                                                         beep=0;
  395.                                                         for(i=0;i<20;i++)
  396.                                                         {
  397.                                                                 display();
  398.                                                         }
  399.                                                         beep=1;
  400.                                                         qd=0;break;
  401.                                                 }
  402.                                         case 5:
  403.                                                 {
  404.                                                         TR1=0;
  405.                                                         p=5;
  406.                                                         second=dt_time;
  407.                                                         beep=0;
  408.                                                         for(i=0;i<20;i++)
  409.                                                         {
  410.                                                                 display();
  411.                                                         }
  412.                                                         beep=1;
  413.                                                         qd=0;break;
  414.                                                 }
  415.                                         case 6:
  416.                                                 {
  417.                                                         TR1=0;
  418.                                                         p=6;
  419.                                                         second=dt_time;
  420.                                                         beep=0;
  421.                                                         for(i=0;i<20;i++)
  422.                                                         {
  423.                                                                 display();
  424.                                                         }
  425.                                                         beep=1;
  426.                                                         qd=0;break;
  427.                                                 }
  428.                                         case 7:
  429.                                                 {
  430.                                                         TR1=0;
  431.                                                         p=7;
  432.                                                         second=dt_time;
  433.                                                         beep=0;
  434.                                                         for(i=0;i<20;i++)
  435.                                                         {
  436.                                                                 display();
  437.                                                         }
  438.                                                         beep=1;
  439.                                                         qd=0;break;
  440.                                                 }
  441.                                         case 8:
  442.                                                 {
  443.                                                         TR1=0;
  444.                                                         p=8;
  445.                                                         second=dt_time;
  446.                                                         beep=0;
  447.                                                         for(i=0;i<20;i++)
  448.                                                         {
  449.                                                                 display();
  450.                                                         }
  451.                                                         beep=1;
  452.                                                         qd=0;break;
  453.                                                 }
  454.         
  455.                                 }
  456.                         }

  457.                         if(dt==1)                        //答題標(biāo)志開(kāi)啟時(shí)
  458.                         {
  459.                                 if(start==0)        //進(jìn)入答題模式后,主持人按下開(kāi)始按鍵,則開(kāi)始計(jì)時(shí)答題時(shí)間
  460.                                 {
  461.                                         display();
  462.                                         if(start==0)
  463.                                         {
  464.                                                 beep=0;                           //蜂鳴器響
  465.                                                 for(i=0;i<20;i++) //延時(shí)
  466.                                                 {
  467.                                                         display();
  468.                                                 }
  469.                                                 beep=1;                           //關(guān)閉蜂鳴器
  470.                                                 TR1=1;                          //打開(kāi)定時(shí)器
  471.                                         }
  472.                                 }
  473.                         }
  474.                 }
  475.                 if(second==0)                         //計(jì)時(shí)到0時(shí)報(bào)警
  476.                 {
  477.                         beep=0;                                 //打開(kāi)蜂鳴器
  478.                         qd=0;                                 //關(guān)閉搶答模式
  479.                         dt=0;                                 //關(guān)閉答題模式
  480.                 }
  481.         }
  482. ……………………

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

所有資料51hei提供下載:
代碼:
搶答器.zip (52.11 KB, 下載次數(shù): 14)
原理圖:
http://www.zg4o1577.cn/bbs/dpj-87167-1.html


相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2017-6-8 03:09 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:89286 發(fā)表于 2017-6-8 08:32 | 顯示全部樓層
thanks for sharing
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美区在线 | 97超碰成人 | 国产精品日韩欧美一区二区三区 | 国产精品成人69xxx免费视频 | 国产一区视频在线 | 免费视频一区 | 日韩欧美一区二区三区免费观看 | 中文字幕一区二区三区四区五区 | 久久国内 | 久久久久亚洲 | 中文av字幕| 免费九九视频 | 丁香综合| 亚洲国产激情 | www国产亚洲精品久久网站 | 欧美在线视频一区二区 | 中文字幕免费视频 | h视频免费在线观看 | 亚洲欧美中文日韩在线v日本 | 亚洲国产欧美日韩 | 在线一区二区观看 | 午夜影院黄 | 中文字幕 亚洲一区 | 嫩草视频免费 | 欧美日韩中文字幕在线播放 | 欧美一级大片免费观看 | 精品欧美一区二区久久久伦 | 欧美一区二区免费视频 | 亚洲三区在线播放 | 国产一区二区精品在线观看 | 精品国产精品 | 青青草一区二区三区 | 九九综合 | 成人在线免费观看av | 国产日韩欧美在线观看 | 二区视频| 欧美大片一区二区 | 精品久久亚洲 | 视频一区在线观看 | 久久国产精品亚洲 | 日韩精品一区二区三区中文字幕 |