找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机八路抢答器proteus仿真图及C语言源代码

[复制链接]
跳转到指定楼层
楼主
51单片机做的八路抢答器仿真原理图:


单片机c语言源代码如下:
  1. //名称:八路抢答器
  2. //功能:主持人按下按键开始抢答,此时抢答灯闪烁
  3. //十秒内抢答,如果没有抢答的则直接复位
  4. //如果有人抢答成功,则其他人抢答无效,60s内答完超过60s自动复位
  5. //回答期间抢答灯常亮,回答的人方灯闪烁,直到回答完毕,灯常亮表明回答有效
  6. //如果超过60s自动复位,回答结束主持人打开按键,复位。
  7. #include<reg51.H>

  8. sbit Presenter=P2^0;
  9. sbit K=P3^2;
  10. bit Presenter_flag=0,flag;//主持人按键标志位,仅允许一个数据通过标志位
  11. unsigned char Timer=0,i;  //时间标志
  12. unsigned char ren=0xff;
  13. bit x=0;
  14. void System_Init();
  15. void System_Rest();
  16. void main()
  17. {
  18.    System_Init();
  19.   while(1)
  20.   {
  21.   if(Presenter_flag)        //主持人按键按下时开始系统
  22.   {
  23.         K=1;
  24.         if(K==1)         //主持人按键起开
  25.         {break;
  26.         Presenter_flag=0;
  27.         }
  28.   }
  29.   else
  30.   System_Rest();
  31.   }
  32. }
  33. void System_Init()
  34. {
  35.   EA=1;                         //打开中断
  36.   EX0=1;
  37.   IT0=1;
  38.   TMOD=0x01;
  39.   ET0=1;
  40.   TH0=(65535-50000)/256;   //50ms
  41.   TL0=(65535-50000)%256;
  42.   Presenter=0;
  43.   TR0=0;
  44. }
  45. void System_Rest()
  46. {
  47.   P0=0xff;         //复位设置:在主持人按键起开或者,抢答时间超过10s或者答题时间超过60s
  48.   P1=0xff;
  49.   TR0=0;
  50.   Presenter=0;
  51.   flag=1;
  52.   i=0;
  53.   Timer=0;
  54. }
  55. void into() interrupt 0
  56. {
  57.   Presenter_flag=1;//主持人按键按下
  58.   TR0=1;
  59. }
  60. void Timer0() interrupt 1
  61. {
  62.   TH0=(65535-50000)/256;
  63.   TL0=(65535-50000)%256;
  64.   i++;
  65.   if(i==20)                                   //1s钟
  66.   {
  67.     i=0;
  68.     Timer++;
  69.         P1=0xff;
  70.         if((Timer<10)&&(P1==0xff)&&(flag==1))         //10s抢答时间,10s内如果无人抢答则复位
  71.         {
  72.           Presenter=~Presenter;                //抢答指示灯闪烁
  73.         }
  74.         else if((Timer>=10)&&(P1==0xff)&&(flag==1))
  75.         {
  76.           Presenter_flag=0;
  77.           Timer=0;
  78.           i=0;
  79.         }
  80.         P1=0xff;
  81.         if((Timer<=60)&&(P1!=0xff)&&(flag==1)) //答题时间,60s没答完则复位
  82.         {
  83.           ren=P1;
  84.           Presenter=1;
  85.           flag=0;
  86.         }
  87.          if(flag==0)
  88.           {
  89.             if(x==0)
  90.                 {x=1;P0=0xff;}
  91.                 else if(x==1)
  92.                 {x=0;P0=ren;}
  93.           }
  94.           if((flag==0)&&(P1==0xff))
  95.                 {P0=ren;TR0=0;flag=1;}
  96.         if((Timer>60)&&(P1!=0xff))
  97.         


  98. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


抢答器的仿真工程文件和源代码下载:
八路抢答器.zip (72.99 KB, 下载次数: 65)

评分

参与人数 2黑币 +55 收起 理由
qq964404188 + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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