历史上的今天
返回首页

历史上的今天

今天是:2024年11月27日(星期三)

正在发生

2019年11月27日 | 基于51单片机的八路抢答器仿真设计

2019-11-27 来源:51hei

首先,裁判在右方按下开始按钮,蜂鸣器响起,抢答开始,初始时间为20s,若1-8位选手按下按钮,即抢答成功,由显示屏显示该选手号码,如果超过时间(20s)没人认抢答,则时间重置为20s,并此题作废,答题结束后,按下重置按钮,这时时间重置,下次抢答开始。


创新功能(*)在没有按下开始键时,按下修改时间按钮,则时间会减少1s,由于默认时间为20s,所以这个功能可以实现20s内时间的调整

仿真原理图如下

单片机源程序如下:

#include

#define uchar unsigned char

#define uint unsigned int

#define  max 20

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


sbit d1=P2^4;

sbit d2=P2^5;

sbit x1=P2^6;

sbit x2=P2^7;


sbit k1=P1^0;

sbit k2=P1^1;

sbit k3=P1^2;

sbit k4=P1^3;

sbit k5=P1^4;

sbit k6=P1^5;

sbit k7=P1^6;

sbit k8=P1^7;


sbit zk1=P2^0;

sbit zk2=P2^1;


sbit buz=P2^2;


uchar d_num,cnt;

uchar x_flag;

void jianpan();

void init(void)

{

   TMOD=0X01;

   TL0=0XB0; 

   TH0=0X3C;

//   TR0=1;    

   ET0=1;     

   EA=1;

   d_num=max;

}


void delay(uint xms)

{

   uint x,y;

   for(x=xms;x>0;x--)

    for(y=110;y>0;y--);


}


void display()

{

        d1=0;         //位选端;

        P0=tab[d_num/10];//显示倒计时

        delay(5);

        d1=1;


        d2=0;

        P0=tab[d_num%10];

        delay(5);

        d2=1;


        x1=0;        //位选端

        P0=tab[x_flag/10];//显示选手号

        delay(5);

        x1=1;


        x2=0;

        P0=tab[x_flag%10];

        delay(5);

        x2=1;

}


void main()

{        init();

        while(1)

        { 

          jianpan();

          display();


        }        

}


void timer0(void) interrupt 1

   TL0=0XB0; //重装初值

   TH0=0X3C; 

   cnt++;

   if(cnt==20)//1 秒时间到

    {

       cnt=0;//计数清零

           d_num--;

           if(d_num==0)

          {

             d_num=max;


             TR0=0;        //关闭所有操作

                 }

           buz=0;        

           delay(20);

           buz=1;

           

     }   

}

void jianpan()


