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

📄 signal_show.lst

📁 简易示波器 (采样点在屏上显示虚线曲线)
💻 LST
📖 第 1 页 / 共 3 页
字号:
 648          }*/
 649          /***************************************************************
 650          *名称:showsine (void)
 651          *描述:显示采样的结果,采64个点但显示256点
 652          *参数:xr_temp[]显示数组,N_temp数组元素个数,
 653                     start_add图形开始的x地址,last上次显示最后一个元素
 654          *返回:
 655          ****************************************************************/
 656          /*void showsine (uchar xr_temp[],uchar N_temp,uchar start_add,uchar last)
 657          {
 658                  uchar i ;
 659                  WriteD(start_add,xr_temp[1]>>1);
 660                  vector(start_add-1,last>>1,xr_temp[1]>>1);
 661                  for(i=2;i<N_temp;i++)
 662                  {
 663                          WriteD(i-1+start_add,xr_temp[i]>>1);
 664                          vector(i-2+start_add,xr_temp[i-1]>>1,xr_temp[i]>>1);
 665                  }
 666          }*/
 667          void led_display(uchar i)
 668          {
 669   1          uchar j,mask;
 670   1              mask=0x01;
 671   1              for(j=0;j<8;j++){
 672   2                      LED_CLK=0;
 673   2                      LED_DAT=( (LED_FONT[i]) & mask);
 674   2                      mask<<=1;
 675   2                      LED_CLK=1;   //上升沿移位
C51 COMPILER V7.06   SIGNAL_SHOW                                                           03/26/2007 17:35:00 PAGE 12  

 676   2              }
 677   1      }
 678          void refresh_led()
 679          {
 680   1              led_display(10);
 681   1              led_display(value[0]);
 682   1              led_display(value[1]);
 683   1              led_display(value[2]);
 684   1              led_display(value[3]);
 685   1              led_display(value[4]);
 686   1      }
 687          void init_interrupt()
 688          { 
 689   1              EA=0;
 690   1              EX1=1;
 691   1              PX1=1;
 692   1              IE1=0;
 693   1              IT1=1;        //外部中断1为跳变触发方式
 694   1      
 695   1              PX0=1;
 696   1              EX0=1;
 697   1              IE0=0;
 698   1              IT0=1;        //外部中断0为跳变触发方式
 699   1      }
 700          void show_f(unsigned int freq)
 701          {
 702   1              unsigned int idata time,temp;
 703   1              uchar x,y;
 704   1              time = 25000/freq;
 705   1              x=10;y=162;
 706   1              temp=time/1000;
 707   1              show_num(x,y,CC000+(temp<<4));          
 708   1              x=x+8;
 709   1              temp=(time%1000)/100;
 710   1              show_num(x,y,CC000+(temp<<4));
 711   1              x=x+8;
 712   1              temp=(time%100)/10;
 713   1              show_num(x,y,CC000+(temp<<4));
 714   1              x=x+8;
 715   1              temp=time%10;
 716   1              show_num(x,y,CC000+(temp<<4));
 717   1      }
 718          void main()
 719          {
 720   1              unsigned int idata k=0  ;
 721   1              unsigned int idata x,y; 
 722   1              unsigned char idata value_index;
 723   1              unsigned int idata freq,freq_2;
 724   1              bit flag_grid=0;
 725   1      
 726   1              lcd_a0=1;
 727   1              lcd_wr = 1 ;
 728   1              initall() ;
 729   1              showchin() ;
 730   1              refresh_led();
 731   1              show_f(5000);
 732   1              init_interrupt();
 733   1      
 734   1              TMOD = 0x01;// 定时器相关设置
 735   1              ET0 = 1;
 736   1              TR0 = 1;
 737   1                      
C51 COMPILER V7.06   SIGNAL_SHOW                                                           03/26/2007 17:35:00 PAGE 13  

 738   1              k=1;
 739   1              num = 0;
 740   1              value_index=0;
 741   1              Adc_cs = 0 ;
 742   1              lcd_wr = 0 ;
 743   1              lcd_wr = 1 ;
 744   1              Adc_cs = 1 ;
 745   1              EX1=1;
 746   1              TH0 = dH;
 747   1              TL0 = dL;
 748   1              ET0=1;
 749   1              EA = 1;
 750   1      
 751   1              clear_1(8,0);
 752   1              clear_1(16,0);
 753   1              clear_1(24,0);
 754   1      
 755   1              clear_1(32,0);
 756   1              x=32;y=25;
 757   1              clear(x,y,21);
 758   1      
 759   1          while(1)
 760   1          {
 761   2                      if(key_pressed==ON)
 762   2              {  
 763   3                              EX0=0;
 764   3                      switch(key_no)
 765   3                              {
 766   4                                      case key0:
 767   4                                      case key1: 
 768   4                                      case key2: 
 769   4                                      case key3: 
 770   4                              case key4: 
 771   4                              case key5:
 772   4                              case key6:
 773   4                              case key7:
 774   4                              case key8:
 775   4                              case key9:
 776   4                                      if(value_index<5)
 777   4                                      {
 778   5                                              value[value_index]=key_no;
 779   5                                              value_index++;
 780   5                                      }
 781   4                                              refresh_led();
 782   4                                      break;
 783   4                                      case key_enter:
 784   4                                              freq=value[0]*10000+value[1]*1000+value[2]*100+value[3]*10+value[4];
 785   4                                              if(freq>7000)
 786   4                                              {
 787   5                                                      freq=7000;
 788   5                                                      freq_2=0xff71;
 789   5                                                      value[0]=0;
 790   5                                                      value[1]=7;
 791   5                                                      value[2]=0;
 792   5                                                      value[3]=0;
 793   5                                                      value[4]=0;
 794   5                                              }
 795   4                                              else if(freq<50)
 796   4                                              {
 797   5                                                      freq=50;
 798   5                                                      freq_2=0xb1df;
 799   5                                                      value[0]=0;
C51 COMPILER V7.06   SIGNAL_SHOW                                                           03/26/2007 17:35:00 PAGE 14  

 800   5                                                      value[1]=0;
 801   5                                                      value[2]=0;
 802   5                                                      value[3]=5;
 803   5                                                      value[4]=0;
 804   5                                              }
 805   4                                              else freq_2=0xffff-(1000000/freq);
 806   4                                              refresh_led();
 807   4                                              dH=freq_2>>8;
 808   4                                              dL=(uchar)freq_2;
 809   4                                              show_f(freq);
 810   4                                              value_index=0;
 811   4                                              break;
 812   4                                      case key_mod:
 813   4                                              flag_grid=!flag_grid;
 814   4                                              if(flag_grid)DrawGrid();
 815   4                                              else{
 816   5                                                      initram_2();
 817   5                                                      DrawFrame();
 818   5                                              }
 819   4                                      default :break;
 820   4                              }
 821   3                              key_pressed=OFF;
 822   3                              EX0=1;
 823   3                      }
 824   2                      
 825   2                      if(k<=num)
 826   2                      {
 827   3                              lcd_cs=0;
 828   3                              turnon();                       
 829   3                              WriteD(k+24,(x_data[k]>>1)+40);
 830   3                      
 831   3                              if(k%8==0)
 832   3                              {
 833   4                                      x=x+8;
 834   4                                      y=25;
 835   4                              }
 836   3                              else y=y+21;                            
 837   3                              
 838   3                              clear(x,y,21);
 839   3                              if(k==127)
 840   3                              {
 841   4                                      lcd_cs=0;
 842   4                                      turnon();
 843   4                                      clear_1(24,0);
 844   4                                      num = 0;
 845   4                                      Adc_cs = 0 ;
 846   4                                      lcd_wr = 0 ;
 847   4                                      lcd_wr = 1 ;
 848   4                                      Adc_cs = 1 ;
 849   4                                      EX1=1;
 850   4                                      TH0 = dH;
 851   4                                      TL0 = dL;
 852   4                                      ET0=1;
 853   4                                      EA = 1;
 854   4      
 855   4                                      clear_1(8,0);
 856   4                                      clear_1(16,0);
 857   4                                      clear_1(24,0);
 858   4                                      clear_1(32,0);
 859   4                                      clear_1(40,0);
 860   4      
 861   4                                      x=32;y=25;
C51 COMPILER V7.06   SIGNAL_SHOW                                                           03/26/2007 17:35:00 PAGE 15  

 862   4                                      clear(x,y,21);
 863   4              
 864   4                                      WriteD(24,(x_data[0]>>1)+40);
 865   4                                      y=y+21;
 866   4                                      clear(x,y,21);
 867   4                                      k=0;
 868   4                              }
 869   3                              k++;
 870   3                      }
 871   2          }
 872   1      }
 873          
 874          void interrupt_handle() interrupt 2 using 1
 875          {       
 876   1              uchar idata temp_data;                          
 877   1          EA=0;                //CPU关中断
 878   1              lcd_cs=1;
 879   1              if(num!=127)
 880   1              {
 881   2                      Adc_cs = 0 ;
 882   2                      P0=0xff;
 883   2                      lcd_a0=0;
 884   2                      temp_data=P0;
 885   2                      lcd_a0=1;
 886   2                      Adc_cs = 1 ;
 887   2                      if(num==0)
 888   2                      {
 889   3                              if((temp_data>125)&(temp_data<135))
 890   3                              {
 891   4                                      x_data[0]=temp_data;
 892   4                                      num++;
 893   4                              }
 894   3                              
 895   3                      }
 896   2                      else if(num==1)
 897   2                      {
 898   3                              if(temp_data<x_data[0])
 899   3                              {
 900   4                                      x_data[1]=temp_data;
 901   4                                      num++;
 902   4                              }
 903   3                              else if((temp_data>125)&(temp_data<135))
 904   3                              {
 905   4                                      x_data[0]=temp_data;
 906   4                                      num=1;
 907   4                              }
 908   3                              else num=0;
 909   3      
 910   3                      }
 911   2                      else{
 912   3                              x_data[num]=temp_data;
 913   3                              num++;
 914   3                      }
 915   2                      EX1=1;
 916   2              }
 917   1              else EX1=0;
 918   1              lcd_cs=0;
 919   1              EA=1;
 920   1                          
 921   1      }
 922          
 923          void timer0(void) interrupt 1 using 1
