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

📄 fpj5.lst

📁 一个用到ZLG7289的实际项目
💻 LST
📖 第 1 页 / 共 3 页
字号:
 185   4                                                              k_cnt++;
 186   4                                                      }                                       
 187   3                                                      break;
 188   3                                              case FH:
 189   3                                                      if(k_cnt>0)break;//负号只能是第一位 k_cnt=0
 190   3                                                      fh_b=!fh_b;
 191   3                                                      if(fh_b){ZLG7289_Download(0,5,0,FH);}
 192   3                                                      else{ZLG7289_Download(0,5,0,OFF);}                                      
 193   3                                                      break;
 194   3                                              case DP:
 195   3                                                      if(k_cnt==0)break;// . 和 -. 不存在
 196   3                                                      if((dp_b==1)&&(dp_cnt!=k_cnt))break;//dp唯一
 197   3                                                      dp_b=!dp_b;
 198   3                                                      if(dp_b){ZLG7289_Download(0,5,1,dat[k_cnt-1]);dp_cnt=k_cnt;dpend_b=1;}
 199   3                                                      else{ZLG7289_Download(0,5,0,dat[k_cnt-1]);}                                             
 200   3                                                      break;
 201   3                                              case CLR:
 202   3                                                      set_off();k_cnt=0;fh_b=0;dp_b=0;dat[0]=0;dat[0]=0;dat[1]=0;dat[2]=0;dat[3]=0;dat[4]=0;
 203   3                                                      break;  
 204   3                                              case ENT://对输入数据进行验证,并进入下一个数据验证状态
 205   3                                                      temp=calc();
 206   3                                                      switch(ent_state)
 207   3                                                      {
 208   4                                                              case 0:
 209   4                                                                      if((temp<=2500)&&(temp>=0.1))           
 210   4                                                                      {dat_a=temp;stor1_dat(0x00,dat_a);datok_b=1;}
 211   4                                                                      break;
 212   4                                                              case 1:
 213   4                                                                      if((temp<=2500)&&(temp>=0.1))           
 214   4                                                                      {dat_b=temp;stor1_dat(0x10,dat_b);datok_b=1;}
 215   4                                                                      break;
 216   4                                                              case 2:
 217   4                                                                      if((temp<=50)&&(temp>=0.1))                     
 218   4                                                                      {dat_c=temp;stor1_dat(0x20,dat_c);datok_b=1;}
 219   4                                                                      break;
 220   4                                                              case 3:
 221   4                                                                      if((temp<=100)&&(temp>=0.1))                    
 222   4                                                                      {dat_d=temp;stor1_dat(0x30,dat_d);datok_b=1;}
 223   4                                                                      break;
 224   4                                                              case 4:
 225   4                                                                      if((temp<=50)&&(temp>=0.1))                     
 226   4                                                                      {dat_e=temp;stor1_dat(0x40,dat_e);datok_b=1;}
 227   4                                                                      break;
 228   4                                                              case 5:
 229   4                                                                      if((temp>=(-10))&&(temp<=10))
 230   4                                                                      {dat_f=temp;stor1_dat(0x50,dat_f);datok_b=1;}
 231   4                                                                      break;
 232   4                                                              default:break;
 233   4                                                      }
 234   3                                                      if(datok_b)
 235   3                                                      {
 236   4                                                              f_key=1;k_new=ENT;f_20ms=0;xstate=0;datok_b=0;
 237   4                                                      }
 238   3                                                      else
 239   3                                                      {
 240   4                                                              set_off();k_cnt=0;fh_b=0;dp_b=0;dat[5]=0;dat[0]=0;dat[1]=0;dat[2]=0;dat[3]=0;dat[4]=0;
 241   4                                                      }
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 5   

 242   3                                                      break;
 243   3                                              default:
 244   3                                                      break;
 245   3                                      }
 246   2                                      break;
 247   2                              case 2://运行态---只响应        STOP
 248   2                                      switch(k_new)
 249   2                                      {
 250   3                                                      case STOP:TOUT=1;out_b=0;xstate=3;LRUN=LOFF;LG=LON;LSTOP=LON;//停止后,显示不变
 251   3                                                                              break;
 252   3                                                      default:
 253   3                                                                              break;  
 254   3                                      }
 255   2                                      break;
 256   2                              case 3://停止态--只响应 RUN ENT
 257   2                                      switch(k_new)
 258   2                                      {
 259   3                                                      case RUN:xstate=2;LRUN=LON;LG=LON;LSTOP=LOFF;tout_cnt=result*10;TOUT=0;out_b=1;cnt_20ms=2;cnt_100ms=
             -5;
 260   3                                                                      break;
 261   3                                                      case ENT:xstate=0;ent_state=5;f_key=1;k_new=ENT;f_20ms=0;//重新执行下验证A
 262   3                                                                              LRUN=LOFF;LG=LOFF;LSTOP=LOFF;
 263   3                                                                              break;                                                                  
 264   3                                                      default:
 265   3                                                                              break;  
 266   3                                      }                               
 267   2                                      break;
 268   2                              default:
 269   2                                      break;          
 270   2              }
 271   1      }
 272          //**************************根据参数进行计算,并转换到dat[0--5]
 273          void    calcg(void)
 274          {
 275   1      ulong   temp;
 276   1                              result=dat_a*dat_b*dat_c*dat_d*CON_DAT1/(dat_e*CON_DAT2)+dat_f;
 277   1                              //结果最大18760
 278   1                              if(result>18760) result=18760;
 279   1                              if(result<0)            result=0;
 280   1                              temp=result*10;//将小数位变为整数
 281   1                              dat[0]=temp/100000;     temp=temp%100000;
 282   1                              dat[1]=temp/10000;      temp=temp%10000;
 283   1                              dat[2]=temp/1000;               temp=temp%1000;
 284   1                              dat[3]=temp/100;                temp=temp%100;
 285   1                              dat[4]=temp/10;                 temp=temp%10;
 286   1                              dat[5]=temp;
 287   1              
 288   1      }
 289          //**************************
 290          void    keypd_mainloop(void)//按键判断20ms一次
 291          {
 292   1              if(!f_20ms) return;
 293   1              f_20ms=0;
 294   1              if ( ZLG7289_pinINT == 0 )    //有键按下 
 295   1              {  
 296   2                      //读  
 297   2                      k = ZLG7289_Key(); 
 298   2                      while (!ZLG7289_pinINT );       //等待按键抬起  
 299   2                      switch(k)
 300   2                      {
 301   3                              case  1:        k_new=0;break;//0
 302   3                              case 11:        k_new=1;break;//1
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 6   

 303   3                              case 10:        k_new=2;break;//2
 304   3                              case  9:        k_new=3;break;//3
 305   3                              case  8:        k_new=4;break;//4
 306   3                              case 15:        k_new=5;break;//5
 307   3                              case 14:        k_new=6;break;//6
 308   3                              case 13:        k_new=7;break;//7
 309   3                              case 12:        k_new=8;break;//8
 310   3                              case  2:        k_new=9;break;//9
 311   3                              case  0:        k_new=10;break;//+-                                                     
 312   3                              case  3:        k_new=11;break;//dp
 313   3                              case  7:        k_new=12;break;//CLR
 314   3                              case  4:        k_new=13;break;//ENT                            
 315   3                              case  5:        k_new=14;break;//STOP
 316   3                              case  6:        k_new=15;break;//RUN                            
 317   3                              default:        break;
 318   3                      }       
 319   2                      f_key=1;
 320   2              }
 321   1      }
 322          //**************************
 323          void    tout_mainloop(void)//脉冲输出处理
 324          {
 325   1              if((f_100ms)&&(out_b))
 326   1              {
 327   2                      f_100ms=0;
 328   2                      if(--tout_cnt==0)
 329   2                      {
 330   3                              TOUT=1;out_b=0; 
 331   3                      }       
 332   2              }
 333   1      }
 334          //**************************
 335          void    set_off(void)
 336          {
 337   1              ZLG7289_Download(0,0,0,15);
 338   1              ZLG7289_Download(0,1,0,15);
 339   1              ZLG7289_Download(0,2,0,15);
 340   1              ZLG7289_Download(0,3,0,15);
 341   1              ZLG7289_Download(0,4,0,15);
 342   1              ZLG7289_Download(0,5,0,15);
 343   1      }
 344          
 345          //******************************************            
 346          void    disp_out(void)  //根据dat[0-5]内容显示
 347          {
 348   1              uchar   i;
 349   1              //显示修正
 350   1              //正数          如果有非0数据,退出for循环
 351   1              //正数  15 0 0,0 0 1(0.1)       -->15 15 15 15 0 1
 352   1              //      15 0 1 0 0 1(100.1)-->15 15 1  0  0 1
 353   1                      
 354   1              //负数  如果有非0数据,将前一个数据置符号位,退出for循环        
 355   1              //负数  10 0 0,0 0 1(-0.1)      -->15 15 15 10 0 1
 356   1              //      10 0 1 0 0 1(-100.1)-->15 10 1  0  0 1
 357   1              for(i=1;i<5;i++)
 358   1              {
 359   2                      if(dat[i]!=0) 
 360   2                      {
 361   3                              if(dat[0]==10){dat[0]=15;dat[i-1]=10;}//负数                            
 362   3                              break;
 363   3                      }
 364   2                      if(dat[i]==0){dat[i]=15;}
C51 COMPILER V7.50   FPJ5                                                                  07/24/2007 21:41:13 PAGE 7   

 365   2              }       
 366   1              if(dat[4]==15)dat[4]=0;
 367   1              if(dat[0]==10){dat[0]=15;dat[3]=10;}//补丁---仅在"-0.x时有效"
 368   1              //输出显示
 369   1              for(i=0;i<6;i++)
 370   1              {
 371   2                      if(i==4){ZLG7289_Download(0,i,1,dat[i]);}       
 372   2                      else{ZLG7289_Download(0,i,0,dat[i]);}
 373   2              }       
 374   1      }               
 375          //************************************************
 376          void    dispg_out(void) //根据dat[0-5]内容显示 正数 没有符号位 

⌨️ 快捷键说明

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