历史上的今天
返回首页

历史上的今天

今天是:2024年12月22日(星期日)

2020年12月22日 | 基于普中科技51单片机的四路抢答器

2020-12-22 来源:51hei

在普中科技开发板上实验成功了。下面附上代码,由于都有注释,就不废话了,如果看不懂,可以连线调试一下(这是作为一个硬件生应该掌握的基本技能。


单片机源程序如下:

#include

    #define uchar unsigned char  

    #define uint unsigned int

    #define WHO P0

    sbit player1=P1^0;

    sbit player2=P1^1;

    sbit player3=P1^2;

    sbit player4=P1^3;

    sbit Ensure=P3^7;

    sbit beep=P1^6;

    sbit LSA=P3^2;

    sbit LSB=P3^3;

    sbit LSC=P3^4;

    uchar state=0;

    uchar ssec=0;

    uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

    uchar OUT[]={0x71,0x77,0x38,0x38};

    void delay(uint time)

    {

        uint x,y ;

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

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

    }

    void Delay2(uint i)

    {

            while(i--);        

    }

    void Show(uchar content[])

    {

            uchar i;

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

            {

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

                    {

                            case(0):

                                    LSA=0;LSB=0;LSC=0; break;//显示第0位

                            case(1):

                                    LSA=1;LSB=0;LSC=0; break;//显示第1位

                            case(2):

                                    LSA=0;LSB=1;LSC=0; break;//显示第2位

                            case(3):

                                    LSA=1;LSB=1;LSC=0; break;//显示第3位

                    }

                    P2=content[i];//发送段码

                    Delay2(100); //间隔一段时间扫描        

                    P2=0x00;//消隐

            }

    }

    void InitTimer0(void)

    {

        TMOD = 0x01;

        TH0 = 0x0D8;

        TL0 = 0x0F0;

        EA = 1;

        ET0 = 1;

        TR0 = 1;

    }

    void main()

    {

            Ensure=1;

            while(1)

            {

                    if(player1==0)        //玩家1进入抢答状态

            {

                delay(10);        //延时,按键消抖

                if(player1==0)        //再次判断是否进入抢答状态

                {

                                    if(state==0)  //前方无人抢答状态

                                    {

                                            InitTimer0();

                                            state=1;  //将抢答状态置为1,防止其他玩家抢答

                                            while(!player1)         //抢答成功,蜂鸣器发声

                                            {

                                                    beep=~beep;

                                                    delay(1);

                            }

                                            WHO=table[1];        //数码管显示抢答成功的玩家编号

                                    }

                }

            }

                    if(player2==0)          //以下结构类似于玩家1

            {

                delay(10);

                if(player2==0)

                {

                             if(state==0)

                                    {

                                            InitTimer0();

                                        state=1;

                                            while(!player2)

                                            {

                                                    beep=~beep;

                                                    delay(1);

                            }

                            WHO=table[2];

                                    }

                }

            }

                    if(player3==0)

            {

                delay(10);

                if(player3==0)

                {

                    if(state==0)

                                    {

                                        InitTimer0();

                                            state=1;

                                            while(!player3)

                                            {

                                                    beep=~beep;

                                                    delay(1);

                            }

                                            WHO=table[3];

                        }

                            }

            }

                    if(player4==0)

            {

推荐阅读

史海拾趣

长工微电子公司的发展小趣事

长工微电子成立于2016年5月,创立之初,公司就明确了以技术创新为核心的发展战略。公司迅速组建了一支由高级工程师、博士、硕士等组成的数十人专业开发运营团队。这支团队秉承着“创新、踏实、学习”的理念,致力于电源集成芯片市场,不断推出创新产品。通过每年推出5-10款核心芯片的速度,长工微电子迅速占领了中高端市场,逐渐在行业中崭露头角。

爱浦电子(AIPULNION)公司的发展小趣事

随着公司业务的不断扩展,爱浦电子于XXXX年成立了广州优联电气科技有限公司作为其分支机构。这一举措不仅进一步扩大了公司的业务范围和市场影响力,还为公司提供了更多的发展机遇和合作伙伴。广州优联电气科技有限公司在爱浦电子的业务开拓、经营及配套服务方面发挥了重要作用,推动了公司整体业务的快速发展。

这五个故事只是爱浦电子发展起来的一部分缩影,它们展现了公司在技术创新、市场拓展、服务升级、创新引领以及分支机构成立等方面的努力和成就。正是这些不懈的努力和持续的进步,使得爱浦电子在电子行业中脱颖而出,成为一家备受瞩目的高新技术企业。

Dynawave Incorporated公司的发展小趣事

在快速发展的过程中,Dynawave意识到企业文化的重要性。他们注重培养员工的团队合作精神和创新能力,鼓励员工积极参与公司的各项活动。同时,公司还建立了完善的激励机制和福利制度,为员工提供了良好的工作环境和发展空间。这些举措增强了员工的归属感和忠诚度,为公司的长期发展奠定了坚实的基础。

HCC Industries公司的发展小趣事

近年来,随着全球对环境保护和可持续发展的重视,HCC Industries积极响应号召,制定了绿色可持续发展战略。公司加大了对环保技术和绿色产品的研发投入,推出了一系列符合环保标准的微电子部件产品。同时,HCC还通过优化生产工艺和节能减排措施,降低了生产过程中的能源消耗和污染排放。这一战略不仅赢得了客户和消费者的广泛赞誉,也为公司带来了更加可持续的发展前景。

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

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

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

Concord Semiconductor Corp公司的发展小趣事

在半导体行业快速发展的同时,环保问题也日益受到关注。Concord Semiconductor Corp积极响应环保号召,将绿色发展理念融入企业的生产经营活动中。公司采用环保材料和工艺,加强废弃物的处理和回收利用,努力实现绿色生产。这一举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

请注意,这些故事均基于电子行业的一般情况和趋势虚构而成,并非针对任何实际存在的公司。如果需要更具体或更贴近实际的故事,建议参考相关公司的官方资料或行业报告。

问答坊 | AI 解惑

请问大家用C开发AVR时使用的是哪个开发环境,哪个更好用.

请问大家用C开发AVR时使用的是哪个开发环境,哪个更好用. 刚刚从C51转到AVR我这里有三个开发环境,AVR Studio | ICCAVR | cvavr | 其中,AVR Studio是买仿真器自带的,现在准备用Mega64做个。产品不知哪个开发环境好用更适合开发呢? 请大家指点 ...…

查看全部问答>

arm

ARM入门笔记…

查看全部问答>

FPGA可综合性对初学着的一些建议

FPGA可综合性对初学着的一些建议一、HDL不是硬件设计语言 过去笔者曾碰到过不少VHDL或Verilog HDL的初学者问一些相似的问题,诸如如何实现除法、开根号,如何写循环语句等等。在这个论坛上,也时常能看到一些网友提出这一类的问题。 对于这些问 ...…

查看全部问答>

IC (es56031)时序问题

有哪位弄过ES56031混响吗? 我按照datasheet的时序,采用UCOM模式,依次发送D4,D3,D2,D1,SHEEP = 10110,但是就是得不到正确的延时啊,总是得到最小的那个延时12MS,我怀疑是一个初始值,也就是说我没有设置成功。…

查看全部问答>

多线程实质是什么?

多线程实质是什么? …

查看全部问答>

如何使用Windows CE开发Web server。最好又实例,谢谢了。

问题如题提供实例者奖1000分。请求帮忙。 可发邮件给我ld.wuxi@yahoo.com.cn…

查看全部问答>

首家外包网络服务平台问世

  “外包在线”网络技术有限公司CEO喻烜为大家讲述了她鲜为人知的创业经历,从初识“外包”到立志创业,从寻求投资到初有成就,借由这朵铿锵玫瑰坚韧不拔的毅力和非凡的智慧,国内首家外包服务网络平台终于问世,自此“外包”服务更加平民化,从 ...…

查看全部问答>

一道非常简单的问题!就当送分!

地址总线A15—A0(低),存储器地址空间为3000H-67FFH,按字节编址。其中3000H-4FFH为ROM区,选用EPROM芯片(4K*2b/片);5000H-67FFH为RAM区,选用DRAM芯片(2K*4位/片) 解释3000H是如何推出(A15A14为00),而 4FFFH又是如何推出(A15A14为01) ...…

查看全部问答>

嵌入式开发经典网站集锦

国内站点: 华恒公司的主页,里面有很多的相关资料,有待大家去发现 http://www.hhcn.com/chinese/embedlinux-res.html SkyEye嵌入式硬件仿真项目 www.skyeye.org http://gro.clinux.org/projects/skyeye/ 公社的SkyEye项目专栏 http://www.linuxfa ...…

查看全部问答>

士大夫

                                 士大夫…

查看全部问答>