历史上的今天
返回首页

历史上的今天

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

正在发生

2020年09月11日 | 51单片机8路抢答器

2020-09-11 来源:51hei

时间有限,用数码管显示8路抢答
用定时器进行8路扫描,间隔可以调十分小
此外,具有设置时间的功能(抢答和答题时间)

8路抢答器仿真原理图如下

单片机源程序如下:

#include

#include


void Setsecond();//抢答器答题和抢答时间的设置函数声明

void delay(int k); //延时函数声明


//数码管选管位

sbit Sel1=P2^0;

sbit Sel2=P2^1;

sbit Sel3=P2^2;

sbit Sel4=P2^3;

sbit Sel5=P2^4;

sbit Sel6=P2^5;


//抢答器的状态指示灯

sbit led=P2^6;   //显示复位和设置时间的状态

sbit Led1=P3^1;  //抢答失败时,该灯会一直闪烁

sbit Led2=P3^2;  //答题完毕时,该灯会一直闪烁


//抢答器初始化抢答和答题时间按键

sbit Set1=P3^3;  //设置抢答时间,+

sbit Set2=P3^4;  //设置抢答时间,-

sbit Set3=P3^5;  //设置答题时间,+

sbit Set4=P3^6;  //设置答题时间,-

sbit RST=P2^7;   //抢答器的复位按键

sbit EN=P3^0;    //抢答器使能和设置抢答和答题时间按键


unsigned char Tshu1=11,Tshu2=31,shu1=11,shu2=31,shu;//抢答器抢答时间和答题时间的相关变量

unsigned char count0=0,count1=0,roberflag=0,scond1=0,second2=0,robernum=0;//抢答者的相关变量

unsigned char Shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段码值

bit Enflag=0; //抢答器使能的工作标志变量,0表示正常工作,1表示设置时间(抢答和答题)



void main()  //主函数

{

        unsigned char n=0;

        TMOD=0x11;Led1=0;Led2=0;

        TH0=(2^16-50000)/2^8;TL0=(2^16-50000)%2^8;

        TH1=(2^16-50000)/2^8;TL1=(2^16-50000)%2^8;

        TR0=1;ET0=1;TR1=1;ET1=1;EA=1;

        while(1)

        {

                for(n=0;n<6;n++) //这个循环,实现数码管的动态显示

                {

                switch(n)

                {

                        case 0:Sel1=1,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=0;

                        if(Enflag == 0)

                        P0=~Shuma[shu/10];

                        else

                        P0=~Shuma[shu1/10];break;

                        case 1:Sel1=0,Sel2=1,Sel3=0,Sel4=0,Sel5=0,Sel6=0;

                        if(Enflag == 0)

                        P0=~Shuma[shu%10];

                        else

                        P0=~Shuma[shu1%10];break;

                        case 2:Sel1=0,Sel2=0,Sel3=1,Sel4=0,Sel5=0,Sel6=0;P0=0xBF;break;

                        case 3:Sel1=0,Sel2=0,Sel3=0,Sel4=1,Sel5=0,Sel6=0;P0=0xBF;break;

                        case 4:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=1,Sel6=0;

                        if(Enflag == 0)

                        P0=~Shuma[robernum/10];

                        else

                        P0=~Shuma[shu2/10];break;

                        case 5:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=1;

                        if(Enflag == 0)

                        P0=~Shuma[robernum%10];

                        else

                        P0=~Shuma[shu2%10];break;

                        }

                  delay(20);

                        P0=0xff;

         }

}

}


void delay(int k)   //延时函数,主要是为了数码管的动态显示

{

   while(k--);

}


void Timer0() interrupt 1  //定时器0,主要用于各种按键的扫描,每200ms一次