C51 COMPILER V7.06   SIGNAL_SHOW                                                           03/26/2007 17:35:00 PAGE 16  

 924          {
 925   1              EA=0;
 926   1              lcd_cs=1;
 927   1              if(num!=127)
 928   1              {
 929   2                      Adc_cs = 0 ;
 930   2                      lcd_wr = 0 ;
 931   2                      lcd_wr = 1 ;
 932   2                      Adc_cs = 1 ;
 933   2                      TH0 = dH;
 934   2                      TL0 = dL;
 935   2                      ET0 = 1;
 936   2              }
 937   1              else ET0 = 0;   
 938   1              lcd_cs=0;
 939   1              EA=1;
 940   1      }
 941          void wait(void)
 942          {
 943   1              unsigned int i;
 944   1              for(i=0;i<5000;i++);
 945   1      }
 946          void interrupt_handle_key() interrupt 0 using 1
 947          {                                               
 948   1          EA=0;                //CPU关中断
 949   1              lcd_cs=1;
 950   1          wait();                     //键盘消抖延时
 951   1              if (Int_wire==0)
 952   1              {
 953   2                      key_pressed=ON;
 954   2                      P2=0xFF;
 955   2              key_no=P2&0x0F;        //读取P2口的低四位显示数据编码   
 956   2          }        
 957   1          lcd_cs=0;
 958   1          EA=1;                   //CPU开中断
 959   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2998    ----
   CONSTANT SIZE    =   1045    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      10
   IDATA SIZE       =    136      65
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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