【51单片机】【protues仿真】 基于51单片机八路抢答器系统

发布于:2025-09-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示
2、主持人按下开始,8位选手开始抢答
3、可以进行简单的加减乘除运算
4、倒计时最后5秒蜂鸣器会滴滴提醒
5、选手抢答成功,数码管会显示其号码
6、按下清楚按键进入新一轮
7、抢答成功后蜂鸣器响2秒

二、使用步骤

基于51单片机的八路抢答器设计支持8路独立抢答输入,主持人通过“开始”键启动抢答流程,抢答成功后锁定其他输入。数码管实时显示抢答者编号,同时对应LED灯点亮。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、LED指示灯模块
4、继电器模块
5、数码管显示模块

四、软件设计

#include<reg51.h>
#include<intrins.h>
sbit smg1=P2^4;  
sbit smg2=P2^6;    
sbit smg3=P2^7;        
sbit smg4=P2^5;

sbit keyks=P2^2;   
sbit keytz=P2^1;   
sbit keyqc=P2^0;   

sbit key1=P1^4;      
sbit key2=P1^5;    
sbit key3=P1^6;      
sbit key4=P1^7;      
sbit key5=P3^4;       
sbit key6=P3^5;       
sbit key7=P3^6;        
sbit key8=P3^7;      
sbit spk=P1^0;      
int djs=60,js=0;         
unsigned char flag=0;
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80};
void main()
{
int djs1=60;
Timer0_init();     
spk=1;            
        djs=60;       
while(1)
{

LOOP1:   djs=djs1;
djsxs22();  

            if(key1==0)        
                        {
                               delayms(3);
                               if(key1==0)
                               { 
                                while(!key1);    
                             djs=60;
                             while(1)
                              {
                                TR0=0;       
                                djsxs();      
                               if(key2==0)     
                                   {    
                                           delayms(8);       
                                           if(key2==0)    
                                           {
                                         do
                                         { 
                                             while(!key2); 
                                         delayms(5);
                                         }
                                         while(key2!=1);
                                         djs++;
                                         djs1=djs;
                                        }
                                    }
                               if(key3==0)     
                                   {    
                                           delayms(8);       
                                           if(key3==0)   
                                           { 
                                        do
                                         {
                                              while(!key3); 
                                           delayms(5);    
                                         }
                                        while(key3!=1);
                                         djs--;
                                         djs1=djs;
                                        }
                                    }
                               if(key1==0)     
                                   {    
                                           delayms(3);           
                                           if(key1==0)       
                                           { 
                                            while(!key1);
                                        goto LOOP1;         
                                        }
                                    }                                           
                              }
                            }
                        }
            if(keyks==0)
            {           
      
               delayms(3);       
               if(keyks==0)
               { 
                while(!keyks);             
                TR0=1;              
                while(1)
                  {
                    djsxs();
                if(keytz==0)
                        {
                               delayms(3);             
                               if(keytz==0)
                               { 
                                while(!keytz);    
                                {
                                 TR0=0;          
                                 flag=0;
                                 spk=1;
                                }

                            }
                        }
                   if(keyks==0)
                        {
                               delayms(3);
                               if(keyks==0)
                               { 
                                while(!keyks);     
                                TR0=1;          

                            }
                        }
                if((key1==0)&&(TR0==1))         
                        {         spk=0;      
                               delayms(3);
                               if(key1==0)
                               { 
                                while(!key1);   
                              {
                                spk=1;         

                                flag=0;
                              }
                             while(1)
                              {


                                TR0=0;        
                                 djsxs1();     
                                djsxs30();      
                                djsxs();     


                               if(keyqc==0)
                                   {    
                                           delayms(3);         
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc); 

                                        goto LOOP1;        
                                        }
                                        }                                           
                              }
                            }
                        }
                if((key2==0)&&(TR0==1))
                        {    spk=0;
                               delayms(3);
                               if(key2==0)
                               { 
                                while(!key2);
                              {
                               spk=1;
                               flag=0;
                             while(1)
                              {
                                TR0=0;
                                 djsxs2();
                                djsxs30();    
                                djsxs();
                                if(keyqc==0)
                                   {    
                                           delayms(3);
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc);

                                        goto LOOP1;    
                                        }
                                        }                                           
                              }
                            }
                        }
                    if((key3==0)&&(TR0==1))
                        {    spk=0;
                               delayms(3);
                               if(key3==0)
                               { 
                                while(!key3);
                                  {
                                   spk=1;
                                   flag=0;
                             while(1)
                              {
                                TR0=0;
                                 djsxs3();
                                djsxs30();     
                                djsxs();
                               if(keyqc==0)
                                   {    
                                           delayms(3);
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc);

                                        goto LOOP1;    
                                        }
                                        }                                           
                              }
                            }
                        }
                if((key4==0)&&(TR0==1))
                        {    spk=0;
                               delayms(3);
                               if(key4==0)
                               { 
                                while(!key4);
                              {
                               spk=1;
                               flag=0;
                              }
                             while(1)
                              {
                                TR0=0;
                                 djsxs4();
                                djsxs30();    
                                djsxs();
                               if(keyqc==0)
                                   {    
                                           delayms(3);
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc);

                                        goto LOOP1;    
                                        }
                                        }                                           
                              }
                            }
                        }
                    if((key5==0)&&(TR0==1))
                        {    spk=0;
                               delayms(3);
                               if(key5==0)
                               { 
                                while(!key5);
                              {
                               spk=1;
                               flag=0;
                              }
                             while(1)
                              {
                                TR0=0;
                                 djsxs5();
                                djsxs30();      
                                djsxs();
                               if(keyqc==0)
                                   {    
                                           delayms(3);
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc);

                                        goto LOOP1;    
                                        }
                                        }                                           
                              }
                            }
                        }
                    if((key6==0)&&(TR0==1))
                        {  spk=0;
                               delayms(3);
                               if(key6==0)
                               { 
                                while(!key6);
                              {
                               spk=1;
                               flag=0;
                              }
                             while(1)
                              {
                                TR0=0;
                                 djsxs6();
                                djsxs30();     
                                djsxs();
                               if(keyqc==0)
                                   {    
                                           delayms(3);
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc);

                                        goto LOOP1;    
                                        }
                                        }                                           
                              }
                            }
                        }
                    if((key7==0)&&(TR0==1))
                        {    spk=0;
                               delayms(3);
                               if(key7==0)
                               { 
                                while(!key7);
                              {
                               spk=1;
                               flag=0;
                              }
                             while(1)
                              {
                                TR0=0;
                                 djsxs7();
                                djsxs30();   
                                djsxs();
                                if(keyqc==0)
                                   {    
                                           delayms(3);
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc);

                                        goto LOOP1;    
                                        }
                                        }       
                              }
                            }
                        }
                    if((key8==0)&&(TR0==1))
                        {    spk=0;
                               delayms(3);
                               if(key8==0)
                               { 
                                while(!key8);
                                 {
                                   spk=1;
                                   flag=0;
                                 }
                             while(1)
                              {
                                TR0=0;
                                 djsxs8();
                                djsxs30();   
                                djsxs();
                               if(keyqc==0)
                                   {    
                                           delayms(3);
                                           if(keyqc==0)
                                           { 
                                            while(!keyqc);

                                        goto LOOP1;    
                                        }
                                        }       
                                          }
                                 }
                        }  

                  }

                }
               }
 }
}

五、实验现象

演示视频: