找回密码
 立即注册

QQ登录

只需一步,快速开始

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

五路按键抢答器单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:622126 发表于 2019-10-21 18:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Scorpionx 于 2019-11-10 21:05 编辑

五路按键抢答器,
P3^2~P3^6为抢答人
P3~7为主持人复位
4位数码管显示抢答者序号和倒计时

单片机源程序如下:
  1. #include <reg52.h>
  2. /***************定 义 参 数***************/
  3. unsigned char xianshi=88,kaishi=0,daojishi=10,haoma=0,bitdisplay=0,k=0;
  4. unsigned int  i,n=0,  bittime=0;
  5. sbit d1=P3^2;                 //选手1
  6. sbit d2=P3^3;                 //选手2
  7. sbit d3=P3^4;                 //选手3
  8. sbit d4=P3^5;                 //选手4
  9. sbit d5=P3^6;                 //选手5
  10. sbit start=P3^7;                //主持人
  11. sbit LED=P2^7;
  12. unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  13. /***************延 时 计 数***************/
  14. void delay (unsigned int t)                //t=1时,1ms                                 
  15. {
  16.         unsigned int a,b;
  17.         for(a=0;a<t;a++)
  18.                 for(b=0;b<120;b++);
  19. }
  20. /***************中断函数***************/
  21. void timer0(void)interrupt 1         //5ms中断一次
  22. {
  23.         TH0 = (65536-5000)/256;
  24.         TL0 = (65536-5000)%256;
  25.         switch(bitdisplay)
  26.         {
  27.         case 0:P1=0xFB;P0=Tab[xianshi/10];break;
  28.         case 1:P1=0xF7;P0=Tab[xianshi%10];break;
  29.         case 2:P1=0xFE;P0=Tab[haoma];break;
  30.         case 3:P1=0xFD;P0=~0x40; break;
  31.         }
  32.         
  33.         bitdisplay++;            
  34.         bittime++;                        
  35.         if(bitdisplay==4)
  36.                 bitdisplay=0;
  37.         
  38.         if(bittime==200)          //5*200=1000ms
  39.         {
  40.                 bittime=0;
  41.                 xianshi--;
  42.         }
  43.         
  44.         if(xianshi==0) //如果倒计时结束则蜂鸣器与LED显示
  45.         {
  46.                 P1=0xff;
  47.                 LED=1;         
  48.                 delay(1000);
  49.                 LED=0;
  50.                 TR0=0;
  51.         }
  52. }
  53. void djtime() //倒计时间修改
  54. {
  55.         while(n)
  56.                 {
  57.                         for(i=0;i<50;i++)
  58.                         {
  59.                                 P1=0xFB;P0=Tab[daojishi/10];
  60.                                 delay(5);
  61.                                 P1=0xF7;P0=Tab[daojishi%10];
  62.                                 delay(5);
  63.                         }
  64.                         if(d1==0)  
  65.                         delay(33);
  66.                         if(d1==0)
  67.                         daojishi--;
  68.                         
  69.                         if(daojishi>20)
  70.                         daojishi=20;
  71.                         if(daojishi<5)
  72.                         daojishi=5;
  73.                         if(start==0)
  74.                         delay(33);
  75.                         if(start==0)
  76.                         {
  77.                         n=0;
  78.                         LED=1;
  79.                         for(i=0;i<100;i++)
  80.                         {
  81.                                 P1=0xFB;P0=Tab[daojishi/10];
  82.                                 delay(5);
  83.                                 P1=0xF7;P0=Tab[daojishi%10];
  84.                                 delay(5);
  85.                         }
  86.                         P1=0xff;                                                
  87.                         LED=0;
  88.                         }
  89.                 }
  90. }
  91. /***************主  函  数***************/
  92. void main()
  93. {        
  94.         
  95.         TMOD=0X01;                 
  96.         TH0 = (65536-5000)/256;  
  97.         TL0 = (65536-5000)%256;
  98.         EA=1;                 
  99.         ET0=1;           //定时器中断
  100.         TR0=0;         //定时器 ,等待手动开启
  101.         for(i=0;i<6;i++)
  102.                 {
  103.                         LED=~LED;
  104.                         delay(500);
  105.                 }
  106.         LED=0;   
  107.         while(1)
  108.         {   
  109.                 djtime();
  110.                 if(start==0)      
  111.                         delay(33);
  112.                 if(start==0)
  113.                 {
  114.                         k=1;
  115.                         haoma=0;            
  116.                         xianshi=kaishi;           
  117.                         TR0=1;
  118.                 }                        
  119.                 while(k)
  120.                 {
  121.                         while(xianshi)
  122.                         {
  123.                                 if(d1==0)  
  124.                                         delay(33);
  125.                                 if(d1==0)
  126.                                 {         
  127.                                         haoma=1;
  128.                                         break;        
  129.                                 }
  130.                                 if(d2==0)  
  131.                                         delay(33);
  132.                                 if(d2==0)
  133.                                 {                                
  134.                                         haoma=2;
  135.                                         break;                                                                        
  136.                                 }
  137.                                 if(d3==0)         
  138.                                         delay(33);
  139.                                 if(d3==0)
  140.                                 {                                
  141.                                         haoma=3;
  142.                                         break;                                
  143.                                 }               
  144.                                 if(d4==0)                                 
  145.                                         delay(33);
  146.                                 if(d4==0)
  147.                                 {                                
  148.                                         haoma=4;
  149.                                         break;                                
  150.                                 }                        
  151.                                 if(d5==0)                                 
  152.                                         delay(33);
  153.                                 if(d5==0)
  154.                                 {                                
  155.                                         haoma=5;
  156.                                         break;                                
  157.                                 }                        
  158.                         
  159.                         }         
  160.                         xianshi=daojishi;        
  161.                         LED=1;     
  162.                         delay(400);         
  163.                         LED=0;
  164.                         k=0;
  165.                 }
  166.         }        
  167. }            
复制代码

以上程序51hei提供下载:
抢答器.docx (14.97 KB, 下载次数: 7)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:791702 发表于 2020-6-28 12:29 | 只看该作者
想要仿真图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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