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

📄 spy_lcd.lst

📁 此程序主要测试50HZ~3KHZ音频范围幅频特性测试程序.程序包含主控程序和显示程序.
💻 LST
📖 第 1 页 / 共 5 页
字号:
 706   2              disp_one_hz(5,5,numeric,1);
 707   2              disp_one_hz(3,5,numeric,1);
 708   2              disp_one_hz(5,5,numeric,1);
 709   2             }
 710   1          else if(a>=10000&&a<65535)//判断a是否为万位数
 711   1            { disp_one_hz(a/10000,5,numeric,1);//显示万位数
 712   2              a=a%10000;
 713   2              disp_one_hz(a/1000,5,numeric,1);//显示千位数
 714   2              a=a%1000;
 715   2              disp_one_hz(a/100,5,numeric,1);//显示百位数
 716   2              a=a%100;
 717   2              disp_one_hz(a/10,5,numeric,1);//显示十位数
 718   2              disp_one_hz(a%10,5,numeric,1);//显示个位数
 719   2             }
 720   1      }
 721          
 722          
 723          void freq_value(uint PL) //显示扫频时频率变化值,
 724          {       
 725   1              p1.x=100;
 726   1              p1.y=0;
 727   1              p2.x=127;
 728   1              p2.y=15;
 729   1              draw_srec(p1,p2,0);//先清这一行数字区域
 730   1              cursor.x=100;
 731   1              cursor.y=0;
 732   1              transfer(PL);
 733   1      }
 734          
 735          void PLUS_value(uint ZY) //显示扫频时幅值变化值
 736          {       p1.x=100;
 737   1              p1.y=16;
 738   1              p2.x=127;
 739   1                  p2.y=31;
 740   1              draw_srec(p1,p2,0);//先清这一行数字区域
 741   1              cursor.x=100;
 742   1              cursor.y=16;
 743   1              transfer((ZY/10)); //显示整数部分
 744   1              disp_one_hz(10,5,numeric,1);  //显示小数点
 745   1              transfer((ZY%10)); //显示小数点后面的数字(一位)
 746   1      
 747   1      }
 748          
 749          void voltage_value(uint DY) //显示扫频议输出的幅值
