找回密码
 立即注册

QQ登录

只需一步,快速开始

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

8人智力抢答器proteus仿真及单片机源码

[复制链接]
跳转到指定楼层
楼主
给51黑电子论坛的朋友们分享一个用51单片机做的8人智力抢答器proteus仿真,下面是原理图:


抢答器的所有制作资料下载:
8人抢答.zip (43.09 KB, 下载次数: 29)


源程序:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define disp_c P0
  5. #define disp_s P3
  6. #define disp_o P2
  7. #define player P1
  8. #define ON 1
  9. #define OFF 0
  10. sbit Juge1=P3^0;
  11. sbit Juge2=P3^1;
  12. sbit Light=P3^7;
  13. sbit Warm=P3^4;
  14. unsigned char key;
  15. unsigned char Num50=0,second,Num,Num1,count_down=29,over_time=99;
  16. unsigned char disdata1,disdata2,disbuf[3];
  17. unsigned char disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


  18. void keyboard(void) //键盘识别
  19. {
  20.    key=0;
  21.    if(Num==0)
  22.    {
  23.       if(player!=0xff)
  24.         {
  25.          Warm=ON;
  26.          Light=OFF;
  27.          switch(player)
  28.          {
  29.          case 0xfe:key=1;Light=OFF;break;
  30.          case 0xfd:key=2;Light=OFF;break;
  31.          case 0xfb:key=3;Light=OFF;break;
  32.          case 0xf7:key=4;Light=OFF;break;
  33.          case 0xef:key=5;Light=OFF;break;
  34.          case 0xdf:key=6;Light=OFF;break;
  35.          case 0xbf:key=7;Light=OFF;break;
  36.          case 0x7f:key=8;Light=OFF;break;
  37.          default:key=0;Light=ON;break;
  38.          }
  39.          Num=1;
  40.         }
  41.     }
  42. }




  43. void display(void) interrupt 1    //显示程序
  44. {
  45.    TH0=(65536-50000)/256;
  46.    TL0=(65536-50000)%256;
  47.    Num50++;
  48.    if(Num50==20)
  49.    {
  50.       Num50=0;second--;
  51.       disdata2=second;
  52.       disbuf[0]=disdata2/10;
  53.       disbuf[1]=disdata2%10;
  54.       disbuf[2]=disbuf[1]*16+disbuf[0];
  55.       P0=disbuf[2];
  56.       if(second==0)  {TR0=0;  Warm=OFF;Light=ON;}
  57.    }
  58. }

  59. void display2 (void) interrupt 3
  60. {
  61.    TH0=(65536-50000)/256;
  62.    TL0=(65536-50000)%256;
  63.    Num50++;
  64.    if(Num50==20)
  65.    {
  66.       Num50=0;second--;
  67.       disdata2=second;
  68.       disbuf[0]=disdata2/10;
  69.       disbuf[1]=disdata2%10;
  70.       disbuf[2]=disbuf[1]*16+disbuf[0];
  71.       P0=disbuf[2];
  72.       if(second==0)
  73.            {
  74.            TR1=0;  Warm=OFF;Light=ON;
  75.            }
  76.    }
  77. }


  78. void main()       //主程序
  79. {
  80.    EA=1;
  81.    ET0=1;ET1=1;
  82.    TMOD=0x11;
  83.    TH0=(65536-50000)/256;
  84.    TL0=(65536-50000)%256;
  85.    TH1=(65536-50000)/256;
  86.    TL1=(65536-50000)%256;
  87.    Num1=0;P2=0;Light=OFF;
  88.    while(1)
  89.      {
  90.         if(Juge1==0)
  91.         {while(Juge1==0);P2=0;second=30;TR0=1;TR1=0;Num=0;Num1=1;Light=OFF;}
  92.         if(Juge2==0)
  93.         {while(Juge2==0);TR0=0;TR1=1;second=100;}
  94.         keyboard();
  95.         if(key!=0)
  96.         {if(Num1==1) {P2=disp[key];TR0=0;second=30;TR1=1;}}
  97.      }
  98. }
复制代码



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

使用道具 举报

沙发
ID:190056 发表于 2017-4-22 22:18 | 只看该作者
LZ有PCB图吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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