找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2275|回复: 0
打印 上一主题 下一主题
收起左侧

个人找的一个8路抢答器的程序

[复制链接]
跳转到指定楼层
楼主
ID:255232 发表于 2017-11-29 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  • #include<reg51.H>
  • sbit Presenter=P2^0;
  • sbit K=P3^2;
  • bit Presenter_flag=0,flag;//主持人按键标志位,仅允许一个数据通过标志位
  • unsigned char Timer=0,i;  //时间标志
  • unsigned char ren=0xff;
  • bit x=0;
  • void System_Init();
  • void System_Rest();
  • void main()
  • {
  •    System_Init();
  •   while(1)
  •   {
  •   if(Presenter_flag)        //主持人按键按下时开始系统
  •   {
  •         K=1;
  •         if(K==1)         //主持人按键起开
  •         {break;
  •         Presenter_flag=0;
  •         }
  •   }
  •   else
  •   System_Rest();
  •   }
  • }
  • void System_Init()
  • {
  •   EA=1;                         //打开中断
  •   EX0=1;
  •   IT0=1;
  •   TMOD=0x01;
  •   ET0=1;
  •   TH0=(65535-50000)/256;   //50ms
  •   TL0=(65535-50000)%256;
  •   Presenter=0;
  •   TR0=0;
  • }
  • void System_Rest()
  • {
  •   P0=0xff;         //复位设置:在主持人按键起开或者,抢答时间超过10s或者答题时间超过60s
  •   P1=0xff;
  •   TR0=0;
  •   Presenter=0;
  •   flag=1;
  •   i=0;
  •   Timer=0;
  • }
  • void into() interrupt 0
  • {
  •   Presenter_flag=1;//主持人按键按下
  •   TR0=1;
  • }
  • void Timer0() interrupt 1
  • {
  •   TH0=(65535-50000)/256;
  •   TL0=(65535-50000)%256;
  •   i++;
  •   if(i==20)                                   //1s钟
  •   {
  •     i=0;
  •     Timer++;
  •         P1=0xff;
  •         if((Timer<10)&&(P1==0xff)&&(flag==1))         //10s抢答时间,10s内如果无人抢答则复位
  •         {
  •           Presenter=~Presenter;                //抢答指示灯闪烁
  •         }
  •         else if((Timer>=10)&&(P1==0xff)&&(flag==1))
  •         {
  •           Presenter_flag=0;
  •           Timer=0;
  •           i=0;
  •         }
  •         P1=0xff;
  •         if((Timer<=60)&&(P1!=0xff)&&(flag==1)) //答题时间,60s没答完则复位
  •         {
  •           ren=P1;
  •           Presenter=1;
  •           flag=0;
  •         }
  •          if(flag==0)
  •           {
  •             if(x==0)
  •                 {x=1;P0=0xff;}
  •                 else if(x==1)
  •                 {x=0;P0=ren;}
  •           }
  •           if((flag==0)&&(P1==0xff))
  •                 {P0=ren;TR0=0;flag=1;}
  •         if((Timer>60)&&(P1!=0xff))
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表