C51 COMPILER V7.06   SPY_LCD                                                               04/22/2007 11:06:48 PAGE 17  

 750          {       p1.x=100;
 751   1              p1.y=47;
 752   1              p2.x=127;
 753   1              p2.y=63;
 754   1              draw_srec(p1,p2,0);//先清这一行数字区域
 755   1              cursor.x=100;
 756   1              cursor.y=47;
 757   1              transfer(DY);
 758   1      }
 759          
 760          
 761          void pinduanhao(uchar PDH)  //显示频段号   PDH =1为A频段,=2为B频段,=3为C频段
 762          {   cursor.x=114;
 763   1              cursor.y=32;
 764   1              transfer(PDH);
 765   1      }
 766          
 767          
 768          void saopingeshi(uchar SPGS) //显示为扫频格式  SPGS=1为单次,=2为循环扫频
 769          {   cursor.x=121;
 770   1              cursor.y=32;
 771   1              transfer(SPGS);
 772   1      }
 773          
 774          
 775          void zuobiaozhu()   //显示界面初始化
 776           {  point PP1,PP2;
 777   1          offlcd(); /*关闭LCD*/
 778   1              onlcd();  /*打开LCD*/
 779   1              clr_lcd(); /*清屏*/
 780   1      
 781   1          PP1.x=0;
 782   1          PP1.y=0;
 783   1          PP2.x=0;
 784   1          PP2.y=63;
 785   1        draw_line(PP1,PP2,1);  //画纵轴
 786   1          PP1.x=0;
 787   1          PP1.y=63;
 788   1          PP2.x=99;
 789   1          PP2.y=63;
 790   1        draw_line(PP1,PP2,1); //画横轴
 791   1       //显示字母f
 792   1        cursor.x=107;
 793   1        cursor.y=32;
 794   1        disp_one_hz(5,6,letter,1); //显示f
 795   1      
 796   1      
 797   1       }
 798          
 799          
 800          
 801           void main()
 802          {  
 803   1        point fre_bre;
 804   1        point zbdwstar_cx;
 805   1        point zbdwend_cx;
 806   1       
 807   1        zuobiaozhu();   //显示界面初始化
 808   1        init();       /*初始化串口*/
 809   1        EA=1;         /*总中断允许*/
 810   1        DENG=0;
 811   1      
C51 COMPILER V7.06   SPY_LCD                                                               04/22/2007 11:06:48 PAGE 18  

 812   1        /*主程序循环*/
 813   1       for(;;)
 814   1       { // sp_fre=1;sp_bre=1; st_st=1;bre_sp=32;  //调试程序时用
 815   2      
 816   2      
 817   2         if(iend==1&&istart==0) //串口接受完一组数据了么?
 818   2         {
 819   3           if(shuju[0]==0x1b) //是正常数据么?
 820   3             {
 821   4                      switch(shuju[1]) //数据命令类型判断
 822   4                              {
 823   5                              case 0x92:      //为扫频时发出的频率值
 824   5                                      {
 825   6      
 826   6                                       sp_fre=1; //置扫频时频率值处理标志
 827   6                                       shuju[3]=shuju[3]<<8; //变成高2位
 828   6                       fre_sp=shuju[3]|shuju[2];
 829   6                                       if(fre_sp==50) //接受到的频率等50HZ么?
 830   6                                       {st_st=1; }//以此来刷新显示幅频特性区
 831   6                                   freq_value(fre_sp); //显示扫频时频率变化值,
 832   6                                       tally=fre_sp;
 833   6                              }break;
 834   5                  case 0x94:  //为扫频时发出的幅度比值
 835   5                                      {sp_bre=1; //置扫频时幅值处理标志
 836   6                                       shuju[3]=shuju[3]<<8; //变成高2位
 837   6                       bre_sp=shuju[3]|shuju[2];
 838   6      
 839   6                       PLUS_value(bre_sp);//显示扫频时幅值变化值
 840   6      
 841   6                                      }break;
 842   5                      case 0x11:      //为扫频议发出的固定幅值
 843   5                                      {
 844   6                                       shuju[3]=shuju[3]<<8; //变成高2位
 845   6                                   voltaga_sp=shuju[3]|shuju[2];
 846   6                           voltage_value(voltaga_sp); //显示扫频议输出的幅值
 847   6      
 848   6                                      }break;
 849   5                              case 0xa0:      //为查询时发出的频率值
 850   5                                      {
 851   6                                       cx_fre=1;  //置查询时频率值处理标志
 852   6                                       shuju[3]=shuju[3]<<8;//变成高2位
 853   6                                   fre_cx=shuju[3]|shuju[2];
 854   6                                       freq_value(fre_cx); //显示查询时频率变化值,
 855   6                      // if((counter_cx>=0)&&(counter_cx<=99))
 856   6                         {  
 857   7                                            if((fre_cx)<(tally))  //确定查询竖线是向左移么?
 858   7                                              {
 859   8                                                       // if(counter_cx>0)
 860   8                                                     {counter_cx--; 
 861   9                                                          direction=0; //置查询光标线向左移标志
 862   9                                                          } // 如果fre_cx0==fre_cx说明查询键到了频段的两端还在按下。这时cuuter_cx不计数
 863   8                                              }
 864   7                                                if(fre_cx>tally) //确定查询竖线是向右移么?
 865   7                                                  {
 866   8                                                        //if(counter_cx<99)
 867   8                                                    {counter_cx++;
 868   9                                                         direction=1; ///置查询光标线向右移标志
 869   9                                                        }
 870   8                                                  } 
 871   7                           
 872   7                         }
 873   6                                       if(fre_cx==50)  { counter_cx=0; }
C51 COMPILER V7.06   SPY_LCD                                                               04/22/2007 11:06:48 PAGE 19  

 874   6                       if((fre_cx==3018&&pdlx==1)||(fre_cx==2003&&pdlx==2)||(fre_cx==1001&&pdlx==3))
 875   6                           {counter_cx=99;tally=fre_cx; }
 876   6                                      
 877   6                       tally=fre_cx; //把新查询到的频率值赋给老频率值  
 878   6                                      }break;
 879   5                              case 0x80:      //为查询时发出的幅度值
 880   5                      { 
 881   6                        cx_bre=1;      //置查询时幅值处理标志
 882   6                                        shuju[3]=shuju[3]<<8;   //变成高2位
 883   6                                        bre_cx=shuju[3]|shuju[2];
 884   6                            PLUS_value(bre_cx);    //显示查询时幅值变化值
 885   6                      }break;
 886   5                              case 0xc0:      //为扫频频段号命令
 887   5                                      {
 888   6                                  pdlx=shuju[2];
 889   6                          pinduanhao(pdlx);  //显示频段号   PDH =1为A频段,=2为B频段,=3为C频段
 890   6      
 891   6                                      }break;
 892   5                              case 0xc1:      //为扫频格式:单次/循环命令
 893   5                                      {
 894   6                                      spgs=shuju[2];
 895   6                          saopingeshi(spgs); //显示为扫频格式  SPGS=1为单次,=2为循环扫频
 896   6      
 897   6                                      }break;
 898   5      
 899   5                              }
 900   4                       }   iend=0;//在此置0是:让数据命令类型判断只能执行一次,或着说只有此串口再接受到新数据才能再判断
 901   3                 }
 902   2          
 903   2               
 904   2          if(sp_fre==1&&sp_bre==1)  //绘幅频曲线图
 905   2               { sp_fre=0;
 906   3                 sp_bre=0;
 907   3                 
 908   3                 if(st_st==1) //开始键按下了么?
 909   3                  {p1.x=1;
 910   4               p1.y=0;
 911   4               p2.x=99;
 912   4                   p2.y=62;
 913   4               draw_srec(p1,p2,0);//清曲线显示区域图形
 914   4                  //  DENG=!DENG; 
 915   4              zbdwstar_cx.x=0;
 916   4              zbdwstar_cx.y=0;
 917   4              zbdwend_cx.x=0;
 918   4              zbdwend_cx.y=63;
 919   4              draw_line(zbdwstar_cx,zbdwend_cx,1);  //画纵轴线
 920   4                      zbdwstar_cx.x=0;
 921   4              zbdwstar_cx.y=63;
 922   4              zbdwend_cx.x=99;
 923   4              zbdwend_cx.y=63;
 924   4              draw_line(zbdwstar_cx,zbdwend_cx,1);  //画横轴线
 925   4      
 926   4                   st_st=0;  //开始键按下标志复位
 927   4                       counter=0; //频率计数器标志复位
 928   4                       counter_cx=0;// 查询计数器标志复位
 929   4              // shuju_y[]=0; //清曲线Y轴坐标数据
 930   4                   }
 931   3                 fre_bre.x=counter;   //根据频率计数值定位X轴光标
 932   3             fre_bre.y=33-(bre_sp/10); //根据幅值比值定位Y轴光标, 63-30=33处开始显示曲线,另外除十是将主机发过来
             -的数据小数点舍去,此处没进行四舍五入算法因为曲线只是显示大概位置,具体参数要看幅值处显示的参数
 933   3             shuju_y[counter]=fre_bre.y;  //记录扫过曲线点Y轴的坐标
 934   3             disp_one_dot(fre_bre,1); //绘制幅频特性曲线
C51 COMPILER V7.06   SPY_LCD                                                               04/22/2007 11:06:48 PAGE 20  

 935   3      
 936   3                 counter++; //频率计数器标志+1
 937   3                 counter_cx++;// 查询计数器标志+1
 938   3                 if(spgs==1&&counter_cx>99) {counter_cx=99;} //只需判断是否在单次扫频格式下,在循环格式下遇到开始键按下

⌨️ 快捷键说明

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