⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 标准 八路.lst

📁 亲测:基于51单片机的八路抢答器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   标准_八路                                                             04/21/2009 17:07:28 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 标准_八路
OBJECT MODULE PLACED IN 标准 八路.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 标准 八路.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include        <reg52.h>
   2          #include        <intrins.h>
   3          code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
   4                                                          0xf8,0x80,0x90};
   5          uchar i;
   6          uchar   flag1,flag2,flag3,flag3_1,flag6,flag6_1,flag4,flag7,flag8,flag9; //flag1为抢答标志
   7                                                                          //flag2为显示标志
   8                                                                          //flag3为中断次数标志
   9                                                                          //flag4为键值标志
  10                                                                          //flag5为答题标志
  11                                                                          //flag6为中断1次数标志
  12          uchar   miao,fen,key,key2;
  13          uchar   fenzhi=1;
  14          uchar   dashi=1;
  15          uchar   qiangshi=0;
  16          uchar   fen1,fen2,fen3,fen4,fen5,fen6,fen7,fen8;
  17          sbit haoce=P2^7;
  18          sbit jishice=P2^4;
  19          sbit fenshi=P2^6;
  20          sbit fenge=P2^5;
  21          sbit beep=P3^6;
  22          uchar   keyscan();
  23          uchar   nokeyscan();
  24          void    display(uchar);
  25          uchar   start();
  26          void    init0();
  27          void    init1();
  28          void    disshi(uchar);
  29          void    disfen(uchar);
  30          void    discha(uchar);
  31          void    fenshu();
  32          uchar   jifen();
  33          void    chaxun();
  34          void    disset(uchar,uchar,uchar);
  35          void    set();
  36          void    qiangda();
  37          void main()
  38          {
  39   1              while(1)
  40   1              {       
  41   2                      chaxun();
  42   2                      set();
  43   2                      qiangda();
  44   2              }
  45   1      }
  46          void    init0()
  47          {
  48   1              TMOD=0X01;
  49   1              TH0=(65536-45872)/256;//T0初值,50ms中断一次
  50   1              TL0=(65536-45872)%256;
  51   1              EA=1;
  52   1              ET0=1;
  53   1              TR0=1;
  54   1      }
  55          void    init1()
