找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2868|回复: 2
收起左侧

基于C51单片机的八路抢答器

[复制链接]
ID:435809 发表于 2018-11-29 15:54 | 显示全部楼层 |阅读模式
#include<reg52.h>
sbit k0=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit k6=P1^6;
sbit k7=P1^7;
sbit B0=P3^7;
sbit l0=P2^0;
sbit l1=P2^2;
sbit l2=P2^3;
sbit l3=P2^4;
sbit kz=P3^0;
sbit ks=P3^1;
sbit key=P3^2 ;
sbit blue=P2^6;
sbit red=P3^6;
unsigned char qiangdanum=0x3f;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char ge=0,shi=0;        start;
unsigned int num=0,time=30;
void display();                         /*显示函数*/
void delay(unsigned int);
void intial();
void delay(unsigned int z)           /*延迟函数*/
{unsigned int x,y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void intial()              
{TMOD=0X01;                             /*采用方式一,即十六位计数器*/
TH0=(65536-50000)/256;                 /*设置初始值,50ms中断一次*/
TL0=(65536-50000)%256;
IT0=0;                                         
EA=1;ET0=1;                               /*开启总中断源*/
EX0=1; }                                   /*启动外部中断0*/

main()
{
intial();                              
{while(1)
{display();
if(ks==0)
  {delay(5);
    if (ks==0)
    { while(!ks)
     {TR0=0;time=30;qiangdanum=0;blue=0; start=1;intial();}
    }  
  }
if(kz==0)
{delay(5);
   if (kz==0)
   {while(!kz)
  { TR0=1;B0=1;delay(50);B0=0; qiangdanum=0;blue=0;intial();  /*开启定时器0中断*/
   }
if(key==0)
  if(start==0)
    {while(!key)
   {red=0; B0=1;delay(50);B0=0;intial();}                                
   }
   }
}

}
}
}
void exter0() interrupt 0                /*外部中断程序*/
{EA=0;l0=0;
if(k0==0)                               /*开关0按下*/
  {delay(5);
   if(k0==0)                        
  {qiangdanum=1;blue=0; B0=1;delay(50);B0=0;}  
  }                                        /* 1号选手抢答成功,数码管显示1*/
if(k1==0)                                /*开关1按下*/
  {delay(5);
   if(k1==0)                       
  {qiangdanum=2; blue=0;B0=1;delay(50);B0=0;}  
  }                                        /* 2号选手抢答成功,数码管显示2*/
if(k2==0)                                 /*开关2按下*/
  {delay(5);
   if(k2==0)                        
  {qiangdanum=3;blue=0; B0=1;delay(50);B0=0;blue=0;}  
  }                                       /* 3号选手抢答成功,数码管显示3*/

if(k3==0)                                 /*开关3按下*/
  {delay(5);
   if(k3==0)                        
  {qiangdanum=4;blue=0; B0=1;delay(50);B0=0;blue=0;}    /* 4号选手抢答成功,数码管显示4*/         
  }  
if(k4==0)                                 /*开关4按下*/
  {delay(5);
   if(k4==0)                        
  {qiangdanum=5;blue=0; B0=1;delay(50);B0=0;}  /* 5号选手抢答成功,数码管显示5*/        
  }
if(k5==0)                                 /*开关5按下*/
  {delay(5);
   if(k5==0)                        
  {qiangdanum=6; blue=0;B0=1;delay(50);B0=0;}    /* 6号选手抢答成功,数码管显示6*/
  }   
if(k6==0)                                 /*开关6按下*/
  {delay(5);
   if(k6==0)                        
  {qiangdanum=7;blue=0; B0=1;delay(50);B0=0;}  /* 7号选手抢答成功,数码管显示7*/   
  }
if(k7==0)                                     /*开关7按下*/
  {delay(5);
   if(k7==0)                        
  {qiangdanum=8; blue=0;B0=1;delay(50);B0=0;}     /* 8号选手抢答成功,数码管显示8*/
  }
}

void time0() interrupt 1
{num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(num==20)
   { num=0;
     time--;
    if(time==0)                           /*30秒的倒计时*/
    {time=30;TR0=0;
    }
   }
}                                        /*1秒定时函数,采用方式1重装*/
void display(void)                       
{shi=time/10;
ge=time%10;
P2=0xf7;
P0=table[ge];
delay(5);
P2=0xfb;
P0=table[shi];
delay(5);
P2=0xFe;
P0=table[qiangdanum];
delay(5);                               /*显示函数,显示选手号码和倒计时*/                              
}              




评分

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

查看全部评分

回复

使用道具 举报

ID:439877 发表于 2018-12-5 11:51 | 显示全部楼层
为什么显示3308
回复

使用道具 举报

ID:428160 发表于 2018-12-10 23:45 | 显示全部楼层
我借鉴一下回去试试啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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