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

📄 main.lst

📁 我自己写的一个C51双机通信的程序,是一个双人猜数字的小游戏,使用方法见压缩包里的键盘手册
💻 LST
📖 第 1 页 / 共 2 页
字号:
 211   4                              {
 212   5                                      c=nbit;
 213   5                                      do 
 214   5                                      {
 215   6                                              m[c-1]=n[c-1];
 216   6                                              c--;
 217   6                                      }
 218   5                                      while (c>0);
 219   5                                      write7279(UNDECODE+5,0x48);
 220   5                                      SBUF=0x40;
 221   5                                      delay10ms(10);
 222   5                                      mnset=1;
 223   5                                      if (ynset==128) sok=1;
 224   5                              }
 225   4                      }
 226   3                      if (nbit==0 && a==1 && num<6) //如果要猜的位数还没设,就把输入的值给nbit
 227   3                      {
 228   4                              nbit=num;
 229   4                              nn=num;
 230   4                              SBUF=0x20+nbit;
 231   4                              delay10ms(10);                  
 232   4                              send_byte(CMD_RESET);
 233   4                              write7279(UNDECODE+5, 0x01);
 234   4                              write7279(DECODE0+6, nbit+ynset);
 235   4                              nok=1;
 236   4                      };              
 237   3              }
 238   2              }
 239   1              
 240   1              if (key_number==0x1c) //投降认输
 241   1              {
C51 COMPILER V7.50   MAIN                                                                  04/07/2006 23:02:33 PAGE 5   

 242   2                      send_byte(CMD_RESET);
 243   2                      SBUF=0x1f;                                              
 244   2                      delay10ms(10);
 245   2                      start=0;
 246   2                      nbit=0;
 247   2                      nbset=0;
 248   2                      mnset=0;
 249   2                      ynset=0;
 250   2                      agree=0;
 251   2                      request=0;
 252   2                      nok=0;
 253   2                      sok=0;
 254   2                      write7279(DECODE0+3, 0x00);
 255   2              }
 256   1              while (!key);//等待键盘扫描结束以便输入下个数值 
 257   1      }
 258          
 259          //**********************串口中断*****************************************
 260          //***               进行两机间的数据交换                             ****
 261          //***********************************************************************
 262          void serial(void) interrupt 4
 263          {
 264   1              signed char h,l,i,j,z;
 265   1              if (RI==1)
 266   1              {
 267   2                      h=SBUF>>4;//对收到的数拆分,高位h为标识符,低位l为对应的数值
 268   2                      l=SBUF&0x0f;
 269   2                      if (h==1 && l!=0x0f && start!=1) //h=1是否开始,或投降
 270   2                      {
 271   3                              if (request==0) request=1;
 272   3                              else agree=1;
 273   3                              send_byte(CMD_RESET);
 274   3                              write7279(DECODE0+6,1);
 275   3                              if (request==1 && agree==1)
 276   3                              {
 277   4                                      write7279(UNDECODE+6, 0x01);
 278   4                                      start=1;
 279   4                              }
 280   3                      }
 281   2                      if (h==1 && l==0x0f)//投降
 282   2                      {
 283   3                              start=0;
 284   3                              nbit=0;
 285   3                              nbset=0;
 286   3                              mnset=0;
 287   3                              ynset=0;
 288   3                              agree=0;
 289   3                              request=0;
 290   3                              nok=0;
 291   3                              sok=0;
 292   3                              send_byte(CMD_RESET);
 293   3                              write7279(DECODE0+3, 0x01);
 294   3                              //
 295   3                      }
 296   2                      if (start==1)//双方就绪,判断收到的数
 297   2                      {       
 298   3                              if (h==2) //h=2 要猜的位数
 299   3                              {
 300   4                                      nbit=l;
 301   4                                      nn=nbit;
 302   4                                      nbset=1;                                                                
 303   4                                      write7279(DECODE0+6, nbit+ynset);                               
C51 COMPILER V7.50   MAIN                                                                  04/07/2006 23:02:33 PAGE 6   

 304   4                                      write7279(UNDECODE+5, 0x01);
 305   4                                      nok=1;
 306   4                              }
 307   3      
 308   3                              if (h==4) //h=3 对方是否已设定好要让你猜的数组
 309   3                              {
 310   4                                      
 311   4                                      ynset=128;
 312   4                                      write7279(DECODE0+6, nbit+ynset);
 313   4                                      if (mnset==1) sok=1;
 314   4                              }
 315   3                          if (h==5) //h=5 对方发过来的要让你验证的数组
 316   3                              {
 317   4                                      y[nn-1]=l;
 318   4                                      nn--;
 319   4                                      if (nn==0) //收完了对方发过来的数组,跟自己设好的数组对比一下
 320   4                                      {
 321   5                                              nn=nbit;                                        
 322   5                                              guess=0;
 323   5                                              write7279(UNDECODE+5, 0x48);
 324   5                                              z=0;
 325   5                                              r2[1]=0;
 326   5                                              r2[0]=0;
 327   5                                              for (i=nbit-1;i>=0;i--) 
 328   5                                              {
 329   6                                                      if (y[i]==m[i]) 
 330   6                                                      r2[1]++;
 331   6                                              }
 332   5                                      
 333   5                                              for (i=nbit-1;i>=0;i--)
 334   5                                              {
 335   6                                                      for (j=0;j<nbit;j++)
 336   6                                                      if (y[i]==m[j]) 
 337   6                                                      z++;
 338   6                                              }
 339   5                                              r2[0]=z-r2[1];  
 340   5                                              SBUF=0x60+r2[1];//返回对方猜对的个数
 341   5                                              delay10ms(10);
 342   5                                              SBUF=0x60+r2[0];
 343   5                                              delay10ms(10);
 344   5                                              if (r2[1]==nbit) //如果全对,已方认输
 345   5                                              {
 346   6                                                      SBUF=0x1f;
 347   6                                                      delay10ms(10);
 348   6                                                      start=0;
 349   6                                                      nbit=0;
 350   6                                                      nbset=0;
 351   6                                                      mnset=0;
 352   6                                                      ynset=0;
 353   6                                                      agree=0;
 354   6                                                      request=0;
 355   6                                                      nok=0;
 356   6                                                      sok=0;
 357   6                                                      send_byte(CMD_RESET);
 358   6                                                      write7279(DECODE0+3, 0x00);
 359   6                                              }                                       
 360   5                                      }
 361   4                              }
 362   3                              if (h==6) //h=6 对方发来的结果,即你猜对了多少个
 363   3                              {
 364   4                                      r1[r-1]=l;
 365   4                                      r--;
C51 COMPILER V7.50   MAIN                                                                  04/07/2006 23:02:33 PAGE 7   

 366   4                                      if (r==0)
 367   4                                      {
 368   5                                              r=2;
 369   5                                              a=nbit+1;
 370   5                                              n[0]=0;
 371   5                                              n[1]=0;
 372   5                                              n[2]=0;
 373   5                                              n[3]=0;
 374   5                                              n[4]=0;
 375   5                                              write7279(UNDECODE+4,0x00);
 376   5                                              write7279(DECODE1,0x0b);
 377   5                                              write7279(DECODE0+1,r1[0]);
 378   5                                              write7279(DECODE1+2,0x0a);
 379   5                                              write7279(DECODE0+3,r1[1]);
 380   5                                      }
 381   4                              }
 382   3                      }
 383   2              RI=0;
 384   2              }
 385   1              if (TI==1) //退出中断
 386   1              TI=0;
 387   1              
 388   1      
 389   1      }
 390          
 391          //**********************主函数************************************
 392          //
 393          //***************************************************************
 394          void main()
 395          {
 396   1              unsigned int tt;
 397   1                      for (tmr=0;tmr<0x2000;tmr++);//测试
 398   1                      send_byte(CMD_RESET);
 399   1              send_byte(CMD_TEST);
 400   1      
 401   1              for (tt=0;tt<2;tt++) {delay10ms(100);}  
 402   1              send_byte(CMD_RESET);
 403   1              
 404   1              init();//初始化
 405   1              write7279(DECODE0+6,0); 
 406   1              while(1)
 407   1              {       
 408   2      
 409   2      
 410   2      
 411   2              }
 412   1      }
 413          
 414          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1822    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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