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

📄 text7.lst

📁 单片机AT89S52控制MFRC500以及MAX485实现读取IC卡信息和多机通信功能
💻 LST
📖 第 1 页 / 共 2 页
字号:

 242          uchar Receive()
 243          {
 244   1              uchar tmp,j=0,i;
 245   1              DE = 1;
 246   1              RE = 1;
 247   1              RI = 0;
 248   1              while ((!RI)&&j<200)
 249   1              {
 250   2                      for(i=0;i<50;i++);
 251   2                      j++;
 252   2              }
 253   1              if(RI)
 254   1              {
 255   2                      tmp = SBUF;
 256   2                      RI=0;
 257   2                      return tmp;     
 258   2              }
 259   1              else
 260   1              return 0xff;            
 261   1      } 
 262                  
 263          /**********延时1ms程序*************/
 264          void Delay_ms(uint count)
 265          {
 266   1              uchar i,j;
 267   1              for(;count>0;count--)
 268   1              { 
 269   2                      for(j=2;j>0;j--)
 270   2                      for(i=0;i<248;i++)
 271   2                              ;
 272   2              }
 273   1      } 
 274          
 275          /**********修改卡数据*************/
 276          void dataprocess()
 277          {
 278   1              uchar k;
 279   1              if(DATA[2]==0x0A)
 280   1              {
 281   2                      DATA[2]=0x05;     //修改为还车状态
 282   2              }               
 283   1              else if(DATA[2]==0x05)                                            //如果是还车状态的话,先扣费,再转为取车状态
 284   1              {               
 285   2                      if(DATA[0]!=0x00)
 286   2                      {
 287   3                              DATA[0]=DATA[0]-1;
 288   3                              DATA[2]=0x0A;
 289   3                      }
 290   2                      else
 291   2                              bee=1;                                 //如果余额为0,蜂鸣器长鸣
 292   2                      
 293   2              }               
 294   1              for(k=0;k<3;k++)
 295   1              {
 296   2                      WRITEDATA[4+k]=DATA[k];
 297   2              }
 298   1              if(DATA[2]==0x0A)
 299   1              {
 300   2                      WRITEDATA[20]=0x97^DATA[0]+0x80;
 301   2              }
 302   1              else if(DATA[2]==0x05)
 303   1              {
C51 COMPILER V7.50   TEXT7                                                                 04/10/2009 11:52:04 PAGE 6   

 304   2                      WRITEDATA[20]=0x98^DATA[0]+0x80;
 305   2              }
 306   1      }
 307          
 308          /**********液晶显示余额及卡状态*************/
 309          void Display()
 310          {
 311   1              Account[10]=DATA[0]/100%10+0x30;
 312   1              Account[11]=DATA[0]/10%10+0x30;
 313   1              Account[12]=DATA[0]%10+0x30;
 314   1          Borrow_bicycle[4]=addr/100%10+0x30;
 315   1              Borrow_bicycle[5]=addr/10%10+0x30;
 316   1              Borrow_bicycle[6]=addr%10+0x30;
 317   1              Return_bicycle[4]=addr/100%10+0x30;
 318   1              Return_bicycle[5]=addr/10%10+0x30;
 319   1              Return_bicycle[6]=addr%10+0x30;
 320   1              if(DATA[2]==0x05)
 321   1              {       
 322   2                      LCD_Wcmd ( 0x01 );
 323   2                      OutWord(0x88, 8, Account); 
 324   2                      OutWord(0x90, 8, Borrow_bicycle);
 325   2              }
 326   1              else if(DATA[2]==0x0a)
 327   1              {
 328   2                      LCD_Wcmd ( 0x01 );
 329   2                      OutWord(0x88, 8, Account); 
 330   2                      OutWord(0x90, 8, Return_bicycle);
 331   2              }
 332   1              Delay_ms(200);
 333   1              Delay_ms(200);
 334   1      }
 335          void LCD_Busy ()                                     /*判断lcd是否处于忙状态,是返回1,否返回0*/
 336          {                          
 337   1         
 338   1              lcd_port = 0xff;
 339   1              RS = 0;
 340   1          RW = 1;
 341   1              EN = 1;
 342   1              while (rd);
 343   1              EN = 0;
 344   1      } 
 345          
 346          void LCD_Wcmd ( uchar cmd )             /*对lcd指令寄存器写显示控制命令字*/
 347          {                          
 348   1              LCD_Busy();
 349   1              RS = 0;
 350   1              RW = 0;
 351   1          lcd_port = cmd;                                     /*写指令到端口上*/ 
 352   1              EN = 1;
 353   1              _nop_ ();       
 354   1          EN = 0;  
 355   1      }
 356          
 357          void LCD_Wdat ( uchar dat )                     /*对lcd数据寄存器写显示数据*/ 
 358          {                          
 359   1              LCD_Busy();
 360   1          RS = 1;
 361   1          RW = 0;
 362   1          lcd_port = dat;                                     /*写数据到端口上*/  
 363   1          EN = 1;
 364   1              _nop_ ();
 365   1          EN = 0; 
C51 COMPILER V7.50   TEXT7                                                                 04/10/2009 11:52:04 PAGE 7   

 366   1      }
 367          
 368          void LCD_Init ()                                /*lcd初始化*/
 369          {     
 370   1              LCD_Wcmd ( 0x30 );                      /*功能设置*/     
 371   1              LCD_Wcmd ( 0x01 );                              /*清屏*/ 
 372   1          LCD_Wcmd ( 0x0c );                  /*显示开,光标关,光标闪烁关*/   
 373   1              OutWord(0x80, 8, Wellcome);
 374   1              OutWord(0x88, 8, Unit);
 375   1              OutWord(0x90, 8, Design);
 376   1              OutWord(0x98, 8, Time);
 377   1              Delay_ms(200);
 378   1              Delay_ms(200);
 379   1      }
 380          
 381          void OutWord( uchar place, uchar unit, uchar charcode[] )                               /*输出中文或字符*/
 382          {
 383   1              uchar i;
 384   1              LCD_Wcmd ( place );
 385   1              for ( i=0; i < unit*2; i++)
 386   1                      LCD_Wdat ( charcode[i] );
 387   1      }
 388          
 389          void Transmit()
 390          {
 391   1              uchar tmp,i;
 392   1              P1= 0xFF;
 393   1              addr=P1;
 394   1              tmp = addr-1;
 395   1              i=0;
 396   1              while(tmp!=addr)                        
 397   1              {
 398   2                      uint j=0;
 399   2                      i++;
 400   2                      DE = 1;
 401   2                      RE = 1;
 402   2                      /* 发送从机地址 */
 403   2                      TI = 0;
 404   2                      TB8 = 1;                                // 发送地址帧   
 405   2                      SBUF = addr;
 406   2                      while(!TI);
 407   2                      TI = 0;
 408   2                      DE = 0;
 409   2                      RE = 0;
 410   2                      RI=0;
 411   2                      /* 接收从机应答 */
 412   2                      while ((!RI)&&j<1000)
 413   2                      {
 414   3                              j++;
 415   3                      }
 416   2                      if(RI)
 417   2                      {
 418   3                              tmp = SBUF;
 419   3                              RI=0;
 420   3                      }
 421   2                      else if(i==10)
 422   2                      {
 423   3                              tmp=addr;
 424   3                              i=0;    
 425   3                      }
 426   2              }
 427   1      
C51 COMPILER V7.50   TEXT7                                                                 04/10/2009 11:52:04 PAGE 8   

 428   1              /* 发送数据并接收校验信息,如果接收到SUCC,表示从机接收成功,否则将重新发送该组数据 */  
 429   1              tmp = ERR;
 430   1              i=0;
 431   1              while(tmp!=SUCC)
 432   1          {
 433   2                      uint j=0;
 434   2                      i++;
 435   2                      DE = 1;
 436   2                      RE = 1;
 437   2                      TI = 0;
 438   2                      TB8 = 0;                                
 439   2                      SBUF =DATA[2];
 440   2                      while(!TI);
 441   2                      TI = 0;                 // 发送数据     
 442   2                      DE = 0;
 443   2                      RE = 0;
 444   2                      RI = 0;
 445   2                      while ((!RI)&&j<1000)
 446   2                      {
 447   3                              j++;
 448   3                      }
 449   2                      if(RI)
 450   2                      {
 451   3                              tmp     = SBUF;
 452   3                              if(tmp==SUCC)
 453   3                              {       
 454   4                                      Transmit_f=1;   
 455   4                              }
 456   3                              else if(tmp==ERR)
 457   3                              {
 458   4                                      tmp=SUCC;
 459   4                                      LCD_Wcmd(0x01);
 460   4                                      OutWord(0x88, 8, Transmit_error);
 461   4                              //      Delay_ms(1000);
 462   4                              }
 463   3                              RI = 0;
 464   3                      }
 465   2                      else if(i==10)
 466   2                      {
 467   3                              tmp=SUCC;
 468   3                              i=0;
 469   3                              LCD_Wcmd(0x01);
 470   3                              OutWord(0x88, 8, Transmit_error);
 471   3              //              Delay_ms(1000);
 472   3                      }       
 473   2                      
 474   2              }       
 475   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1605    ----
   CONSTANT SIZE    =    111    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      13
   IDATA SIZE       =     96    ----
   BIT SIZE         =      1       5
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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