{  

  TH0=(2^16-50000)/2^8;TL0=(2^16-50000)%2^8;

        count0++;

        P1=0x00;

        if(count0 == 5)

        {

                count0=0;

                Setsecond();  //调用设置时间函数,检测是否有设置时间的动作

                if(RST == 0) //检测是否有复位动作,有动作,则实现部分变量初始化值

                {

                        roberflag=0;

                        robernum=0;shu=0;

                        led=~led;Led1=0;Led2=0;

                        shu1=Tshu1;shu2=Tshu2;

                }

                if(EN == 0)

                {

                        Enflag=~Enflag;

                        led=~led;Led1=0;Led2=0;

                }

                if(Enflag == 0) //正常工作时候的,抢答人号码的识别和显示(同时判断8口,不准次扫描,无优先级)

                {

                if(P1 != 0x00)

                {

                        if(roberflag == 0) //只有在抢答时间才能抢答,roberflag=0表示抢答,1答题,2抢答失败,3答题完毕

                        {

                        roberflag++;  

                        switch(P1)

                        {

                                case 0x01:robernum=1;break;

                                case 0x02:robernum=2;break;

                                case 0x04:robernum=3;break;

                                case 0x08:robernum=4;break;

                                case 0x10:robernum=5;break;

                                case 0x20:robernum=6;break;

                                case 0x40:robernum=7;break;

                                case 0x80:robernum=8;break;

                                default:break;

                        }

                }

        }

}

}

        }


void Timer1() interrupt 3    //定时器1主要是用于工作时的数码显示,跑表,1一秒刷新一次

{

        TH1=(2^16-50000)/2^8;TL1=(2^16-50000)%2^8;

        if(roberflag == 2)

                Led1=~Led1;

        if(roberflag == 3)

                Led2=~Led2;

        count1++;

        if(count1 == 20) //正常工作时候的跑表

        {

                if(Enflag == 0)

                {

                if(roberflag == 0)  //抢答时间的跑表  

                {

                        shu1--;

                        shu = shu1;

                }

                if(roberflag == 1)  //答题时间的跑表

                {

                        shu2--;

                        shu = shu2;

                }

                if(shu1 == 0)

                        roberflag=2;

                if(shu2 == 0)

                        roberflag=3;

          }

                  count1=0;

        }

}


void Setsecond()   //抢答时间和答题时间设置函数,也是被T0调用,实现设置时间功效。

推荐阅读

史海拾趣

CML Microcircuits公司的发展小趣事

为了进一步扩大市场份额,CML Microcircuits公司开始积极拓展全球市场。通过与当地代理商和分销商建立合作关系,CML的产品逐渐进入了全球各地的电子市场。同时,公司还设立了多个海外研发中心和销售中心,以便更好地服务全球客户。这些举措不仅提升了CML的品牌知名度,也为其带来了更多的商业机会。

Bogen Communications Inc公司的发展小趣事

Bogen Communications Inc公司起初只是一个小型的电子设备制造商,但公司高层看到了市场的巨大潜力,决心进行市场拓展。通过精准的市场定位和有效的营销策略,公司成功地将产品打入多个国家和地区。同时,公司还注重品牌建设,通过提升产品质量、优化客户服务等方式,逐渐树立了良好的品牌形象。

BOWEI公司的发展小趣事

Bogen Communications Inc公司起初只是一个小型的电子设备制造商,但公司高层看到了市场的巨大潜力,决心进行市场拓展。通过精准的市场定位和有效的营销策略,公司成功地将产品打入多个国家和地区。同时,公司还注重品牌建设,通过提升产品质量、优化客户服务等方式,逐渐树立了良好的品牌形象。

EM Microelectronic-Marin SA公司的发展小趣事

进入1980年代,随着技术的不断进步,ASIC(应用特定集成电路)技术开始兴起。1982年,Mikron Integrated Microelectronics(EM Microelectronic-Marin的前身之一)开始了ASIC技术的研究,并在随后的几年中取得了显著成果。1987年,其奥地利分公司开始专注于识别和智能卡芯片的开发,这一领域的成功为公司带来了新的增长点。

中移物联网(Chinamobile)公司的发展小趣事

