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

📄 oscilloscope.lst

📁 单片机通过DA对信号采样
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   OSCILLOSCOPE                                                          08/15/2005 19:39:16 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE OSCILLOSCOPE
OBJECT MODULE PLACED IN oscilloscope.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE oscilloscope.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<AT89X52.H>
   2          #include<absacc.h>
   3          #include<intrins.h>
   4          #define unchar  unsigned char 
   5          #define unint   unsigned int
   6          #define DisCmd XBYTE [0xC100]                     //7218控制字地址
   7          #define DisData XBYTE [0xC000]                    //7218数据口地址
   8          #define LedMode P1_5
   9          #define scode 0xb0                                //7218软件译码方式命令字
  10          #define bcode 0x90                                //B码译码方式命令字
  11          #define hexcode 0xd0                              //软件译码方式命令字
  12          
  13          //*****************************************************************************************************
  14          //#define Select_A                XBYTE[0xA0F3]  //|A路选通/断路            |     01/00
  15          #define Select_AB               XBYTE[0xA0F3]  //|A,B路选通/断路            |     01/02/03(A,B,AB)
  16          #define Vertical_Gain_A         XBYTE[0xA0F4]  //|A垂直增益挡位(三挡)   |     00/01/02
  17          #define Vertical_Move_A         XBYTE[0xA0F5]  //|A垂直移动波形           |     00 ~ FF
  18          //#define Select_B                XBYTE[0xA0F6]  //|B路选通/断路            |     01/00
  19          #define Vertical_Gain_B         XBYTE[0xA0F7]  //|B垂直增益挡位(三挡)   |     00/01/02
  20          #define Vertical_Move_B         XBYTE[0xA0F8]  //|B垂直移动波形           |     00 ~ FF
  21          #define Single_Auto_Select      XBYTE[0xA0F9]  //|单次/连续触发方式切换; |     01/00  
  22          #define Trigger_Voltage         XBYTE[0xA0FA]  //|单次触发电平值          |     00 ~ FF
  23          #define Lock_Wave               XBYTE[0xA0FB]  //|锁存当前波形;          |     先01后00
  24          #define X_Freq_High             XBYTE[0xA0FC]  //|水平增益频率高八位;    |     00 ~ 3F
  25          #define X_Freq_Low              XBYTE[0xA0FD]  //|水平增益频率低八位;    |     00 ~ FF
  26          #define X_Move                  XBYTE[0xA0FE]  //|水平移动相位八位;      |     00 ~ C7
  27          #define RESET                   XBYTE[0xA0FF]  //|重置信号reset;         |     置01
  28          //*****************************************************************************************************
  29          bit    Enter;                                               //enter键按下标志
  30          bit    Glint_Flag;                                           //闪烁标志位
  31          bit    Special_Down_Flag;
  32          bit    Shift_Flag;
  33          bit    Lock_Wave_Flag;
  34          //bit    Select_A_Flag;
  35          //bit    Select_B_Flag;
  36          //bit    Lock_Wave;
  37          bit    Led_On=1;
  38          unchar Select_Flag;
  39          
  40          unchar keynum;
  41          unchar Single_Flag;                                            //单步标志
  42          unchar Vertical_Pos_A;                                         //垂直偏移位置A
  43          unchar Vertical_Pos_B;                                         //垂直偏移位置B
  44          unchar Vertical_Gain_A_Grade;                                  //垂直增益等级A
  45          unchar Vertical_Gain_B_Grade;                                  //垂直增益等B
  46          unint  X_Frequence;                                            //X轴扫描频率
  47          unint  X_Pos;                                                  //X轴平移位置
  48          unint  Trigger_V;                                              //触发电平
  49          unchar Key_Flag;                                              //功能键按键标志
  50          unchar ledcursor=7;                                           //保存光标当前位置
  51          unchar distab[8]={0x12,0x13,0x14,0x00,0x12,0x12,0x0e,0x11};   //要显示的内容 hello-pp
  52          unchar code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
  53                                 //0,   1,    2,   3,   4,   5,   6,   7 
  54                                 0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
  55                                 //8    ,9   ,a   ,b   ,c    ,d  ,e    ,f  
