历史上的今天
返回首页

历史上的今天

今天是:2024年10月16日(星期三)

正在发生

2020年10月16日 | 51单片机三路抢答器

2020-10-16 来源:51hei

单片机程序源码:

/*******************************************************************************

*  标题:                           三路抢答器                                  *

*  时间                      2018年8月5日17:59:20                                                   *

*                                                                                                                                                           *

*  实验说明:在10s的时间内,三位选手进行按键抢答,如果1号抢答,那么数码管将显示*

1号选手的号码。并且蜂鸣器响,以此类推。如果10s时间到,蜂鸣器响,选手 *

无法进行抢答                                                                                    *                                                      

********************************************************************************

* 实验心得:做法相对简单,注意共阴数码管还是共阳数码管                                                             *

********************************************************************************/


#include


//IO口定义

#define GPIO_DIG P0

#define GPIO_SHOW P2


sbit LSA=P3^0;

sbit beep=P1^5;

sbit K1=P3^1;

sbit K2=P1^0;

sbit K3=P1^1;

sbit K4=P1^2;


//--定义全局变量--//

typedef unsigned int u16;

unsigned char code DIG_CODE[18]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsigned int Ge=0;

unsigned int Shi=1;

unsigned int num=0;

unsigned int Res=10;

unsigned int flag=0;


//全局函数

void DigDisplay();


void delay(u16 i)

{

        while(i--);      

}


void main()

{

    TMOD = 0x01;

    TH0 = 0x3C;

    TL0 = 0x0B0;

    EA = 1;

    ET0 = 1;

    TR0 = 1;

        DigDisplay();



}



void DigDisplay()

{

        unsigned char i;

        unsigned int j;

        while(1)

        {

        for(i=0;i<2;i++)

        {

                switch(i)         //位选,选择点亮的数码管,

                {

                        case(0):

                                LSA=0;

                                GPIO_DIG=DIG_CODE[Shi];//发送段码

                                break;//显示第0位

                        case(1):

                                LSA=1;

                                GPIO_DIG=DIG_CODE[Ge];//发送段码

                                break;//显示第1位

                }

               

/****************************************************************************/

/*消隐函数要在数码管更新频率很快的条件下,才起作用,手动更换数码管位选完全达不到这么快的速度,因此在这种情况下也是没必要用消隐的  */

                j=10;                                                 //扫描间隔时间设定

                while(j--);        

                GPIO_DIG=0x00;//消隐

                }

        if(K1==0)

        {

                Res=10;

                flag=0;

        }


    else if(K2==0)

        {

                GPIO_SHOW=~DIG_CODE[1];

                while(1)

                {

                beep=~beep;

                delay(10);

                if(K1==0)

                {

                 Res=10;

                 flag=0;

                 GPIO_SHOW=~DIG_CODE[17];

                 break;        

                }

                }


        }


        else if(K3==0)

        {

                GPIO_SHOW=~DIG_CODE[2];

                while(1)

                {

                beep=~beep;

                delay(10);

                if(K1==0)

                {

                 Res=10;

                 flag=0;

                 GPIO_SHOW=~DIG_CODE[17];

                 break;

                }        

                }

        }


        else if(K4==0)

        {

                GPIO_SHOW=~DIG_CODE[3];

                while(1)

                {

                beep=~beep;

                delay(10);

                if(K1==0)

                {

                 Res=10;

                 flag=0;

                 GPIO_SHOW=~DIG_CODE[17];

                 break;

                }        

                }

        }


        }



}


void Int1() interrupt 1

{

        TMOD = 0x01;

    TH0 = 0x3C;

    TL0 = 0x0B0;

        num++;


        if(num==20)

        {

                num=0;

                flag++;

                Res--;

                Ge=Res%10;

                Shi=Res/10;               

        }

        

        if(flag==10)

        {

                while(1)

                {

                beep=~beep;

                delay(10);


                if(K1==0)

            {

                Res=10;

                flag=0;

                break;

            }

                }

        }        

}


推荐阅读

史海拾趣

EXCELTA公司的发展小趣事

Excelta公司创立于20世纪90年代初,当时电子元器件市场正处于快速发展阶段。创始人李明看到连接器市场的巨大潜力,决定投身其中。然而,初创时期资金紧张,技术储备薄弱,公司面临巨大挑战。李明带领团队日夜兼程,通过技术创新和成本控制,成功开发出第一款具有竞争力的连接器产品,并迅速获得了市场的认可。此后,Excelta逐渐在连接器领域崭露头角。

3M公司的发展小趣事

