找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7241|回复: 10
打印 上一主题 下一主题
收起左侧

单片机16路抢答器仿真与源码等设计资料

  [复制链接]
跳转到指定楼层
楼主
抢答器具有数据锁存和显示功能.当某一路抢答成功时.发光二极管立即点亮.并在该电路上显示该路的号数.直到主持人按复位开关为止.此时其他人抢答无效。
抢答器具有定时抢答功能.且抢答时间可以由主持人设定(如97s).当主持人按下“开始”按钮后.要求定时器立即倒计时.并在显示器上显示时间.同时发出“滴”的声响。
在设定的时间内抢答.则抢答有效.定时器停止工作.显示器上显示选手的编号和抢答时刻的时间.并保持到主持人将系统清零
如果定时器的时间已到.却没有选手抢答.则本次抢答无效.系统会短暂的报警.并且封锁输入电路禁止选手超时抢答.时间显示器上显示00.

16路抢答器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


压缩包里面有完整论文:




单片机源码:
  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
  3. #define uchar unsigned char;  //定义数据类型 程序中遇到unsigned char 则用uchar替换
  4. #define uint unsigned int;          //定义数据类型 程序中遇到unsigned int 则用uint替换
  5. sbit add=P2^0;        
  6. sbit jian=P2^1;        
  7. sbit beep=P2^2;                //定义报警输入端口
  8. sbit start=P2^3;               
  9. sbit WEI=P2^7;      //定义锁存使能端口 位锁存
  10. sbit DUAN=P2^6;     //定义锁存使能端口 段锁存
  11. sbit key1=P1^0;
  12. sbit key2=P1^1;
  13. sbit key3=P1^2;
  14. sbit key4=P1^3;
  15. sbit key5=P1^4;
  16. sbit key6=P1^5;
  17. sbit key7=P1^6;
  18. sbit key8=P1^7;
  19. sbit key9=P3^0;
  20. sbit key10=P3^1;
  21. sbit key11=P3^2;
  22. sbit key12=P3^3;
  23. sbit key13=P3^4;
  24. sbit key14=P3^5;
  25. sbit key15=P3^6;
  26. sbit key16=P3^7;
  27. uchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
  28. uchar code dofly_WeiMa[10]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
  29. uchar code table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  30. uchar TempData[8]; //存储显示值的全局变量
  31. //函数声明
  32. void DelayUs2x(unsigned char t);
  33. void DelayMs(unsigned char t);
  34. void Delay(unsigned char t);
  35. void Display(unsigned char FirstBit,unsigned char Num);
  36. void check1();
  37. void check2();
  38. void keyscan();
  39. uchar n,m,num,t,time;
  40. bit flag;
  41. /*---------------------------------------------------
  42.                     主函数
  43. ---------------------------------------------------*/
  44. void main (void)
  45. {   

  46.         EA=1;
  47.         TMOD=0x11;
  48.         TH0=(65536-50000)/256;//这是50ms的
  49.         TL0=(65536-50000)%256;
  50.         ET0=1;
  51.         TR0=0;
  52.         TH1=(65536-50000)/256;//这是50ms的
  53.         TL1=(65536-50000)%256;
  54.         ET1=1;
  55.         TR1=1;
  56.         time=97;
  57.         num=0;
  58.         flag=0;   
  59.         while (1)         //主循环
  60.           {
  61.                 TempData[2]=dofly_DuanMa[time/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  62.                 TempData[3]=dofly_DuanMa[time%10];
  63.                 if(num!=0)
  64.                         m=1;
  65.                 if(start==0)
  66.                 {
  67.                         DelayMs(10);
  68.                         if(start==0)
  69.                         {        
  70.                                 flag=1;
  71.                         while(!start);
  72.                         }
  73.                 }
  74.                 if(add==0)
  75.                 {
  76.                         DelayMs(10);
  77.                         if(add==0)
  78.                         {        
  79.                                 time++;
  80.                         while(!add);
  81.                         }
  82.                 }
  83.                 if(jian==0)
  84.                 {
  85.                         DelayMs(10);
  86.                         if(jian==0)
  87.                         {        
  88.                                 time--;
  89.                         while(!jian);
  90.                         }
  91.                 }
  92.                 if(time>=99)
  93.                         time=99;
  94.                 if(flag==0)
  95.                 {
  96.                         if(num!=0)
  97.                                 m=1;
  98.                         keyscan();
  99.                         check2();
  100.                 }
  101.                 if(flag==1)
  102.                 {        
  103.                         TR0=1;
  104.                         if(num!=0)
  105.                                 m=1;        

  106.                         keyscan();
  107.                         check1();
  108.                 }
  109.                 //主循环中添加其他需要一直工作的程序        
  110.          }
  111. }
  112. void timer_t0() interrupt 1
  113. {
  114.     TH0=(65536-50000)/256;//这是50ms的
  115.          TL0=(65536-50000)%256;
  116.         t++;
  117.         beep=0;
  118.         if(t==20)//设置为20,就是1s为高1s为低
  119.         {
  120.                 beep=1;
  121.             t=0;
  122.                 time--;
  123.                 TempData[2]=dofly_DuanMa[time/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  124.                 TempData[3]=dofly_DuanMa[time%10];
  125.                 if(time<=0)
  126.                 {
  127.                         time=0;                        
  128.                 }                        
  129.         }
  130. }
  131. void timer_t1() interrupt 3
  132. {
  133.     TH1=(65536-50000)/256;//这是50ms的
  134.          TL1=(65536-50000)%256;
  135.         Display(0,8); //数码管显示函数
  136. }
  137. void check1()
  138. {
  139.         if(num==1)
  140.         {
  141.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  142.                 TempData[1]=dofly_DuanMa[num%10];
  143.                 TempData[4]=table[0];
  144.                 beep=1;
  145.                 Display(0,8); //数码管显示函数
  146.                 TR0=0;        
  147.                 while(m);
  148.         }                  
  149.         if(num==2)
  150.         {
  151.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  152.                 TempData[1]=dofly_DuanMa[num%10];
  153.                 TempData[4]=table[1];
  154.                 beep=1;
  155.                 Display(0,8); //数码管显示函数
  156.                 TR0=0;        
  157.                 while(m);
  158.         }
  159.         if(num==3)
  160.         {
  161.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  162.                 TempData[1]=dofly_DuanMa[num%10];
  163.                 TempData[4]=table[2];
  164.                 beep=1;
  165.                 Display(0,8); //数码管显示函数        
  166.                 TR0=0;        
  167.                 while(m);
  168.         }                  
  169.         if(num==4)
  170.         {
  171.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  172.                 TempData[1]=dofly_DuanMa[num%10];
  173.                 TempData[4]=table[3];
  174.                 beep=1;
  175.                 Display(0,8); //数码管显示函数        
  176.                 TR0=0;        
  177.                 while(m);
  178.         }
  179.         if(num==5)
  180.         {
  181.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  182.                 TempData[1]=dofly_DuanMa[num%10];
  183.                 TempData[4]=table[4];
  184.                 beep=1;
  185.                 Display(0,8); //数码管显示函数
  186.                 TR0=0;        
  187.                 while(m);        
  188.         }                  
  189.         if(num==6)
  190.         {
  191.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  192.                 TempData[1]=dofly_DuanMa[num%10];
  193.                 TempData[4]=table[5];
  194.                 beep=1;
  195.                 Display(0,8); //数码管显示函数
  196.                 TR0=0;        
  197.                 while(m);        
  198.         }
  199.         if(num==7)
  200.         {
  201.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  202.                 TempData[1]=dofly_DuanMa[num%10];
  203.                 TempData[4]=table[6];
  204.                 beep=1;
  205.                 Display(0,8); //数码管显示函数
  206.                 TR0=0;        
  207.                 while(m);
  208.         }                  
  209.         if(num==8)
  210.         {
  211.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  212.                 TempData[1]=dofly_DuanMa[num%10];
  213.                 TempData[4]=table[7];
  214.                 beep=1;
  215.                 Display(0,8); //数码管显示函数
  216.                 TR0=0;        
  217.                 while(m);        
  218.         }
  219.         if(num==9)
  220.         {
  221.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  222.                 TempData[1]=dofly_DuanMa[num%10];
  223.                 TempData[5]=table[0];
  224.                 beep=1;
  225.                 Display(0,8); //数码管显示函数
  226.                 TR0=0;        
  227.                 while(m);        
  228.         }                  
  229.         if(num==10)
  230.         {
  231.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  232.                 TempData[1]=dofly_DuanMa[num%10];
  233.                 TempData[5]=table[1];
  234.                 beep=1;
  235.                 Display(0,8); //数码管显示函数
  236.                 TR0=0;        
  237.                 while(m);        
  238.         }
  239.         if(num==11)
  240.         {
  241.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  242.                 TempData[1]=dofly_DuanMa[num%10];
  243.                 TempData[5]=table[2];
  244.                 beep=1;
  245.                 Display(0,8); //数码管显示函数
  246.                 TR0=0;        
  247.                 while(m);        
  248.         }                  
  249.         if(num==12)
  250.         {
  251.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  252.                 TempData[1]=dofly_DuanMa[num%10];
  253.                 TempData[5]=table[3];
  254.                 beep=1;
  255.                 Display(0,8); //数码管显示函数
  256.                 TR0=0;        
  257.                 while(m);        
  258.         }
  259.         if(num==13)
  260.         {
  261.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  262.                 TempData[1]=dofly_DuanMa[num%10];
  263.                 TempData[5]=table[4];
  264.                 beep=1;
  265.                 Display(0,8); //数码管显示函数
  266.                 TR0=0;        
  267.                 while(m);        
  268.         }
  269.         if(num==14)
  270.         {
  271.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  272.                 TempData[1]=dofly_DuanMa[num%10];
  273.                 TempData[5]=table[5];
  274.                 beep=1;
  275.                 Display(0,8); //数码管显示函数
  276.                 TR0=0;        
  277.                 while(m);        
  278.         }                  
  279.         if(num==15)
  280.         {
  281.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  282.                 TempData[1]=dofly_DuanMa[num%10];
  283.                 TempData[5]=table[6];
  284.                 beep=1;
  285.                 Display(0,8); //数码管显示函数
  286.                 TR0=0;        
  287.                 while(m);        
  288.         }
  289.         if(num==16)
  290.         {
  291.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  292.                 TempData[1]=dofly_DuanMa[num%10];
  293.                 TempData[5]=table[7];
  294.                 beep=1;
  295.                 Display(0,8); //数码管显示函数
  296.                 TR0=0;        
  297.                 while(m);        
  298.         }
  299. }
  300. void check2()
  301. {
  302.         if(num==1)
  303.         {
  304.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  305.                 TempData[1]=dofly_DuanMa[num%10];
  306.                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  307.                 TempData[3]=0x40;
  308.                 TempData[4]=table[0];
  309.                 Display(0,8); //数码管显示函数
  310.                 TR0=0;        
  311.                 while(m);
  312.         }                  
  313.         if(num==2)
  314.         {
  315.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  316.                 TempData[1]=dofly_DuanMa[num%10];
  317.                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  318.                 TempData[3]=0x40;
  319.                 TempData[4]=table[1];
  320.                 Display(0,8); //数码管显示函数
  321.                 TR0=0;        
  322.                 while(m);
  323.         }
  324.         if(num==3)
  325.         {
  326.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  327.                 TempData[1]=dofly_DuanMa[num%10];
  328.                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  329.                 TempData[3]=0x40;
  330.                 TempData[4]=table[2];
  331.                 Display(0,8); //数码管显示函数        
  332.                 TR0=0;        
  333.                 while(m);
  334.         }                  
  335.         if(num==4)
  336.         {
  337.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  338.                 TempData[1]=dofly_DuanMa[num%10];
  339.                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  340.                 TempData[3]=0x40;
  341.                 TempData[4]=table[3];
  342.                 Display(0,8); //数码管显示函数        
  343.                 TR0=0;        
  344.                 while(m);
  345.         }
  346.         if(num==5)
  347.         {
  348.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  349.                 TempData[1]=dofly_DuanMa[num%10];
  350.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  351.                 TempData[3]=0x40;
  352.                 TempData[4]=table[4];
  353.                 Display(0,8); //数码管显示函数
  354.                 TR0=0;        
  355.                 while(m);        
  356.         }                  
  357.         if(num==6)
  358.         {
  359.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  360.                 TempData[1]=dofly_DuanMa[num%10];
  361.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  362.                 TempData[3]=0x40;
  363.                 TempData[4]=table[5];
  364.                 Display(0,8); //数码管显示函数
  365.                 TR0=0;        
  366.                 while(m);        
  367.         }
  368.         if(num==7)
  369.         {
  370.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  371.                 TempData[1]=dofly_DuanMa[num%10];
  372.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  373.                 TempData[3]=0x40;
  374.                 TempData[4]=table[6];
  375.                 Display(0,8); //数码管显示函数
  376.                 TR0=0;        
  377.                 while(m);
  378.         }                  
  379.         if(num==8)
  380.         {
  381.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  382.                 TempData[1]=dofly_DuanMa[num%10];
  383.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  384.                 TempData[3]=0x40;
  385.                 TempData[4]=table[7];
  386.                 Display(0,8); //数码管显示函数
  387.                 TR0=0;        
  388.                 while(m);        
  389.         }
  390.         if(num==9)
  391.         {
  392.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  393.                 TempData[1]=dofly_DuanMa[num%10];
  394.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  395.                 TempData[3]=0x40;
  396.                 TempData[5]=table[0];
  397.                 Display(0,8); //数码管显示函数
  398.                 TR0=0;        
  399.                 while(m);        
  400.         }                  
  401.         if(num==10)
  402.         {
  403.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  404.                 TempData[1]=dofly_DuanMa[num%10];
  405.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  406.                 TempData[3]=0x40;
  407.                 TempData[5]=table[1];
  408.                 Display(0,8); //数码管显示函数
  409.                 TR0=0;        
  410.                 while(m);        
  411.         }
  412.         if(num==11)
  413.         {
  414.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  415.                 TempData[1]=dofly_DuanMa[num%10];
  416.                 TempData[5]=table[2];
  417.                 Display(0,8); //数码管显示函数
  418.                 TR0=0;        
  419.                 while(m);        
  420.         }                  
  421.         if(num==12)
  422.         {
  423.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  424.                 TempData[1]=dofly_DuanMa[num%10];
  425.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  426.                 TempData[3]=0x40;
  427.                 TempData[5]=table[3];
  428.                 Display(0,8); //数码管显示函数
  429.                 TR0=0;        
  430.                 while(m);        
  431.         }
  432.         if(num==13)
  433.         {
  434.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  435.                 TempData[1]=dofly_DuanMa[num%10];
  436.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  437.                 TempData[3]=0x40;
  438.                 TempData[5]=table[4];
  439.                 Display(0,8); //数码管显示函数
  440.                 TR0=0;        
  441.                 while(m);        
  442.         }
  443.         if(num==14)
  444.         {
  445.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  446.                 TempData[1]=dofly_DuanMa[num%10];
  447.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  448.                 TempData[3]=0x40;
  449.                 TempData[5]=table[5];
  450.                 Display(0,8); //数码管显示函数
  451.                 TR0=0;        
  452.                 while(m);        
  453.         }                  
  454.         if(num==15)
  455.         {
  456.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  457.                 TempData[1]=dofly_DuanMa[num%10];
  458.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  459.                 TempData[3]=0x40;
  460.                 TempData[5]=table[6];
  461.                 Display(0,8); //数码管显示函数
  462.                 TR0=0;        
  463.                 while(m);        
  464.         }
  465.         if(num==16)
  466.         {
  467.                 TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6  68%10=8  
  468.                 TempData[1]=dofly_DuanMa[num%10];
  469.                                 TempData[2]=0x40;//分解显示信息,如要显示68,则68/10=6  68%10=8  
  470.                 TempData[3]=0x40;
  471.                 TempData[5]=table[7];
  472.                 Display(0,8); //数码管显示函数
  473.                 TR0=0;        
  474.                 while(m);        
  475.         }
  476. }
  477. void keyscan()
  478. {
  479.         if(key1==0)
  480.         {
  481.                 DelayMs(10);
  482.                 if(key1==0)
  483.                 {        
  484.                         num=1;
  485.                         while(!key1);
  486.                 }
  487.         }
  488.         if(key2==0)
  489.         {
  490.                 DelayMs(10);
  491.                 if(key2==0)
  492.                 {        
  493.                         num=2;
  494.                         while(!key2);
  495.                 }
  496.         }
  497.         if(key3==0)
  498.         {
  499.                 DelayMs(10);
  500.                 if(key3==0)
  501.                 {        
  502.                         num=3;
  503.                         while(!key3);
  504.                 }
  505.         }
  506.         if(key4==0)
  507.         {
  508.                 DelayMs(10);
  509.                 if(key4==0)
  510.                 {        
  511.                         num=4;
  512.                         while(!key4);
  513.                 }
  514.         }

  515.         if(key5==0)
  516.         {
  517.                 DelayMs(10);
  518.                 if(key5==0)
  519.                 {        
  520.                         num=5;
  521.                         while(!key5);
  522.                 }
  523.         }
  524.         if(key6==0)
  525.         {
  526.                 DelayMs(10);
  527.                 if(key6==0)
  528.                 {        
  529.                         num=6;
  530.                         while(!key6);
  531.                 }
  532.         }
  533.         if(key7==0)
  534.         {
  535.                 DelayMs(10);
  536.                 if(key7==0)
  537.                 {        
  538.                         num=7;
  539.                         while(!key7);
  540.                 }
  541.         }
  542.         if(key8==0)
  543.         {
  544.                 DelayMs(10);
  545.                 if(key8==0)
  546.                 {        
  547.                         num=8;
  548.                         while(!key8);
  549.                 }
  550.         }
  551.         if(key9==0)
  552.         {
  553.                 DelayMs(10);
  554.                 if(key9==0)
  555.                 {        
  556.                         num=9;
  557.                         while(!key9);
  558.                 }
  559.         }
  560.         if(key10==0)
  561.         {
  562.                 DelayMs(10);
  563.                 if(key10==0)
  564.                 {        
  565.                         num=10;
  566.                         while(!key10);
  567.                 }
  568.         }
  569.         if(key11==0)
  570.         {
  571.                 DelayMs(10);
  572.                 if(key11==0)
  573.                 {        
  574.                         num=11;
  575.                         while(!key11);
  576.                 }
  577.         }
  578.         if(key12==0)
  579.         {
  580.                 DelayMs(10);
  581.                 if(key12==0)
  582.                 {        
  583.                         num=12;
  584.                         while(!key12);
  585.                 }
  586.         }
  587.         if(key13==0)
  588.         {
  589.                 DelayMs(10);
  590.                 if(key13==0)
  591.                 {        
  592.                         num=13;
  593.                         while(!key13);
  594.                 }
  595.         }
  596.         if(key14==0)
  597.         {
  598.                 DelayMs(10);
  599.                 if(key14==0)
  600.                 {        
  601.                         num=14;
  602.                         while(!key14);
  603.                 }
  604.         }
  605.         if(key15==0)
  606.         {
  607.                 DelayMs(10);
  608.                 if(key15==0)
  609.                 {        
  610.                         num=15;
  611.                         while(!key15);
  612.                 }
  613.         }
  614.         if(key16==0)
  615.         {
  616.                 DelayMs(10);
  617.                 if(key16==0)
  618.                 {        
  619.                         num=16;
  620.                         while(!key16);
  621.                 }
  622.         }        
  623. }
  624. void DelayUs2x(unsigned char t)
  625. {   
  626.          while(--t);
  627. }
  628. void DelayMs(unsigned char t)
  629. {   
  630.         while(t--)
  631.          {
  632.      //大致延时1mS
  633.              DelayUs2x(245);
  634.                  DelayUs2x(245);
  635.          }
  636. }
  637. void Delay(unsigned char t)
  638. {   
  639.         unsigned char x,y;
  640.         for(x=t;x>0;x--)
  641.                 for(y=110;y>0;y--);
  642. }
  643. /*------------------------------------------------
  644. 显示函数,用于动态扫描数码管
  645. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
  646. 如输入0表示从第一个显示。
  647. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
  648. ------------------------------------------------*/
  649. void Display(unsigned char FirstBit,unsigned char Num)
  650. {
  651.         unsigned char i;
  652.          
  653.         for(i=0;i<Num;i++)
  654.         {
  655.                 DataPort=0;   //清空数据,防止有交替重影
  656.                DUAN=1;     //段锁存
  657.                DUAN=0;

  658.                DataPort=dofly_WeiMa[i+FirstBit]; //取位码
  659.                WEI=1;     //位锁存
  660.                WEI=0;

  661.                DataPort=TempData[i]; //取显示数据,段码
  662.                DUAN=1;     //段锁存
  663.                DUAN=0;

  664.                    DelayMs(2); // 扫描间隙延时,时间太长会闪烁,太短会造成重影

  665.         }
  666. }     
复制代码

全部资料51hei下载地址:
16路抢答器.zip (270.95 KB, 下载次数: 271)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:360689 发表于 2018-7-2 23:24 | 只看该作者
请问有八路只能抢答器的代码文件之类的么自己做的总是出些问题想参考下大神的设计
回复

使用道具 举报

板凳
ID:546797 发表于 2019-5-25 12:03 | 只看该作者
8路抢答器呢,怎么做,求指教
回复

使用道具 举报

地板
ID:237159 发表于 2019-11-11 17:18 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
ID:736988 发表于 2020-5-4 16:47 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
ID:761032 发表于 2020-5-25 19:50 | 只看该作者
谢谢分享
回复

使用道具 举报

7#
ID:776684 发表于 2020-6-11 21:45 | 只看该作者
请问 楼主我刚刚用了你的程序,为什么会出现target not created呢
回复

使用道具 举报

8#
ID:776684 发表于 2020-6-11 21:55 | 只看该作者
楼主请问一下为什么程序会出现target not created啊这个什么原因呢
回复

使用道具 举报

9#
ID:776684 发表于 2020-6-11 22:43 | 只看该作者
反反复111 发表于 2020-6-11 21:55
楼主请问一下为什么程序会出现target not created啊这个什么原因呢

不好意思解决了谢谢分享
回复

使用道具 举报

10#
ID:677859 发表于 2020-6-22 16:03 | 只看该作者
楼主请问初始抢答时间97s怎么改成30s,改time=30吗
回复

使用道具 举报

11#
ID:1076259 发表于 2023-5-9 10:33 | 只看该作者
劝学菌 发表于 2019-5-25 12:03
8路抢答器呢,怎么做,求指教

减少一半
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表