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

📄 fpj5.lst

📁 一个用到ZLG7289的实际项目
💻 LST
📖 第 1 页 / 共 3 页
字号:
 377          {
 378   1              uchar   i;
 379   1              for(i=0;i<4;i++)
 380   1              {
 381   2                      if(dat[i]!=0) {break;}
 382   2                      if(dat[i]==0){dat[i]=15;}
 383   2              }       
 384   1              //输出显示
 385   1              for(i=0;i<6;i++)
 386   1              {
 387   2                      if(i==4){ZLG7289_Download(0,i,1,dat[i]);}       
 388   2                      else{ZLG7289_Download(0,i,0,dat[i]);}
 389   2              }       
 390   1      }               
 391          //******************************************
 392          //******************************************
 393          //存储时,只按数据存储,第一位是符号位,可能值10,15,其它全是0-9数据
 394          void    stor_dat(uchar  addr)
 395          {
 396   1              X5045WriteByte(addr++,dat[0]);X5045WriteByte(addr++,dat[1]);X5045WriteByte(addr++,dat[2]);
 397   1              X5045WriteByte(addr++,dat[3]);X5045WriteByte(addr++,dat[4]);X5045WriteByte(addr++,dat[5]);      
 398   1      }
 399          
 400          void    stor1_dat(uchar addr,float temp1)
 401          {
 402   1              ulong temp2;
 403   1              uchar   temp[6];
 404   1              //根据数据进行计算并存储
 405   1              if(fh_b==1)
 406   1              {
 407   2                      temp[0]=10;temp1=temp1*(-1.0);//转为正数
 408   2              }
 409   1              else 
 410   1              {
 411   2                      temp[0]=15;
 412   2              }
 413   1              X5045WriteByte(addr++,temp[0]);//存储符号位
 414   1              temp2=temp1*10;
 415   1              temp[1]=temp2/10000;temp2=temp2%10000;  //12345
 416   1              temp[2]=temp2/1000;temp2=temp2%1000;  //2345
 417   1              temp[3]=temp2/100;temp2=temp2%100;  //345
 418   1              temp[4]=temp2/10;temp2=temp2%10;  //45
 419   1              temp[5]=temp2;                                                                                  //5
 420   1              X5045WriteByte(addr++,temp[1]);X5045WriteByte(addr++,temp[2]);
 421   1              X5045WriteByte(addr++,temp[3]);X5045WriteByte(addr++,temp[4]);X5045WriteByte(addr++,temp[5]);           
 422   1      }
 423          //******************************************
 424          //功能:完成读取数据,并转化为浮点数
 425          //dat0分别代表符号位 dat1234代表数据位整数 dat5代表小数位
 426          //可能值 -2500.0---> 10 2 5 0 0 0
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 8   

 427          //可能值 2500---> 15 2 5 0 0 0
 428          float   read_dat(uchar  addr)
 429          {       
 430   1              float temp1;
 431   1              ulong temp2;
 432   1              dat[0]=X5045ReadByte(addr);
 433   1              if((dat[0]!=15)&&(dat[0]!=10)){dat[0]=15;X5045WriteByte(addr,dat[0]);}//符号位不正确,则取正数并写入
 434   1              addr++;
 435   1              dat[1]=X5045ReadByte(addr++);   dat[2]=X5045ReadByte(addr++);dat[3]=X5045ReadByte(addr++);      dat[4]=X5045Read
             -Byte(addr++);        dat[5]=X5045ReadByte(addr++);
 436   1      
 437   1              temp2=dat[1]*1000+dat[2]*100+dat[3]*10+dat[4];
 438   1              temp1=temp2+dat[5]*0.1;
 439   1              if(dat[0]==10){temp1=temp1*(-1);}
 440   1              return temp1;
 441   1      }
 442          //******************************************
 443          void main_init(void)
 444          {
 445   1              TOUT=1;//默认
 446   1              TMOD = 0x01;   
 447   1              Delay(30);    //延时300ms,等待ZLG7289复位完毕 
 448   1              X5045Init();    
 449   1              //led on
 450   1              P2&=0xf0;//B1111_0000;
 451   1              P3&=0x07;//B0000_0111;
 452   1              ZLG7289_Init(4);  //调用ZLG7289的初始化函数 
 453   1              Delay(100);     
 454   1              ZLG7289_Reset(); 
 455   1              //led off
 456   1              P2|=0x0f;//B1111_0000;
 457   1              P3|=0xf8;//B0000_0111;  
 458   1              TMOD=0x11;
 459   1              TH1=0xD8;
 460   1              TL1=0xF0;//10mS时间初值
 461   1              ET1=1;
 462   1              cnt_20ms=2;
 463   1              cnt_100ms=5;
 464   1              
 465   1      }
 466          //*******************************************
 467          void    init_dat(void)//读取所有参数ABCDEF数据,并判断有效,无效修改。
 468          {
 469   1              dat_b=read_dat(0x10);//读取参数B在X5045中的值
 470   1              if((dat_b>2500)||(dat_b<=0))//B正数,MAX=2500
 471   1              {
 472   2                      dat_b=2500;
 473   2                      dat[0]=15;dat[1]=2;dat[2]=5;dat[3]=0;dat[4]=0;dat[5]=0;//2500
 474   2                      stor_dat(0x10);
 475   2              }
 476   1              dat_c=read_dat(0x20);//读取参数C在X5045中的值
 477   1              if((dat_c>50)||(dat_c<=0))//C正数,MAX=50
 478   1              {
 479   2                      dat_c=50;
 480   2                      dat[0]=15;dat[1]=0;dat[2]=0;dat[3]=5;dat[4]=0;dat[5]=0;//50
 481   2                      stor_dat(0x20);
 482   2              }       
 483   1              dat_d=read_dat(0x30);//读取参数D在X5045中的值
 484   1              if((dat_d>100)||(dat_d<=0))//D正数,MAX=100
 485   1              {
 486   2                      dat_d=100;
 487   2                      dat[0]=15;dat[1]=0;dat[2]=1;dat[3]=0;dat[4]=0;dat[5]=0;//100
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 9   

 488   2                      stor_dat(0x30);
 489   2              }       
 490   1              dat_e=read_dat(0x40);//读取参数E在X5045中的值
 491   1              if((dat_e>50)||(dat_e<=0))//E正数,MAX=50
 492   1              {
 493   2                      dat_e=50;
 494   2                      dat[0]=15;dat[1]=0;dat[2]=0;dat[3]=5;dat[4]=0;dat[5]=0;//50
 495   2                      stor_dat(0x40);
 496   2              }       
 497   1              dat_f=read_dat(0x50);//读取参数F在X5045中的值
 498   1              if((dat_f>=10)||(dat_f<=-10))//-10<F<10
 499   1              {
 500   2                      dat_f=0;
 501   2                      dat[0]=15;dat[1]=0;dat[2]=0;dat[3]=0;dat[4]=0;dat[5]=0;//0
 502   2                      stor_dat(0x50);
 503   2              }       
 504   1                      
 505   1              dat_a=read_dat(0x00);//读取参数A在X5045中的值
 506   1              if((dat_a>2500)||(dat_a<=0))//a正数,MAX=2500
 507   1              {
 508   2                      dat_a=2500;
 509   2                      dat[0]=15;dat[1]=2;dat[2]=5;dat[3]=0;dat[4]=0;dat[5]=0;//2500
 510   2                      stor_dat(0x00);
 511   2              }
 512   1      }
 513          void    pit1(void) interrupt 3 
 514          {
 515   1              TH1=0xD8;
 516   1              TL1=0xF0;//10mS时间初值
 517   1              f_10ms=1;
 518   1      }
 519          void    time_mainloop(void)//时间处理
 520          {
 521   1              if(!f_10ms)return;
 522   1              f_10ms=0;
 523   1              if(--cnt_20ms==0)
 524   1              {
 525   2                      cnt_20ms=2;f_20ms=1;
 526   2                      if(--cnt_100ms==0)
 527   2                      {
 528   3                              cnt_100ms=5;f_100ms=1;  
 529   3                      }                       
 530   2              }
 531   1      }
 532          //*********************************************
 533          //根据按键结果进行处理得到数据
 534          float calc(void)
 535          {
 536   1              uchar i;
 537   1              ulong temp1;
 538   1              float temp2;
 539   1              temp1=dat[0];
 540   1              for(i=1;i<k_cnt;i++)
 541   1              {
 542   2                      temp1=temp1*10+dat[i];  
 543   2              }
 544   1              temp2=temp1;
 545   1              if(dp_b)
 546   1              {
 547   2                      for(i=0;i<(k_cnt-dp_cnt);i++)
 548   2                      {temp2=temp2/10;}       
 549   2              }
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 10  

 550   1              if(fh_b){temp2=temp2*(-1.0);}
 551   1              return (temp2); 
 552   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3618    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47      45
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      8    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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