📄 adda.lst
字号:
430 1 CS=0;
431 1 Locatexy(0,17); //定位在显示区(16~176行)
432 1 CmdWrite(CSRDIR_RIGHT);
433 1 CmdWrite(MWRITE); //发写命令
434 1 for(row=16;row<=176;row++) //对16~176行绘图
435 1 {
436 2 unsigned char value=176-row; //第row行所对应的ADC值
437 2 for(col=0;col<40;col++) //每行40个字节
438 2 {
439 3 unsigned char Data=0;
440 3 unsigned char M=0x80;
441 3 if(col==0 || col==39) //第一列和最后一列不使用
442 3 {
443 4 DataWrite(Data);
444 4 continue;
445 4 }
446 3 for(k=0;k<8;k++) //分析每个字节应写入的数值
447 3 {
448 4 if(ADCdata[(col-1)*8+k]==value)
449 4 Data|=M;
450 4 else
451 4 {
452 5 char m=0;
453 5 if(ADCdata[(col-1)*8+k]<value) //value>当前值 m++
454 5 m++;
455 5 if(ADCdata[(col-1)*8+k+1]>value)//value<下一值 m--
456 5 m--;
457 5 if(m==0) //m=0说明value在两值之间,该位应该置一
458 5 Data|=M;
459 5 }
460 4 M=M>>1;
461 4 }
462 3 DataWrite(Data);
463 3 }
464 2 }
465 1 CS=1;
466 1 }
467
468 void ADDA()
469 {
470 1 ADDASetUp(); //设置
471 1 Clear(0,240);
472 1 DrawScale();
473 1 //界面
474 1 Udprintf(0,192," 16KHz 0mv 钬 ");
475 1 putufig(10,192,TriggerValue,4,1,' ');
476 1 dprintf(0,208,"采样频率 触发电平 触发 退出");
477 1 dprintf(0,224,"柽2 刍2 芗 兦 模式 实验");
478 1 if(ADDAParaList[0]==0)
479 1 ;//显示正弦波
480 1 if(ADDAParaList[0]==1)
481 1 ;//显示梯形波
482 1 ADC0_Init(); //AD初始化
483 1 AD_T3_INIT(); //T3初始化,驱动AD
484 1 EIE2|=0x02; //开ADC0中断
485 1 while(1)
486 1 {
487 2 if(CheckKeyF==1) //键盘检测
C51 COMPILER V7.06 ADDA 04/02/2007 08:52:19 PAGE 9
488 2 {
489 3 CheckKey();
490 3 CheckKeyF=0;
491 3 }
492 2
493 2 if(Key[0].pressed==1) //检测到*2键
494 2 {
495 3 if(ADDAParaList[6]<64)
496 3 {
497 4 unsigned int T3Value;
498 4 ADDAParaList[6]*=2;
499 4 T3Value=0xFFFF-(unsigned int)22118/ADDAParaList[6];
500 4 SFRPAGE = TMR3_PAGE;
501 4 TR3=0;
502 4 TMR3L=T3Value;
503 4 TMR3H=T3Value>>8;
504 4 RCAP3L=TMR3L;
505 4 RCAP3H=TMR3H;
506 4 TR3=1;
507 4 SFRPAGE = CONFIG_PAGE;
508 4 putufig(1,192,ADDAParaList[6],2,1,' ');
509 4 }
510 3 Key[0].pressed=0;
511 3 }
512 2
513 2 if(Key[1].pressed==1) //检测到/2键
514 2 {
515 3 if(ADDAParaList[6]>2)
516 3 {
517 4 unsigned int T3Value;
518 4 ADDAParaList[6]/=2;
519 4 T3Value=0xFFFF-(unsigned int)22118/ADDAParaList[6];
520 4 SFRPAGE = TMR3_PAGE;
521 4 TR3=0;
522 4 TMR3L=T3Value;
523 4 TMR3H=T3Value>>8;
524 4 RCAP3L=TMR3L;
525 4 RCAP3H=TMR3H;
526 4 TR3=1;
527 4 SFRPAGE = CONFIG_PAGE;
528 4 putufig(1,192,ADDAParaList[6],2,1,' ');
529 4 }
530 3 Key[1].pressed=0;
531 3 }
532 2
533 2 if(Key[2].pressed==1) //提高触发电平
534 2 {
535 3 Key[2].pressed=0;
536 3 if(TriggerValue<3000) //触发值0~3000mv
537 3 {
538 4 TriggerValue+=100; //步长100mv
539 4 //调整TriggerValue对应的ADC值 (TriggerValue/3000mv*(1.5v/2.4v*4096))
540 4 ADH_TriggerValue=((unsigned long)TriggerValue*64/75)>>4;
541 4 ADL_TriggerValue=((unsigned long)TriggerValue*64/75)<<4;
542 4 Clear(240+14,240+176);
543 4 DrawScale();
544 4 putufig(10,192,TriggerValue,4,1,' ');
545 4 }
546 3 }
547 2
548 2 if(Key[3].pressed==1) //降低触发电平
549 2 {
C51 COMPILER V7.06 ADDA 04/02/2007 08:52:19 PAGE 10
550 3 Key[3].pressed=0;
551 3 if(TriggerValue>0)
552 3 {
553 4 TriggerValue-=100;
554 4 ADH_TriggerValue=((unsigned long)TriggerValue*64/75)>>4;
555 4 ADL_TriggerValue=((unsigned long)TriggerValue*64/75)<<4;
556 4 Clear(240+14,240+176);
557 4 DrawScale();
558 4 putufig(10,192,TriggerValue,4,1,' ');
559 4 }
560 3 }
561 2
562 2 if(Key[4].pressed==1) //改变触发模式
563 2 {
564 3 TriggerMode=(++TriggerMode)%3;
565 3 if(TriggerMode==0)
566 3 Udprintf(21,192,"牲");
567 3 if(TriggerMode==1)
568 3 Udprintf(21,192,"豇");
569 3 if(TriggerMode==2)
570 3 Udprintf(21,192,"钬");
571 3 Key[4].pressed=0;
572 3 }
573 2
574 2 if(ready==1)
575 2 {
576 3 DrawGraph();
577 3 ready=0;
578 3 ADcounter=0;
579 3 }
580 2
581 2 if(Key[7].pressed==1) //检测到退出键
582 2 {
583 3 char SFRPAGE_SAVE;
584 3 SFRPAGE_SAVE=SFRPAGE;
585 3 SFRPAGE = DAC0_PAGE; //关DAC
586 3 DAC0CN&=0x7f;
587 3 SFRPAGE = ADC0_PAGE; //关DAC
588 3 ADC0CN&=0x7f;
589 3 SFRPAGE = TMR3_PAGE; //关T3
590 3 TR3=0;
591 3 SFRPAGE = TMR4_PAGE; //关T4
592 3 TR4=0;
593 3 SFRPAGE=SFRPAGE_SAVE;
594 3 ClearKey();
595 3 Clear(0,480);
596 3 return;
597 3 }
598 2 }
599 1 }
600
601 /*
602 if(ready==1)
603 {
604 int i,j;
605 int p=700;
606 Clear(16,176);
607 for(i=0;i<700;i++) //每次选择零点为显示起始点,找不到零点则显示后300个点
608 {
609 if(ADCdata[i]==0 && ADCdata[i+1]>0 && ADCdata[i+2]>0)
610 {
611 p=i;
C51 COMPILER V7.06 ADDA 04/02/2007 08:52:19 PAGE 11
612 break;
613 }
614 }
615 for(i=1;i<300;i++)
616 {
617 if(ADCdata[p+i]==ADCdata[p+i-1])
618 Point(10+i,176-ADCdata[p+i]);
619 if(ADCdata[p+i]<ADCdata[p+i-1])
620 {
621 for(j=ADCdata[p+i-1]-1;j>=ADCdata[p+i];j--)
622 Point(10+i,176-j);
623 }
624 if(ADCdata[p+i]>ADCdata[p+i-1])
625 {
626 for(j=ADCdata[p+i-1]+1;j<=ADCdata[p+i];j++)
627 Point(10+i,176-j);
628 }
629 }
630 ready=0;
631 ADcounter=0;
632 }
633
634 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4494 ----
CONSTANT SIZE = 503 ----
XDATA SIZE = 1017 37
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -