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

📄 lcdx1.lst

📁 此程序主要测试50HZ~3KHZ音频范围幅频特性测试程序.程序包含主控程序和显示程序.
💻 LST
📖 第 1 页 / 共 5 页
字号:
 717   1              draw_rec(p1,p2,s);
 718   1              p1.x=111+5;
 719   1              p1.y=3;
 720   1              p2.x=112+5;
 721   1              p2.y=4;
 722   1              if(s) {draw_srec(p1,p2,0xff);}
 723   1              else {draw_srec(p1,p2,s);}
 724   1      }
 725          
 726          /*显示电量标志图:num为数值,s=1为显示,s=0为清除*/
 727          void disp_bat(uchar num,bit s)
 728          {
 729   1              uchar i;
 730   1              point p1,p2;
 731   1              if(num!=batnum)
 732   1              {
 733   2                      p1.x=94+5;
 734   2                      p1.y=1;
 735   2                      p2.x=109+5;
 736   2                      p2.y=6;
 737   2                      draw_srec(p1,p2,0);
C51 COMPILER V7.07   LCDX1                                                                 01/25/2005 13:50:05 PAGE 13  

 738   2              }
 739   1                      p1.x=95+5;
 740   1                      p1.y=2;
 741   1                      p2.x=98+5;
 742   1                      p2.y=5;
 743   1                      for(i=0;i<num;i++)
 744   1                      {
 745   2                              if(s) {draw_srec(p1,p2,0xff);}
 746   2                              else {draw_srec(p1,p2,s);}
 747   2                              p1.x+=5;
 748   2                              p2.x+=5;
 749   2                      }
 750   1                      batnum=num;
 751   1      }
 752          
 753          /*显示横向条形图的数值,入口参数:cursor.x以及cursor.y */
 754          void transfer(uchar a)
 755          {
 756   1              if(a>=0&&a<10) {disp_one_hz(a,5,sntab,1);}
 757   1              else if(a==100) {disp_one_hz(1,5,sntab,1);disp_one_hz(0,5,sntab,1);disp_one_hz(0,5,sntab,1);}
 758   1              else
 759   1              {
 760   2                      disp_one_hz(a/10,5,sntab,1);
 761   2                      disp_one_hz(a%10,5,sntab,1);
 762   2              }
 763   1      }
 764          
 765          /*显示横向条形图:num范围0_100
 766            当当前数值小于上一次的数值时,将上一次的数值保持(两条竖线或一条竖线)
 767            直到下一次调用该程序
 768          */
 769          bit direction;
 770          uchar max;
 771          bit set1;
 772          bit set2;
 773          bit set3;
 774          bit set4;
 775          
 776          void disp_lbar(uchar num)
 777          {
 778   1              point p1,p2;
 779   1      //      uchar i,j;
 780   1              p1.y=19;
 781   1              p2.y=32;
 782   1              if(lbarnum!=num)
 783   1              {
 784   2                      if(lbarnum<num)                                         /*本次数据大于上一次的数据*/
 785   2                      {
 786   3                              if(!direction)                                  /*上一次的数据变化方向为下降*/
 787   3                              {
 788   4                                      p1.x=max+1;                                     /*清除保持的数字*/
 789   4                                      p2.x=max+1+15;
 790   4                                      draw_srec(p1,p2,0);
 791   4                                      if(set4)                                        /*上次数据下降一格的情况*/
 792   4                                      {
 793   5                                              p1.x=max-1;
 794   5                                              p2.x=max-1;
 795   5                                              draw_srec(p1,p2,0);
 796   5                                              set4=0;
 797   5                                      }
 798   4                                      if(set2)                                        /*上次数据下降两格的情况*/
 799   4                                      {
C51 COMPILER V7.07   LCDX1                                                                 01/25/2005 13:50:05 PAGE 14  

 800   5                                              p1.x=max-1;
 801   5                                              p2.x=max-1;
 802   5                                              draw_srec(p1,p2,0);
 803   5                                              set2=0;
 804   5                                      }
 805   4                                      if(set3)                                        /*上次数据下降三格以上的情况*/
 806   4                                      {
 807   5                                              p1.x=max-2;
 808   5                                              p2.x=max-1;
 809   5                                              draw_srec(p1,p2,0);
 810   5                                              set3=0;
 811   5                                      }
 812   4                              
 813   4                              }
 814   3                              p2.x=num-1;                                             /*显示本次数据的条形图*/
 815   3                              p1.x=lbarnum;
 816   3                              draw_srec(p1,p2,0xff);
 817   3                              max=num;                                                /*保存当前的最大值*/
 818   3                              direction=1;                                    /*标志本次的数据变化方向为上升*/
 819   3                      }
 820   2                      else if(lbarnum>num)                            /*本次数据小于上一次的数据*/
 821   2                      {
 822   3                              if(direction)                                   /*上一次数据变化的方向为上升*/
 823   3                              {
 824   4                                      if(lbarnum-num==1)                      /*本次数据比上一次数据下降一格*/
 825   4                                      {
 826   5                                              p1.x=num;
 827   5                                              p2.x=lbarnum-1;
 828   5                                              draw_srec(p1,p2,0);
 829   5                                              set1=1;
 830   5                                      }
 831   4                                      else if(lbarnum-num==2)         /*本次数据比上一次数据下降两格*/
 832   4                                      {
 833   5                                              p1.x=num;
 834   5                                              p2.x=lbarnum-2;
 835   5                                              draw_srec(p1,p2,0);
 836   5                                              cursor.x=max;
 837   5                                              cursor.y=17;
 838   5                                              transfer(max);
 839   5                                              set2=1;
 840   5                                      }
 841   4                                      else                                            /*本次数据比上一次数据下降三格以上*/
 842   4                                      {
 843   5                                              p1.x=num;
 844   5                                              p2.x=lbarnum-3;
 845   5                                              draw_srec(p1,p2,0);
 846   5                                              cursor.x=max;
 847   5                                              cursor.y=17;
 848   5                                              transfer(max);
 849   5                                              set3=1;
 850   5                                      }
 851   4      
 852   4                              }
 853   3                              else                                                    /*上一次数据变化的方向为下降*/
 854   3                              {
 855   4                                      p1.x=num;
 856   4                                      p2.x=lbarnum-1;
 857   4                                      draw_srec(p1,p2,0);
 858   4                                      if(set1)                                        /*当上一次下降一格而本次仍为下降时显示保持条及数字*/
 859   4                                      {
 860   5                                              p1.x=max-1;
 861   5                                              p2.x=max-1;
C51 COMPILER V7.07   LCDX1                                                                 01/25/2005 13:50:05 PAGE 15  

 862   5                                              draw_srec(p1,p2,0xff);
 863   5                                              cursor.x=max;
 864   5                                              cursor.y=17;
 865   5                                              transfer(max);
 866   5                                              set1=0;
 867   5                                              set4=1;
 868   5                                      }
 869   4                              }
 870   3                              direction=0;                                    /*标志本次数据变化方向为下降*/
 871   3                      }
 872   2                      p1.x=lbarnum;                                           /*清除上一次条形图数字*/                        
 873   2                      p1.y=34;
 874   2                      p2.x=lbarnum+15;
 875   2                      p2.y=40;
 876   2                      draw_srec(p1,p2,0);
 877   2      
 878   2                      cursor.x=num;                                           /*显示本次条形图数字*/  
 879   2                      cursor.y=33;
 880   2                      transfer(num);
 881   2              }
 882   1              lbarnum=num;                                                    /*存储本次数据*/
 883   1      }
 884          
 885          /*标志闪动处理程序(处理电池符号的闪动)*/
 886          void flash_func()
 887          {
 888   1              if(batf==1) 
 889   1              {
 890   2                      disp_bat(batnum,sec);
 891   2                      disp_bat_edge(sec);
 892   2              }
 893   1      }
 894          
 895          /*定时器0初始化,2ms中断一次*/
 896          void init0()
 897          {
 898   1              TMOD=0x21;
 899   1              TH0=-(2000/256);
 900   1              TL0=-(2000%256);
 901   1              EA=1;
 902   1              ET0=1;
 903   1              TR0=1;
 904   1      }
 905          
 906          /*串口初始化,11.0592晶振,baud rate:9600bps*/
 907          void  init(void)
 908          {
 909   1              TMOD=0x21;
 910   1              TH1=0xfd;
 911   1              TL1=0xfd;
 912   1              PCON=0;
 913   1              TR1=1;
 914   1              SCON=0x50;
 915   1      }
 916          
 917          /*定时器0中断程序,sec标志0.5秒翻转一次*/
 918          void timer0(void)interrupt 1 using 1
 919          {
 920   1              TH0=-(2000/256);
 921   1              TL0=-(2000%256);
 922   1              if(counter==250) {sec=!sec; counter=0;}
 923   1              else counter++;
C51 COMPILER V7.07   LCDX1                                                                 01/25/2005 13:50:05 PAGE 16  

 924   1      }
 925          
 926          /*串口接收子程序*/
 927          void receive(uchar idata* d)
 928          {
 929   1              uchar i;
 930   1              do
 931   1              {
 932   2                      while(RI==0) {flash_func();} 
 933   2                      RI=0;
 934   2              }
 935   1              while((SBUF^ASK)!=0);
 936   1              SBUF=RESP;
 937   1              while(TI==0);TI=0;
 938   1              while(1)
 939   1              {
 940   2                      pf=0;
 941   2                      for(i=0;i<8;i++)
 942   2                      {
 943   3                              while(RI==0);RI=0;
 944   3                              d[i]=SBUF;
 945   3                              pf+=d[i];
 946   3                      }
 947   2                      while(RI==0); 
 948   2                      RI=0;
 949   2                      if((SBUF^pf)==0) 
 950   2                      {
 951   3                              SBUF=OK;
 952   3                              while(TI==0);TI=0;
 953   3                              break;
 954   3                      }
 955   2                      else 
 956   2                      {
 957   3                              SBUF=ERR;

⌨️ 快捷键说明

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