C51 COMPILER V7.09   OSCILLOSCOPE                                                          08/15/2005 19:39:16 PAGE 2   

  56                                 0x80,0xbe,0x8b,0xee,0x84 };
  57                                 //熄灭 H    L    P    -
  58          //*****************************************************************************************************
  59          extern void lcd_init();
  60          extern void lcd_write_passage(unchar *string);
  61          extern void lcd_write_sentence(unchar row,unchar col,unchar *string);
  62          extern void lcd_write_command(unchar c);
  63          extern void lcd_write_data(unchar ddata); //向LCD模块的字符发生器或显存写一个字节data。 
  64          extern void lcd_clear();
  65          //*****************************************************************************************************
  66          void delay200ms()
  67           { 
  68   1         int i=10000,j=1000;
  69   1         for(;i>0;i--)
  70   1         for(;j>0;j--);
  71   1        } 
  72          //***************************************************************************************   
  73          void display(unchar dot)
  74          {
  75   1         unchar i; 
  76   1         LedMode=1;
  77   1         DisCmd=scode;            //采用软件译码
  78   1         LedMode=0;
  79   1         if(Led_On)
  80   1         {
  81   2         for(i=0;i<8;i++)      //将distab中的数据送如7218
  82   2         {
  83   3           if((i==dot)&(dot!=0))
  84   3                 DisData=ledtab[distab[i]]+0x80; //查表转化并将字型送入7218
  85   3              else
  86   3             DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
  87   3         } 
  88   2        }
  89   1      }      
  90          //***************************************************************************************  
  91          void glint() //glintflag为1闪烁,flag为0,不闪烁;
  92          {
  93   1        
  94   1        unchar  i;
  95   1        while(Glint_Flag&Led_On)            //光标位置闪烁
  96   1         {
  97   2          LedMode=1;
  98   2          DisCmd=scode;         //采用软件译码
  99   2              LedMode=0;
 100   2          for(i=0;i<8;i++)      //将distab中的数据送如7218       
 101   2            {
 102   3              if(i==ledcursor)
 103   3                      DisData=0x80; //查表转化并将字型送入7218 
 104   3                  else
 105   3                  DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
 106   3            }
 107   2               delay200ms();
 108   2               LedMode=1;
 109   2               DisCmd=scode;            
 110   2               display(0);
 111   2           delay200ms();
 112   2         }
 113   1      }
 114          //***************************************************************************************
 115          /*初始化:A0F3:1, A0F4:2, A0F5:00, A0F6:0, A0F7:2, A0F8:00, A0F9:0, 
 116                    A0FA:00, A0FB:0, A0FC:40, A0FD:00;初始挡位, A0FE:00  */
 117          void FpgaInitial()     //初始化程序
C51 COMPILER V7.09   OSCILLOSCOPE                                                          08/15/2005 19:39:16 PAGE 3   

 118          {
 119   1        Select_AB=1;
 120   1        Vertical_Gain_A=2;
 121   1        Vertical_Move_A=0;
 122   1        //Select_A=0;
 123   1        Vertical_Gain_B=2;
 124   1        Vertical_Move_B=0;
 125   1        Single_Auto_Select=0;
 126   1        Trigger_Voltage=0;
 127   1        Lock_Wave=0;
 128   1        X_Freq_High=0x03;
 129   1        X_Freq_Low=0xE8;
 130   1        X_Move=0;
 131   1      }
 132          //***************************************************************************************
 133          void Reset()         //Fpga复位
 134          {
 135   1        //Special_Down_Flag=1;
 136   1        RESET=00;
 137   1      }
 138          //***************************************************************************************
 139          void Set_X_Freq()   //设置X轴扫描频率,Key_Flag:1
 140          {  
 141   1         Shift_Flag=1;
 142   1         //unint Freq,temp;
 143   1         Led_On=1;
 144   1         Key_Flag=1;
 145   1         ledcursor=4;
 146   1         Glint_Flag=1;
 147   1         distab[0]=0x00;
 148   1         distab[1]=0x00;
 149   1         distab[2]=0x00;
 150   1         distab[3]=0x00;
 151   1         distab[4]=0x00;
 152   1         distab[5]=0x10;
 153   1         distab[6]=0x10;
 154   1         distab[7]=0x01;
 155   1         display(0);
 156   1         lcd_clear();
 157   1         lcd_write_sentence(1,0,"请输X 轴扫描频率");
 158   1         lcd_write_sentence(2,1,"频率范围:");
 159   1         lcd_write_sentence(3,1,"0-100KHZ");
 160   1         
 161   1      }
 162          //***************************************************************************************
 163          void Set_X_Pos()
 164          {
 165   1         Shift_Flag=1;
 166   1         lcd_clear();
 167   1         Key_Flag=2;
 168   1         ledcursor=2;
 169   1         Glint_Flag=1;
 170   1         Led_On=1;
 171   1         distab[0]=0x00;
 172   1         distab[1]=0x00;
 173   1         distab[2]=0x00;
 174   1         distab[3]=0x10;
 175   1         distab[4]=0x10;
 176   1         distab[5]=0x10;
 177   1         distab[6]=0x10;
 178   1         distab[7]=0x02;
 179   1         display(0); 
C51 COMPILER V7.09   OSCILLOSCOPE                                                          08/15/2005 19:39:16 PAGE 4   

 180   1         lcd_write_sentence(1,0,"请输入水平移相");
 181   1         lcd_write_sentence(2,1,"位置范围:");
 182   1         lcd_write_sentence(3,2,"0-200");
 183   1         
 184   1      }
 185          void Set_Trigger_Voltage()
 186          {
 187   1         Shift_Flag=1;
 188   1         lcd_clear();
 189   1         Key_Flag=3;
 190   1         ledcursor=2;
 191   1         Led_On=1;
 192   1         Glint_Flag=1;
 193   1         distab[0]=0x00;
 194   1         distab[1]=0x00;
 195   1         distab[2]=0x00;
 196   1         distab[3]=0x10;
 197   1         distab[4]=0x10;
 198   1         distab[5]=0x10;
 199   1         distab[6]=0x10;
 200   1         distab[7]=0x03;
 201   1         //display(2); 
 202   1         lcd_write_sentence(1,0,"请输入触发电平");
 203   1         lcd_write_sentence(2,1,"电平范围:");
 204   1         lcd_write_sentence(3,2,"0-5V");
 205   1         
 206   1       }
 207          //***************************************************************************************
 208          void Lock_Current_Wave()
 209          {
 210   1        //Special_Down_Flag;
 211   1        Lock_Wave_Flag=!Lock_Wave_Flag;
 212   1        Led_On=0;
 213   1        //Lock_Wave=Lock_Wave_Flag;
 214   1        lcd_clear();
 215   1        if(Lock_Wave_Flag)
 216   1        {
 217   2        lcd_write_sentence(2,1,"波形锁存成功!");
 218   2        Lock_Wave=1;
 219   2        }
 220   1        else
 221   1        {
 222   2        lcd_write_sentence(2,1,"波形解除锁定!");
 223   2        Lock_Wave=0;
 224   2        }
 225   1      }
 226          //***************************************************************************************
 227          void Single_Select()
 228          {
 229   1        //Special_Down_Flag
 230   1        lcd_clear();
 231   1        Led_On=0;
 232   1        Single_Flag=!Single_Flag;
 233   1        Single_Auto_Select=Single_Flag;
 234   1        lcd_clear();
 235   1        lcd_write_sentence(1,0,"当前触发状态:");
 236   1        if(Single_Flag)
 237   1        lcd_write_sentence(2,1,"单步");
 238   1        else
 239   1        lcd_write_sentence(2,1,"连续");
 240   1      }
 241          