C51 COMPILER V8.02   标准_八路                                                             04/21/2009 17:07:28 PAGE 2   

  56          {
  57   1              TMOD=0X10;
  58   1              TH1=(65536-45872)/256;//T1初值,50ms中断一次
  59   1              TL1=(65536-45872)%256;
  60   1              EA=1;
  61   1              ET1=1;
  62   1              TR1=1;
  63   1      }
  64          void time0() interrupt 1 
  65          {
  66   1              TR1=0;
  67   1              flag3++;
  68   1              TH0=(65536-45872)/256;//T0初值,50ms中断一次
  69   1              TL0=(65536-45872)%256;
  70   1              if(flag3==201)            //10秒开始倒计时
  71   1              {
  72   2                      flag3_1++;
  73   2                      flag3=0;
  74   2              }
  75   1              if(flag3_1==qiangshi)//qiangshi为1时是10s;
  76   1              {
  77   2      
  78   2                      switch(flag3)   //10秒抢答时间
  79   2                      {
  80   3                              case    0x14:miao=9;disshi(miao);break;
  81   3                              case    0x28:miao=8;disshi(miao);break;
  82   3                              case    0x3c:miao=7;disshi(miao);break;
  83   3                              case    0x50:miao=6;disshi(miao);break;
  84   3                              case    0x64:miao=5;disshi(miao);break;
  85   3                              case    0x78:miao=4;disshi(miao);break;
  86   3                              case    0x8c:miao=3;disshi(miao);break;
  87   3                      case    0xa0:miao=2;disshi(miao);break;
  88   3                              case    0xb4:miao=1;disshi(miao);break;
  89   3                              case    0xc8:miao=0;disshi(miao);
  90   3                                              for(i=20;i>0;i--)
  91   3                                              {
  92   4                                                      beep=~beep;
  93   4                                                      delay(50);
  94   4                                              }
  95   3                                              beep=1;
  96   3                                              flag2=1;
  97   3                                              TR0=0;
  98   3                                              jishice=1;
  99   3                                              break;
 100   3              }
 101   2              }       
 102   1      }
 103          void time1() interrupt 3 
 104          {
 105   1              flag6++;
 106   1              TR0=0;
 107   1              TH1=(65536-45872)/256;//T0初值,50ms中断一次
 108   1              TL1=(65536-45872)%256;
 109   1              if(flag6==201)            //20秒答题时间,10秒开始倒计时
 110   1              {
 111   2                      flag6_1++;
 112   2                      flag6=0;
 113   2              }
 114   1              if(flag6_1==dashi)//dashi为1时是10s;
 115   1              { 
 116   2                      switch(flag6)
 117   2                      {
C51 COMPILER V8.02   标准_八路                                                             04/21/2009 17:07:28 PAGE 3   

 118   3                      case    0x14:miao=9;disshi(miao);break;
 119   3                      case    0x28:miao=8;disshi(miao);break;
 120   3                      case    0x3c:miao=7;disshi(miao);break;
 121   3                      case    0x50:miao=6;disshi(miao);break;
 122   3                      case    0x64:miao=5;disshi(miao);break;
 123   3                      case    0x78:miao=4;disshi(miao);break;
 124   3                      case    0x8c:miao=3;disshi(miao);break;
 125   3                  case        0xa0:miao=2;disshi(miao);break;
 126   3                      case    0xb4:miao=1;disshi(miao);break;
 127   3                      case    0xc8:miao=0;disshi(miao);
 128   3                                              for(i=20;i>0;i--)
 129   3                                              {
 130   4                                                      beep=~beep;
 131   4                                                      delay(50);
 132   4                                              }
 133   3                                              beep=1;
 134   3                                              flag1=0;
 135   3                                              TR1=0;
 136   3                                              fenshu();
 137   3                                              break;
 138   3                      }
 139   2              }       
 140   1      }
 141          void    qiangda()
 142          {
 143   1              if(start()==1)//等待抢答开始键按下
 144   1                      {
 145   2                              flag3=0;
 146   2                              flag3_1=0;
 147   2                              flag6=0;
 148   2                              flag6_1=0;
 149   2                              init0();
 150   2                              if(flag8==1)
 151   2                              {
 152   3                                      flag8=0;
 153   3                                      flag2=0;        
 154   3                              }
 155   2                              while(!flag2)//判断是否已有人抢答
 156   2                              {
 157   3                                      flag4=keyscan();
 158   3                                      if(flag4!=0)   //有人按下才显示
 159   3                                      {
 160   4                                              display(flag4);//显示
 161   4                                      }
 162   3                              }
 163   2                      }
 164   1      }
 165          uchar   keyscan()//带消抖的键盘扫描
 166          {
 167   1              uchar   temp;
 168   1              P1=0xfe;
 169   1              temp=P1;
 170   1              temp=temp&0xf0;
 171   1              if(temp!=0xf0)
 172   1              {
 173   2                      delay(10);
 174   2                      temp=P1;
 175   2                      temp=temp&0xf0;
 176   2                      if(temp!=0xf0)
 177   2                      {
 178   3                              temp=P1;
 179   3                              switch(temp)
C51 COMPILER V8.02   标准_八路                                                             04/21/2009 17:07:28 PAGE 4   

 180   3                              {
 181   4                                      case    0xee:key=1;break;
 182   4                                      case    0xde:key=2;break;
 183   4                                      case    0xbe:key=3;break;
 184   4                                      case    0x7e:key=4;break;
 185   4                                      default:        key=0;
 186   4                              }
 187   3                              while(temp!=0xf0)  //等待释放
 188   3                              {
 189   4                                      temp=P1;
 190   4                                      temp=temp&0xf0;         
 191   4                              }
 192   3                      }
 193   2              }
 194   1              P1=0xfd;
 195   1              temp=P1;
 196   1              temp=temp&0xf0;
 197   1              if(temp!=0xf0)
 198   1              {
 199   2                      delay(10);
 200   2                      temp=P1;
 201   2                      temp=temp&0xf0;
 202   2                      if(temp!=0xf0)
 203   2                      {
 204   3                              temp=P1;
 205   3                              switch(temp)
 206   3                              {
 207   4                                      case    0xed:key=5;break;
 208   4                                      case    0xdd:key=6;break;
 209   4                                      case    0xbd:key=7;break;
 210   4                                      case    0x7d:key=8;break;
 211   4                                      default:        key=0;
 212   4                              }
 213   3                              while(temp!=0xf0)  //等待释放
 214   3                              {
 215   4                                      temp=P1;
 216   4                                      temp=temp&0xf0;         
 217   4                              }
 218   3                      }
 219   2              }
 220   1              return key;
 221   1      }
 222          uchar   nokeyscan()//无消抖的键盘扫描
 223          {
 224   1              uchar   temp;
 225   1              P1=0xfe;
 226   1              temp=P1;
 227   1              temp=temp&0xf0;
 228   1              if(temp!=0xf0)
 229   1              {
 230   2                              temp=P1;
 231   2                              switch(temp)
 232   2                              {
 233   3                                      case    0xee:key2=1;break;
 234   3                                      case    0xde:key2=2;break;
 235   3                                      case    0xbe:key2=3;break;
 236   3                                      case    0x7e:key2=4;break;
 237   3                                      default:        key2=0;
 238   3                              }
 239   2                      
 240   2              }
 241   1              P1=0xfd;
C51 COMPILER V8.02   标准_八路                                                             04/21/2009 17:07:28 PAGE 5   

 242   1              temp=P1;
 243   1              temp=temp&0xf0;
 244   1              if(temp!=0xf0)
 245   1              {
 246   2                              temp=P1;
 247   2                              switch(temp)
 248   2                              {
 249   3                                      case    0xed:key2=5;break;
 250   3                                      case    0xdd:key2=6;break;
 251   3                                      case    0xbd:key2=7;break;
 252   3                                      case    0x7d:key2=8;break;
 253   3                                      default:        key2=0;
 254   3                              }
 255   2              }
 256   1              return key2;
 257   1      }
 258          void    display(uchar num)//显示函数
 259          {
 260   1              TR0=0;
 261   1              flag2=1;
 262   1              while(start()!=2)//等待答题开始键按下
 263   1              {
 264   2                      haoce=0;
 265   2                      jishice=1;
 266   2                      P0=table[num];
 267   2                      delay(10);
 268   2                      haoce=1;
 269   2                      jishice=0;
 270   2                      P0=table[10-miao];
 271   2                      delay(10);
 272   2              }
 273   1              jishice=1;
 274   1              haoce=1;
 275   1              init1();
 276   1              while(start()!=3);
 277   1              TR1=0;
 278   1              fenshu();
 279   1      }
 280          void    disshi(uchar    num1)//显示倒计时
 281          {
 282   1              jishice=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -