📄 fpj5.lst
字号:
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 + -