C51 COMPILER V7.09   OSCILLOSCOPE                                                          08/15/2005 19:39:16 PAGE 5   

 242          //***************************************************************************************
 243          void Select_AB_Channel()
 244          {
 245   1        lcd_clear();
 246   1        Led_On=0;
 247   1        
 248   1       // if(Select_Flag%3)
 249   1       // Select_Flag=0;
 250   1       // else
 251   1       // {
 252   1         switch(Select_Flag%3)
 253   1         {
 254   2          case 0:
 255   2          Select_AB=1;
 256   2              //Select_B=0;
 257   2          lcd_clear();
 258   2          lcd_write_sentence(2,1,"A 路选通");
 259   2          lcd_write_sentence(3,1,"B 路关闭");
 260   2              break;
 261   2          case 1:
 262   2          Select_AB=2;
 263   2              //Select_B=1;
 264   2          lcd_clear();
 265   2          lcd_write_sentence(2,1,"A 路关闭");
 266   2          lcd_write_sentence(3,1,"B 路选通");
 267   2              break;
 268   2              case 2:
 269   2          Select_AB=3;
 270   2              //Select_B=1;
 271   2          lcd_clear();
 272   2          lcd_write_sentence(2,1,"A 路选通");
 273   2          lcd_write_sentence(3,1,"B 路选通");
 274   2              break;
 275   2          default:
 276   2              break;
 277   2       //  }
 278   2          }
 279   1          Select_Flag++; 
 280   1      }
 281          
 282          //***************************************************************************************
 283          void Vertical_GainA()
 284          { Led_On=0;
 285   1        Vertical_Gain_A_Grade++;
 286   1        if(Vertical_Gain_A_Grade>2)
 287   1        Vertical_Gain_A_Grade=0;
 288   1        else
 289   1        {
 290   2        Vertical_Gain_A=Vertical_Gain_A_Grade;
 291   2        lcd_clear();
 292   2        lcd_write_sentence(1,0,"当前垂直增益档位");
 293   2        lcd_write_sentence(2,2,"A 路");
 294   2        switch(Vertical_Gain_A_Grade)
 295   2         {
 296   3         case 0:
 297   3         lcd_write_sentence(3,1,"0.01V/div");
 298   3         break;
 299   3         case 1:
 300   3         lcd_write_sentence(3,1,"0.1V/div");
 301   3         break;
 302   3         case 2:
 303   3         lcd_write_sentence(3,1,"1V/div");

⌨️ 快捷键说明

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