2022年12月,中移物联网的OneNET城市物联网平台在2022中国移动全球合作伙伴大会上亮相。该平台以城市为核心,整合了各类物联网资源,为城市管理、公共服务等领域提供了全方位的物联网解决方案。OneNET城市物联网平台的推出,标志着中移物联网在物联网领域的技术实力和市场地位得到了进一步提升。

Aromat Corp公司的发展小趣事

在快速发展的过程中,Aromat Corp始终关注社会责任。公司积极参与公益活动,支持教育事业和环保事业。同时,Aromat Corp还注重员工的成长与发展,提供良好的工作环境和福利待遇,激发员工的创新精神和团队合作精神。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

这五个故事只是虚构的Aromat Corp公司的发展概况,并不代表任何真实公司的实际情况。每个公司的发展历程都是独一无二的,受到市场环境、技术趋势、管理决策等多种因素的影响。

问答坊 | AI 解惑

单片机C程序设计及应用实例.part4

单片机C程序设计及应用实例.part4…

查看全部问答>

优秀博客赏析-----shicong的博客

谈谈专门的视频压缩芯片 https://home.eeworld.com.cn/?uid-69557-action-viewspace-itemid-12624 DM642硬件设计应该注意的一些问题 https://home.eeworld.com.cn/?uid-69557-action-viewspace-itemid-12557 网站diy失败的原因 https://home.eewo ...…

查看全部问答>

ARM9,ARM7同cortex-m3的数据在RAM的存贮的区别

ARM9 ARM7在RAM中是以字节,字,半字来存贮的,它们是按照一定的关系存放的,所以ARM9 ,ARM7可以把变量以字和半字来存取的。这样会浪费一个些空,具体浪费多大要根据指令情况而定,而CORTEX-M3就不是这样,而是按照无关联组织的,自由的存放,而在 ...…

查看全部问答>

申请LPC1114开发板

只要是不涉及公司机密的一切皆可以分享。…

查看全部问答>

有偿求助嵌入式技术:

受友人之托,发此求助内容:有效期至2010年4月25日 Linux下用S3C2440实现对IIC器件(如IIC的AD转换芯片)、SPI器件(如SPI的AD转换芯片)、GPIO(如LED数码管、矩阵键盘)等的读取和控制;以及LPC2440芯片内部定时器和中断系统及串口等控制,要求 ...…

查看全部问答>

高清TDS1012B-SC彩屏示波器(俗称“熊猫”)拆解图,懂行的高人看看好在何处?

我们实验室买回的新设备之一,泰克的,比国产货贵一些。 手痒痒,拆了再说,因没贴封条,据说仍能保修。 想看看它好在哪些方面,怎么达到每通道1GS/s采样率?盼大虾指点。图太多,整合成了PDF格式,见谅!…

查看全部问答>

请问有没有集成了蓝牙功能的单片机?

RT,有一个项目需要最终的PCB面积越小越好,因此问问有没有自带蓝牙功能的单片机。…

查看全部问答>

学习计算机硬件究竟要学习什么书呢

我是一名大二学生,进入大学后,一直是软件方面的东西学的比较多,现在感觉自己到了一个瓶颈地带,硬件方面的知识奇缺,而且学校开的硬件课太少了,自学的话又力不从心不知从何学起。哪位大侠能帮助小弟指点迷津,系统介绍一下学习硬件书籍的顺序呢…

查看全部问答>

正常启动模式下JTAG引脚怎么连接?

我在使用5410开发,采用Flash启动,现在系统上电启动总是不正常,第一次启动需要拔插电源插头才能工作,我怀疑是不是JTAG口引脚接法不对造成的,现在JTAG口是按照EVM板连接的,不知道是不是这个问题,请问还有什么PIN脚需要注意的,谢谢!…

查看全部问答>

LM3S8962 FTDI 驱动的问题

记得之前我用 LM3S8962 开发的时候,复位不会导致 USB 失去连接的,不知道为什么今天一复位 USB 就要重新连接一次,而且时好时坏,而且串口调试助手收不到数据且总是导致它死掉,必须用任务管理器才能关掉,这个问题有没有谁遇到过,大家讨论下有没 ...…

查看全部问答>