{             if(zk1==0&&x_flag==0)

                {

                         delay(5);

                         x_flag=0;


                         TR0=1;

                         

                }

                if(zk2==0&&TR0==0)

                {

                         delay(5);

                         if(zk2==0&&TR0==0)

                         {

                                 if(x_flag==0)

                                 {

                                   d_num--;                                //设置倒计时

                                   buz=0;

                                   delay(20);

                                    buz=1;  }


                                 if(d_num==5)

                                 d_num=max;

                                                  

                                 if(x_flag!=0) //选手显示清零

                                 {

                                 x_flag=0;

                                 d_num=max;        

                                 TR0=0;        

                                   buz=0;

                                   delay(20);

                                    buz=1;

                                      }


                                 while(!zk2)

                                 display();

                         }

                }


                

            if(k1==0&&TR0==1) 

                {

                         delay(5);

                         if(k1==0&&TR0==1)

                         {

                           x_flag=1;


                            TR0=0;

                                  }                 

                }



                if(k2==0&&TR0==1)

                {

                         delay(5);

                         if(k2==0&&TR0==1)

                         {x_flag=2;TR0=0;}                 

                         

                }


                if(k3==0&&TR0==1)

                {

                         delay(5);

                         if(k3==0&&TR0==1)

                         {x_flag=3;TR0=0;}                 

                         while(!k3)

                         display();

                }


                if(k4==0&&TR0==1)

                {

                          delay(5);

                         if(k4==0&&TR0==1)

                         {x_flag=4;TR0=0;}                 

                         

                }

                if(k5==0&&TR0==1)

                {

                         delay(5);

                         if(k5==0&&TR0==1)

推荐阅读

史海拾趣

德崧电子(D-SWITCH)公司的发展小趣事

随着公司业务的不断发展,德崧电子开始积极拓展市场。公司深入分析市场需求和行业趋势,针对不同领域推出了具有针对性的产品和服务。例如,在汽车行业,德崧电子推出了耐高温、耐磨损的汽车专用开关;在家电行业,公司则推出了外观精美、功能丰富的智能开关。这些产品的推出不仅满足了市场的多样化需求,也为公司带来了丰厚的回报。

Axiomtek公司的发展小趣事

随着公司业务的不断发展,德崧电子开始积极拓展市场。公司深入分析市场需求和行业趋势,针对不同领域推出了具有针对性的产品和服务。例如,在汽车行业,德崧电子推出了耐高温、耐磨损的汽车专用开关;在家电行业,公司则推出了外观精美、功能丰富的智能开关。这些产品的推出不仅满足了市场的多样化需求,也为公司带来了丰厚的回报。

赛微(Cellwise)公司的发展小趣事

作为一家有着高度社会责任感的企业,赛微始终关注社会发展和环境保护。公司积极参与公益事业和慈善活动,为社会做出积极贡献。同时,公司还注重环境保护和资源节约,通过引进先进的生产设备和工艺技术,降低生产过程中的能耗和排放,实现绿色生产和可持续发展。

请注意,以上故事框架仅为概述,具体细节和数据可能需要根据实际情况进行调整和完善。

潮州三环(Three-circle)公司的发展小趣事

随着公司业务的不断拓展和市场的日益全球化,三环集团开始积极推进全球化战略。公司在广东潮州、深圳,四川成都、南充、德阳,江苏苏州,湖北武汉,中国香港,德国,泰国等地设立公司,形成了覆盖全球的产业布局。通过与国际知名企业的合作与交流,三环集团不断提升自身的技术水平和市场竞争力,逐步成为电子行业的领军企业之一。同时,公司还积极参与国际展览和论坛等活动,展示自身实力和品牌形象,为全球客户提供更优质的产品和服务。

以上五个故事分别从不同角度展现了潮州三环(Three-circle)公司在电子行业中的发展历程和成就。这些故事不仅展示了公司的创新能力和市场洞察力,也体现了公司在面对市场挑战时的勇气和决心。

永源微电子(APM)公司的发展小趣事

2023年,永源微电子成功完成了A轮融资,这是公司发展过程中的一个重要里程碑。此次融资由深圳英集芯科技股份有限公司领投,为公司带来了丰富的资金支持和市场资源。通过与英集芯科技的战略合作,永源微电子在微电子领域的技术创新和产品研发上取得了新的突破。双方共同开展研发项目,推动技术的突破和应用场景的拓展,为公司的未来发展注入了强大的动力。

East Texas Integrated Circuits公司的发展小趣事

在市场竞争日益激烈的情况下,ETIC意识到品质管理对于公司的重要性。为了提升产品质量和客户满意度,公司建立了一套完善的品质管理体系,从原材料采购到产品生产、检验和售后服务等各个环节都进行了严格的质量控制。同时,ETIC还积极引入先进的生产设备和工艺技术,不断提高生产效率和产品质量。这些努力使ETIC的产品在市场上获得了良好的口碑和广泛的认可。

问答坊 | AI 解惑

电感,变压器

请问下滤波电感变压器的原理和作用?,最好能发个图看看,长什么样?谢谢!…

查看全部问答>

信号链基础--运放

信号链基础--运放…

查看全部问答>

寻找RFID及嵌入式开发合作伙伴

本公司寻找有创业激情和梦想的志同道合者,发展方向是RFID及嵌入式开发…

查看全部问答>

现在用得比较多的8位单片机是什么型号的?

现在用得比较多的8位单片机是什么型号的?需要价格比较便宜一点的,带A/D的,I/O比较多的.…

查看全部问答>

怎样使用PB5.0的断点功能

如题,没怎么用过,这次我用的是X86的平台模拟器,在这个基础上想使用断点来跟踪程序请教高手怎么使用这个功能?…

查看全部问答>

关于液晶屏的驱动问题求助?

我有一块ARM7 S3C44B0的开发板,我最近买了一个320X240的液晶屏。 商家提供了320X240.bin的驱动,但是我不知道怎么把驱动加载到开发板的系统中。 我刚开始学这个,我想检验一下这块屏能不能正常使用。哪位高人能不能详细解释一下??…

查看全部问答>

请问做一个USB管理软件的流程?

请问做一个USB管理软件的流程?…

查看全部问答>

请教linux下并口的操作的问题

我向请教下一个问题: 我想对PC机并口进行操作,操作步骤是这样的; 先用ioperm(0x378,3,1);取得控制权,然后 _outp(0x378,0x55); 但是用_inp(0x378)读出的数据是255,是我哪地方用的不对的吗? …

查看全部问答>

Cortex-M3与ARM7TDMI-S内核MCU运算性能比较

还是21IC人气旺,转一篇我在EDN的博文:http://blog.ednchina.com/htjgdw/140162/message.aspx自从STM32推出后,我对它很感兴趣,由于它采用了ARM的Cortex-M3内核,所以很想了解一下其性能和ARM7相比究竟如何?很巧的机会知道了EDNCHINA,参加了EDN ...…

查看全部问答>

用ST的CORTEX-M3,感觉如行云流水阿

                                 IAR + FWLib 那是相当顺手…

查看全部问答>