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

📄 main.lst

📁 DDS 单片机控制AD7008 产生正弦波
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 21:14:39 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "LCM12864.h"
   2          #include "AD7008.h"
   3          
   4          #define ZLG7290_Key 0x01 //键值寄存器地址
   5          
   6          volatile bit  Key_INT = 0;
   7          volatile bit  SIN_F = 0;
   8          volatile bit  AM_F  = 0;
   9          volatile bit  FM_F  = 0;
  10          volatile bit  PSK_F = 0;
  11          volatile bit  ASK_F = 0;
  12          unsigned char KeyValue;
  13          unsigned char Key_disp[8];
  14          unsigned char n;
  15          unsigned char m1=0,m2=0;
  16          unsigned long FW;
  17          unsigned char i;
  18          
  19          bit fb = 0;
  20          
  21          code char STR2[]="载波频率(Hz):";
  22          code char clr[]= "          " ;
  23          code char STR3[]="通信工程系 ";
  24          code unsigned char sinam[]={
  25          127, 152, 176, 198, 217, 233, 244, 252, 255, 252, 244, 233, 217, 198, 176, 
  26          152, 127, 102, 78, 56, 37, 21, 10, 2, 0, 2, 10, 21, 37, 56, 
  27          78, 102};
  28          code unsigned char sintab[]={
  29          0x0, 0x0, 0x6C, 0x80,  0x0, 0x0, 0x81, 0x56,  0x0, 0x0, 0x95, 0x7E,  0x0, 0x0, 0xA9, 0xCF,  0x0, 0x0, 0xBA
             -, 0x9B,  
  30          0x0, 0x0, 0xC7, 0x0B,  0x0, 0x0, 0xD0, 0x48,  0x0, 0x0, 0xD6, 0x29,  0x0, 0x0, 0xD7, 0x00,  0x0, 0x0, 0xD4
             -, 0xA4,  
  31          0x0, 0x0, 0xCC, 0x15,  0x0, 0x0, 0xC0, 0x53,  0x0, 0x0, 0xB1, 0x35,  0x0, 0x0, 0xA0, 0x92,  0x0, 0x0, 0x8B
             -, 0x6A,  
  32          0x0, 0x0, 0x76, 0x6B,  0x0, 0x0, 0x61, 0x95,  0x0, 0x0, 0x4C, 0x96,  0x0, 0x0, 0x37, 0x6E,  0x0, 0x0, 0x26
             -, 0xCB,  
  33          0x0, 0x0, 0x17, 0xAD,  0x0, 0x0, 0x0B, 0xEB,  0x0, 0x0, 0x03, 0x5C,  0x0, 0x0, 0x00, 0x00,  0x0, 0x0, 0x00
             -, 0xD7,  
  34          0x0, 0x0, 0x07, 0xB8,  0x0, 0x0, 0x10, 0xF5,  0x0, 0x0, 0x1D, 0x65,  0x0, 0x0, 0x2E, 0x31,  0x0, 0x0, 0x42
             -, 0x82,  
  35          0x0, 0x0, 0x56, 0xAA,  0x0, 0x0, 0x6C, 0x80};
  36          void Delayns()
  37          {
  38   1              unsigned char ii = 30;
  39   1              do
  40   1              {
  41   2                      ii--;
  42   2              }while (ii!=0);
  43   1      }
  44          void INT_E0() interrupt 0 using 1
  45          {
  46   1           Key_INT = 1;
  47   1      }
  48          unsigned long BCDtoHEX(unsigned char *bcd)
  49          {
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 21:14:39 PAGE 2   

  50   1              unsigned long k;
  51   1              unsigned char i;
  52   1              i = 0;
  53   1              k = 0;
  54   1              while(i<n)
  55   1              {
  56   2                   k = k * 10;
  57   2                   k += bcd[i];
  58   2                   i++;
  59   2              }
  60   1              return k;
  61   1      }
  62          void HEXtoBCD(unsigned long hex, unsigned char *bcd)
  63          {
  64   1              char i;
  65   1              for (i=7; i>=0; i--)
  66   1              {
  67   2                      bcd[i] = hex % 10;
  68   2                      hex = hex / 10;
  69   2              }
  70   1      }
  71          void main()
  72          {
  73   1              unsigned char jj;
  74   1              unsigned char h=0;
  75   1              unsigned long k1;
  76   1              unsigned char f1,f2,f3,f4;
  77   1              I2C_Init();
  78   1              Init_LCM();
  79   1              CLEAR();
  80   1              Init_AD7008();
  81   1              FW = 1000;
  82   1              Display(STR2,0x80); // 上面一行显示一个预定字符串
  83   1              Display(STR3,0x98);
  84   1              Delayus(200);
  85   1              Write_command(0x90,0);
  86   1              Write_command(0x0f,0); //光标处反白闪烁
  87   1              IT0 = 1;        //负边沿触发中断
  88   1              EX0 = 1;        //允许外部中断
  89   1              EA  = 1;
  90   1              while(1)
  91   1              {
  92   2                      if(Key_INT == 1)
  93   2                      {
  94   3                              Key_INT = 0;
  95   3                              ZLG7290_ReadReg(ZLG7290_Key, &KeyValue);
  96   3                              switch (KeyValue)
  97   3                              {
  98   4                              case 1: //数字键
  99   4                              case 2:
 100   4                              case 3:
 101   4                              case 4:
 102   4                              case 5:
 103   4                              case 6:
 104   4                              case 7:
 105   4                              case 8:
 106   4                              case 9:
 107   4                              case 10:
 108   4                              {
 109   5                                      if(n == 0)      //清除显示
 110   5                                      {
 111   6                                              Display(clr, 0x90);
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 21:14:39 PAGE 3   

 112   6                                              Write_command(0x90,0);
 113   6                                              Write_command(0x0f,0); //光标处反白闪烁
 114   6                                      }
 115   5                                      if(n>7) break;
 116   5                                      if(KeyValue == 10) KeyValue = 0;
 117   5                                      Key_disp[n] = KeyValue;
 118   5                                      Write_data(Key_disp[n] + 0x30);
 119   5                                      n++;
 120   5                                      break;
 121   5                              }
 122   4                              case 11:  //确认
 123   4                              {
 124   5                                      FSELECT = 0;
 125   5                                      if(n > 0)
 126   5                                      {
 127   6                                              FW = BCDtoHEX(Key_disp);
 128   6                                              Write_command(0x0c,0);
 129   6                                              n = 0;
 130   6                                              SendFW(FW,0); //发送频率控制字到:FREQ0
 131   6                                      }
 132   5                                      break;
 133   5                              }
 134   4                              case 12:  //步进100Hz
 135   4                              {
 136   5                                      FW = FW + 100;
 137   5                                      SendFW(FW,0); //发送频率控制字到:FREQ0
 138   5                                      HEXtoBCD(FW,Key_disp);
 139   5                                      Display(clr, 0x90);
 140   5                                      Write_command(0x90,0);
 141   5                                      h = 0;
 142   5                                      for(jj=0;jj<8;jj++) //LCD显示,去除高位的0
 143   5                                      {
 144   6                                              if(Key_disp[jj] != 0 || h == 1)
 145   6                                              {
 146   7                                                      h = 1;
 147   7                                                      Write_data(Key_disp[jj] + 0x30);
 148   7                                              }
 149   6                                      }
 150   5                                      break;
 151   5                              }
 152   4                              case 13:  //减小100Hz
 153   4                              {
 154   5                                      FW = FW - 100;
 155   5                                      SendFW(FW,0); //发送频率控制字到:FREQ0
 156   5                                      HEXtoBCD(FW,Key_disp);
 157   5                                      Display(clr, 0x90);
 158   5                                      Write_command(0x90,0);
 159   5                                      h = 0;
 160   5                                      for(jj=0;jj<8;jj++)
 161   5                                      {
 162   6                                              if(Key_disp[jj] != 0 || h == 1)
 163   6                                              {
 164   7                                                      h = 1;
 165   7                                                      Write_data(Key_disp[jj] + 0x30);
 166   7                                              }
 167   6                                      }
 168   5                                      break;
 169   5                              }
 170   4                              case 14:   //ASK 幅移键控
 171   4                              {
 172   5                                      SendIQMOD(0x00);
 173   5                                      while(!Key_INT)
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 21:14:39 PAGE 4   

 174   5                                      {
 175   6                                              if(fb == 0) {SendCM(0x04);fb = 1;Delayns();}
 176   6                                              else {SendCM(0x00);fb = 0;Delayns();}
 177   6                                      }
 178   5                                      SendCM(0x00);
 179   5                                      break;
 180   5                              }
 181   4                              case 19:  //PSK 相移键控
 182   4                              {
 183   5                                      while(!Key_INT)
 184   5                                      {
 185   6                                              if(fb == 0) {SendPW(2048);fb = 1;Delayns();}
 186   6                                              else {SendPW(0);fb = 0;Delayns();}
 187   6                                      }
 188   5                                      SendPW(0);
 189   5                                      break;
 190   5                              }
 191   4                              case 16:  //FM 调频
 192   4                              {
 193   5                                      i=0;
 194   5                                      FSELECT = 0;
 195   5                              k1=FW * FW_1Hz;
 196   5                              f4=k1/0x1000000;
 197   5                              f3=k1%0x1000000/0x10000;
 198   5                              f2=k1%0x10000/0x100;
 199   5                              f1=k1%0x100;
 200   5                                      while(!Key_INT)
 201   5                                      {
 202   6                                      write(f4+sintab[i++]);
 203   6                                      write(f3+sintab[i++]);
 204   6                                      write(f2+sintab[i++]);
 205   6                                      write(f1+sintab[i++]);
 206   6                                      load(FREQ0);
 207   6                                              i &= 0x7f;
 208   6                                      }
 209   5                                      SendFW(FW,0);
 210   5                                      break;
 211   5                              }
 212   4                              case 15:  //AM 调幅
 213   4                              {
 214   5                                      i = 0;
 215   5                                      SendCM(0x04);
 216   5                                      if(m1 == 0xf0) 
 217   5                                      {
 218   6                                              m1 = 0;
 219   6                                              if(m2 > 0x03) m2 = 0;
 220   6                                              else m2++;
 221   6                                      }
 222   5                                      else m1 = m1 + 0x3c;
 223   5                                      while(!Key_INT)
 224   5                                      {
 225   6                                      write(m2);
 226   6                                      write(m1);
 227   6                                      write(sinam[i]);
 228   6                                      load(IQMOD);
 229   6                                              i++;
 230   6                                              i &= 0x1f;
 231   6                                      }
 232   5                                      SendCM(0x00);
 233   5                                      break;
 234   5                              }
 235   4                              case 18:  //FSK
C51 COMPILER V7.50   MAIN                                                                  08/08/2007 21:14:39 PAGE 5   

 236   4                              {
 237   5                                      SendFW(10000,1);
 238   5                                      while(!Key_INT)
 239   5                                      {
 240   6                                              if(fb == 0) {FSELECT = 0;fb = 1;Delayus(5);}
 241   6                                              else {FSELECT = 1;fb = 0;Delayus(5);}
 242   6                                      }
 243   5                                      FSELECT = 0;
 244   5                                      break;
 245   5                              }
 246   4                              default: break;
 247   4                              }
 248   3                      }
 249   2              }
 250   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1095    ----
   CONSTANT SIZE    =    197    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17      26
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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