进入21世纪后,Excelta公司意识到国际市场的巨大潜力。为了拓展海外市场,公司制定了详细的国际化战略,并在全球范围内建立了多个生产基地和销售网络。通过与国际知名企业的合作和交流,Excelta不断吸收先进技术和管理经验,提升了自身的核心竞争力。同时,公司还积极参与国际展会和论坛,提升了品牌知名度和影响力。

Cypress Industries公司的发展小趣事

Cypress Semiconductor于1982年在美国加州的硅谷成立,这里是全球半导体行业的发源地之一。公司起初专注于高性能IC产品的研发和生产,为数据传输、远程通讯等领域提供解决方案。随着技术的不断发展和市场的扩大,Cypress逐渐将业务拓展至全球,并在多个国家和地区建立了生产基地和设计中心。

Device Engineering Incorporated公司的发展小趣事

随着公司业务的不断发展,DEI公司开始考虑国际化拓展。他们积极寻求与国际知名企业的合作,通过技术交流和共同研发,不断提升自身实力。同时,DEI公司也在全球范围内建立了销售网络,将产品推向了更广阔的市场。这一举措不仅提高了公司的知名度,也为公司带来了可观的收益。

Ferroperm公司的发展小趣事

随着全球环保意识的不断提高,Ferroperm公司也积极响应环保号召,致力于可持续发展。他们采用环保材料和生产工艺,减少生产过程中的污染和废弃物排放。同时,Ferroperm还积极参与环保公益活动,推动环保理念的普及和传播。这种对环保的关注和投入不仅体现了公司的社会责任感,也为公司的长远发展奠定了坚实的基础。

EBG RESISTORS LLC公司的发展小趣事

作为一家有社会责任感的企业,EBG RESISTORS LLC公司积极履行环保责任。他们采用环保材料和生产工艺,减少生产过程中的废弃物排放。同时,公司还积极参与公益活动,回馈社会。这种负责任的态度赢得了客户和社会的广泛赞誉。

问答坊 | AI 解惑

AD9852资料(程序,原理图)

本帖最后由 paulhyde 于 2014-9-15 02:54 编辑 包括测试程序,原理图,是买的一块开发板上给的。 [ 本帖最后由 chbaaic 于 2008-10-30 11:52 编辑 ]  …

查看全部问答>

石英振荡体名企诚招 研发部总工

百利通公司总部设在硅谷,是Nasdaq上市公司,在晶体振荡器领域位居世界前十大。百利通公司在香港和美国都设有研发中心,拥有一批经验丰富的专业设计人员。随着产品线的扩充和区域市场的成熟,先后在台湾、香港、上海设立公司,凭借其遍布全球的销售 ...…

查看全部问答>

光敏电阻

哪位仁兄介绍个好点的光敏电阻? 功率可调…

查看全部问答>

隔离器选型要点

隔离器选型要点 一.共模干扰抑制能力,隔离器优势先决条件。 隔离器在独有行业范围内,无论是温度隔离变送器、信号分配器、隔离配电器及电流、电压变送器等产品内,它们共有特点是端口之间要绝对电气隔离,也就是一次仪表、电源及采集设备之间没有任 ...…

查看全部问答>

如何选择生物识别产品?

  采用生物识别技术的门禁系统在安防行业应用已经越来越多,包括银行、监狱、部队等单位已经采用生物识别的门禁系统来加强其管理的安全性和使用的方便性。由于生物识别技术已经开始达到大规模的应用水平,包括产品价格、品质和技术都已经相对成熟 ...…

查看全部问答>

LM3S系列电源管理方式

本文以TI 公司的cortex M3芯片为例,说明了如何降低其功耗 …

查看全部问答>

window media player下添加菜单

大家好:      请教大家一个问题:      在微软window mobile 的windows media player下的右软键菜单下添加一个菜单项,该怎么添加? 微软是否提供相应的接口?      有谁知道 ...…

查看全部问答>

怎样读出试图列表里文件的名,用OnClickList么?

程序大概这样的,一个试图列表里显示了CF卡中所有的文件,鼠标焦点可以放在文件上,但现在想做一个选取功能,就是,当鼠标单击了一个文件就能直接或按另一个按钮读出他的名字,这样好去CF卡中查找这个文件并对这个文件操作。问题是,怎么读出文件的 ...…

查看全部问答>

美企招聘Java Engineer (SW 6#)

公司名称: Carrier Access 公司网址: http://www.carrieraccess.com 电子邮箱: lshi@carrieraccess.com,简历请注明信息出处 工作地点: 上海 外语要求: 英文良好 简历接收方式: 英文及中文 学历: 本科以上 职位描述: -Candidates will ha ...…

查看全部问答>

万利的ISP-STM32F怎么不能下载啊?

都连不上,大家帮帮忙!新手  …

查看全部问答>