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

📄 consistency_at24c512.lst

📁 实现几个控制的同步的AT24C512的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 286   1         {
 287   2         SystemError=1;
 288   2         return;
 289   2         }
 290   1      iic_stop(); 
 291   1      iic_start(); 
 292   1      value=AT24c64_address|0x01; //发送器件地址 
 293   1      IICSendByte(value); 
 294   1      check_ACK();
 295   1      if(F0==1)
 296   1         {
 297   2         SystemError=1;
 298   2         return;
 299   2         }
 300   1      i=length-1; 
 301   1      while(i--) 
 302   1      { 
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 6   

 303   2      *pdat=IICReceiveByte(); 
 304   2      slave_ACK();//主应答信号 
 305   2      pdat++; 
 306   2      } 
 307   1      *pdat=IICReceiveByte(); 
 308   1      slave_NOACK();//主不应答信号 
 309   1      iic_stop(); 
 310   1      }
 311          //////////////////////////////////
 312          delay_tt_ms(uchar tt)//延时TTMS
 313          {
 314   1      uchar i;
 315   1      while(tt--)
 316   1      for(i=0;i<125;i++);
 317   1      }
 318           //调速度函数oid ts_key(void)
 319            //调速度函数
 320          void ts_key(void)
 321          {
 322   1       ts=KEY&0xF0;//保留高4位,去掉低4位
 323   1       ts=ts>>4;
 324   1       if (ts==0||ts==15){ts=1;}
 325   1       }
 326          
 327          /*********************延时函数*************
 328          函数原型:void dely(ulint timepara);
 329          功    能:延时等待,参数timepara为延时时间*/
 330          void delay(ulint timepara)
 331          {ulint mpara;
 332   1              mpara=0;
 333   1              do
 334   1          {
 335   2              mpara=mpara+1;
 336   2              }
 337   1              while (mpara!=timepara);
 338   1      }
 339          /*********************延时函数*************
 340          函数原型:void dely(ulint timepara);
 341          功    能:延时等待,参数timepara为延时时间*/
 342          void delays(ulint timepara)
 343          {ulint i;
 344   1              for(i=0;i<timepara;i++)
 345   1              {
 346   2                 ts_key();
 347   2                delay(dpara*ts);//12M ---207---0.010S=10ms
 348   2              }
 349   1      }
 350          
 351          /*********************595数据锁存函数*************
 352          函数原型:void stb_data_595(void);
 353          功    能:595数据锁存*/
 354          void stb_data_595(void)
 355          {   
 356   1              STB_595=0;
 357   1              STB_595=1;
 358   1          delay(5);
 359   1              STB_595=0;
 360   1      }
 361          
 362          /*********************向由低位到高位595发送一个像素的数据函数*************
 363          函数原型:send_byte_lsbtomsb(uint8 bt);
 364          功    能:向595发送一个像素,参数bt为要发送的数据*/
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 7   

 365          void send_3bit_lsbtomsb( uchar bt1)
 366          { 
 367   1          uint i;
 368   1              //SBUF=bt1;
 369   1          //if(h_l)bt1=7-bt1;//判断电平有效形式,h_l=0是高电平有效,h_l=1是低电平有效
 370   1              if(tset==1)
 371   1               {
 372   2      
 373   2              CLK_595 = 0;
 374   2              DQ_595 =0;
 375   2              CLK_595 = 1;
 376   2              }
 377   1          for(i=0;i<3;i++)
 378   1               {
 379   2                   CLK_595 = 0;//将时钟线置低
 380   2                       DQ_595 =(bt1 & 0x01)?1:0;//判断当前位为1还是为0;当为1时将数据线置高;当为0时将数据线置低;
 381   2                   CLK_595 = 1;//将时钟线置高
 382   2                   bt1>>=1;//将当前数据右移一位,准备与0x01进行比较
 383   2           }
 384   1              if(tset==2)
 385   1               {
 386   2              CLK_595 = 0;
 387   2              DQ_595 =0;
 388   2              CLK_595 = 1;
 389   2              }
 390   1      }
 391          /*********************向595发送N个某像素的函数*************
 392          函数原型:void send_n_byte(n,bt);
 393          功    能:向595发送n个bt字节*/
 394          void send_n_3bit(register uint k,uchar bt1)
 395          { while(k!=0) 
 396   1        {send_3bit_lsbtomsb(bt1);
 397   2         k--;
 398   2        }
 399   1      }
 400          
 401          /************************************************************************/
 402          
 403          void low_to_hightbit(uchar num)                               
 404          { 
 405   1         uchar  cor_data;
 406   1         
 407   1          cor_data=(num&0x0f);
 408   1          send_n_3bit(1,cor_data);
 409   1      
 410   1          
 411   1          cor_data=num&0xf0;
 412   1          cor_data=cor_data>>4;
 413   1          send_n_3bit(1,cor_data);
 414   1      }
 415          
 416          
 417          void hight_to_lowbit(uchar num)                               
 418          {
 419   1          uchar cor_data;
 420   1          
 421   1          cor_data=num&0xf0;
 422   1          cor_data=cor_data>>4;
 423   1          send_n_3bit(1,cor_data);
 424   1      
 425   1          cor_data=num&0x0f;
 426   1          send_n_3bit(1,cor_data);
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 8   

 427   1      }
 428          /*********************串口中断初始化*************/
 429          /*设置串行口工作方式1,定时器1作为波特率发生器
 430          波特率设置为  2400 ;*/
 431          void comm (void)
 432          {TMOD=0x20;/*设置定时器T1工作方式2*/
 433   1      //TL1=0xff;/*定时器计数初值,1152Bps波特率 115.2KBps*/
 434   1      //TH1=0xff;/*定时器重装值*/
 435   1      TL1=0xfd;/*定时器计数初值,9600Bps波特率 115.2KBps*/
 436   1      TH1=0xfd;/*定时器重装值*/
 437   1       EA=1;/*允许总的中断*/
 438   1       ES=1;/*允许串行中断*/
 439   1      PCON=0x00;/*波特率不倍增*/
 440   1       //PCON |=0x80;/*波特率倍增*/
 441   1       SCON=0x50;/*设置串口工作方式1,REN = 1 允许接收*/
 442   1       TR1=0x01;/*定时器开始工作*/
 443   1      }
 444          
 445          /*********************串口中断服务程序*************/
 446          void comm_int() interrupt 4 using 2
 447          {
 448   1      ES=0;/*关闭串行中断*/
 449   1      EA=0;
 450   1      RI=0;//清除接收标志位
 451   1              if(SBUF==0xE5)
 452   1                {while(!RI);//等待接收数据
 453   2                 RI=0;//清除接收标志位
 454   2                 if(SBUF==0xE5)
 455   2                   {while(!RI);//等待接收数据
 456   3                        RI=0;//清除接收标志位
 457   3                        if(SBUF==0x02)
 458   3                  {while(!RI);//等待接收数据
 459   4                           RI=0;//清除接收标志位
 460   4                           if(SBUF==0x03)
 461   4                             {while(!RI);//等待接收数据
 462   5                                  RI=0;//清除接收标志位
 463   5                      if(SBUF==adress)
 464   5                                        {
 465   6                                         //send_fah();//发送应答控制字
 466   6                         //send_byte(adress); 
 467   6                         //RE_DE=1;/*当前487处于接收状态*/ 
 468   6                                         arress_botten=0;
 469   6                                       // gen();
 470   6                                        }
 471   5                                  }
 472   4                               }
 473   3                }  
 474   2                 }
 475   1      ES=1;EA=1;/*开启串行中断及总中断*/
 476   1      }
 477          
 478          void chu(void)
 479          {arress_botten=1;
 480   1      RE_DE=1;/*当前487处于接收状态*/ 
 481   1      comm();
 482   1      while(arress_botten);
 483   1      ES=0;
 484   1      }
 485          /************Z型用字模软件取出的字或图片的颜色及发数据处理函数*************
 486          
 487          功    能:(s型水平安装,左上角进数据)
 488          
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 9   

 489          ****************************************************************************/
 490          void words_z_h_dynamic_left_bottom(void)
 491          {
 492   1      
 493   1                                 
 494   1         ulint i,j,kt, addr,add=0x00;          ////add 为花样数据的首地址
 495   1              //stop:
 496   1              
 497   1      
 498   1        for(i=0;i<1000000000;i++)
 499   1              {  //   addr=m+row*i*wbyte;
 500   2            chu();
 501   2             for(j=0;j<row;j++)
 502   2               { 
 503   3                           addr=add+ i*(wbyte*row) + j*wbyte;     //定点采集数据。wbyte*row 为一屏的字节数
 504   3                   if(addr>=0x0fff0)                //24c512总大小为0x0ffff,
 505   3                     { 
 506   4                                 goto pt;
 507   4                                 }
 508   3      
 509   3                               AT24c64_read_bytes(addr,dat,wbyte);     //读取一行的字节数
 510   3                   if(dat[0]==0x0ff)                    // 若碰到填充数0xff则返回,此条件判断仅用于对16进制。
 511   3                      {goto pt;}
 512   3      
 513   3                               for(kt=0;kt<wbyte;kt++)             //先高半字节,后发低半字节,连续发一行。
 514   3                                      { hight_to_lowbit(dat[kt]);}
 515   3                       }
 516   2                      
 517   2              stb_data_595();
 518   2                  //dpara=207/2;
 519   2             //delays(10);
 520   2              }
 521   1      pt:
 522   1      RE_DE=1;//当前487处于接收状态
 523   1      ES=1;
 524   1      delay(1);
 525   1      
 526   1      }
 527          
 528          void fa1(ulint count,cor)
 529          {ulint i;
 530   1      for(i=0;i<count;i++)
 531   1      {
 532   2      while(arress_botten);
 533   2      
 534   2       ES=0;
 535   2       send_n_3bit(count-i,0);//发底色
 536   2       send_n_3bit(i,cor);//发底色
 537   2       stb_data_595();
 538   2       RE_DE=1;/*当前487处于接收状态*/ 
 539   2       
 540   2       arress_botten=1;
 541   2       ES=1;
 542   2      }
 543   1      }
 544          /****主程序*******************/
 545          void main(void)
 546          {EN_595=0;
 547   1      arress_botten=1;
 548   1      RE_DE=1;/*当前487处于接收状态*/ 
 549   1      comm();
 550   1      while(arress_botten);
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 10  

 551   1      strat:
 552   1      chu();
 553   1      AT24c64_address =0xa0;
 554   1      words_z_h_dynamic_left_bottom();
 555   1      AT24c64_address =0xa2;
 556   1      words_z_h_dynamic_left_bottom();
 557   1      AT24c64_address =0xa4;
 558   1      words_z_h_dynamic_left_bottom(); 
 559   1      AT24c64_address =0xa6;
 560   1      words_z_h_dynamic_left_bottom();
 561   1      goto strat;
 562   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1429    ----
   CONSTANT SIZE    =     15    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16      58
   IDATA SIZE       =     20       2
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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