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

📄 shiboqi.lst

📁 单片机DDS驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   SHIBOQI                                                               11/20/2007 14:15:22 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE SHIBOQI
OBJECT MODULE PLACED IN shiboqi.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE shiboqi.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //-----------------------------------------
   2          //
   3          //2007年全国电子设计大赛培训专用        
   4          //              基于DDS的信号发生器
   5          //                                              Design By BoBo&ShuiJian
   6          //------------------------------------------
   7          #include<reg51.h>
   8          #include<absacc.h>
   9          #include<stdio.h>
  10          #include"LCD.h"
  11          //----------每位的控制字-----------------
  12          #define FF7 357913941//858993459        //50M                                                                                                                   //2147483648  20M                       //357913941              120M                                                                                                                   
             -//385136686                 111MHz晶振
  13          #define FF6 35791394//85899346                                                                                                                                  //214748365                                     //35791394                                                                                                                                      //38513669
  14          #define FF5 3579139//8589935                                                                                                                                            //21474836                                      //3579139                                                                                                                                               //3851367
  15          #define FF4 357914//858993                                                                                                                                              //2147484                                       //357914                                                                                                                                                //385137
  16          #define FF3 35791//85899                                                                                                                                                //214748                                        //35791                                                                                                                                         //38514
  17          #define FF2 3579//8590                                                                                                                                          //21475                                         //3579                                                                                                                                          //3851
  18          #define FF1 358//859                                                                                                                                                    //2148                                          //358                                                                                                                                                   //385
  19          #define FF0 36//86                                                                                                                                                      //215                                           //36            
  20          //--------------8279端口定义--------------
  21          #define com XBYTE[0X0001]                                                                                                                       //命令字地址
  22          #define dat XBYTE[0X0000]                                                                                                                       //数据口地址
  23          //--------------DDS控制--------------------
  24          #define  data_OUT  XBYTE[0x1C00]                                                                                                                //采用总线方式CE7
  25          #define  data_OUT1      XBYTE[0x1400]                                                                                                           //采用总线方式CE5
  26          //--------------AD7524端口定义-------------
  27          #define AD7524  XBYTE[0x0C00]                                                                                                                   //程控衰减地址
  28          
  29          unsigned long data temp_r ;                                                                                                                             //频率值预存
  30          sfr AUXR = 0x8e;
  31          bit int_flag=0;                                                                                                                                                 /*中断标志位*/
  32          sbit clflag=ACC^7;
  33          unsigned char LCD_string[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'\0'};                              //LCD显示字符串变量
  34          unsigned char LCD_step[]={0x00,'\0'};
  35          unsigned char step_i=0;                                                                                                                                 //ma步进值下标  
  36          unsigned char step[]={0x00,0x19,0x32,0x4B,0x64,0x7D,0x96,0xAF,0xC8,0xE1,0xFA};                  //ma步进控制值
  37          unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};              //数码管段码
  38          unsigned char freq[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};                                                 //8位数码管频率值
  39          unsigned char con_word[5];                                                                                                                              //频率控制字
  40          unsigned char i,temp;                                                                                                                                   //temp用于存放临时命令状态字
  41          unsigned char key_value;                                                                                                                                //按键值
  42          //-----------------------主要函数--------------------------
  43          void IntToStr(void);                                                                                                                                    //LCD显示字符转换
  44          void longtoword(unsigned long num);                                                                                                             //长整型转频率控制字
  45          void write_ad9850(void);                                                                                                                                //控制字写入ad9850
  46          void write_ad98501(void);
  47          unsigned long jisuan(unsigned char data *fno);                                                                                  //频率值产生
  48          unsigned char keyin(void);                                                                                                                              //按键函数
  49          void setup_8279(void);                                                                                                                                  //8279初始化
  50          void display_led(void);                                                                                                                                 //数码管显示
  51          void delay(unsigned char i);                                                                                                                    //延时
  52          //------------------频率步进设置----------------------
  53          void f10Mhz(void);                                                                                                                                              //S1
  54          void f1Mhz(void);                                                                                                                                               //S2
C51 COMPILER V7.20   SHIBOQI                                                               11/20/2007 14:15:22 PAGE 2   

  55          void f100Khz(void);                                                                                                                                             //S3
  56          void f10Khz(void);                                                                                                                                              //S4
  57          void f1Khz(void);                                                                                                                                               //S5
  58          void f100Hz(void);                                                                                                                                              //S6    
  59          void f10Hz(void);                                                                                                                                               //S7
  60          void f1Hz(void);                                                                                                                                                //S8
  61          //-----------------------------------------------------
  62          void carry_sin(void);                                                                                                                                   //载波正弦波发生        S9
  63          void mod_sin(void);                                                                                                                                             //调制信号正弦波发生S10
  64          void ma_step(void);                                                                                                                                             //调制度10%步进
  65          void mode(void);
  66          unsigned char a,b,k;
  67          //-------------------------主函数--------------------------------
  68          void main(void)
  69          {
  70   1               
  71   1           Init_LCD();
  72   1               Clear_Screen();
  73   1           Write_Nopara_Command(0x98); 
  74   1           AUXR = 0x02;                                                                                                                                               /*STC单片机关内部RAM和开ALE*/
  75   1               EA=1;
  76   1               EX0=1;                                                                                                                                                         //开外部中断
  77   1               IT0=1;
  78   1              //-----------延时(必须加)-------------
  79   1              for(a=0;a<5;a++)
  80   1              {
  81   2                      for(b=0;b<50;b++)
  82   2                      {
  83   3                              for(k=0;k<50;k++);
  84   3                      }
  85   2              }
  86   1              //------------------------------------
  87   1              setup_8279();                                                                                                                                           //初始化8279
  88   1              delay(1000);
  89   1              Display_hz(2,0,"信号发生器");
  90   1              Display_String(12,0,"(Hz)");
  91   1              Display_hz(0,1,"载波");
  92   1              Display_String(4,1,":");
  93   1              Display_hz(0,2,"调制波");
  94   1              Display_String(6,2,":");
  95   1              Display_hz(0,3,"调制度");
  96   1              Display_String(6,3,":");
  97   1              while(1)
  98   1              {
  99   2                      mode();
 100   2              }
 101   1      }
 102          //------数码管显示----------------
 103          void display_led(void)
 104          {
 105   1              for(i=0;i<8;i++)
 106   1          {   com=0x80+i;                                                                                                                                             //写显示RAM
 107   2                      dat=dispcode[freq[7-i]];                                                                                                                //显示段码
 108   2                      delay(120);
 109   2              }
 110   1      }
 111          //-----8279初始化-----------------
 112          void setup_8279(void)
 113          {
 114   1              com=0x00;                                                                                                                                                       //键盘,显示方式
 115   1              com=0x34;                                                                                                                                                       //20分频  
 116   1              com=0xd1;                                                                                                                                                       //1101 0001b 清除所有显示
C51 COMPILER V7.20   SHIBOQI                                                               11/20/2007 14:15:22 PAGE 3   

 117   1              temp=com;                                                                                                                                                       //读状态字
 118   1              do{ACC=com;}
 119   1              while(clflag==1);                                                                                                                               //清除起来比较慢,所以一条指令执行的时间不足以完成所有清除,故需等待
 120   1      }
 121          
 122          //---------频率值转换控制字----------
 123          void longtoword(unsigned long num)
 124          {
 125   1              con_word[0]=0x00;                                                                                                                                       //置工作方式选择位为00
 126   1              con_word[4]=num&(0xff);
 127   1              num=num>>8;
 128   1              con_word[3]=num&(0xff);
 129   1              num=num>>8;
 130   1              con_word[2]=num&(0xff);
 131   1              num=num>>8;
 132   1              con_word[1]=num&(0xff);
 133   1      }
 134          /***计算控制字************/
 135          /***入口:频率数组指针***出口,控制字*****/
 136          unsigned long jisuan(unsigned char data *fno)
 137          {
 138   1          unsigned long dds_no ;
 139   1          dds_no=
 140   1          (*(fno+7))*FF7+
 141   1          (*(fno+6))*FF6+
 142   1          (*(fno+5))*FF5+
 143   1          (*(fno+4))*FF4+
 144   1          (*(fno+3))*FF3+
 145   1          (*(fno+2))*FF2+
 146   1          (*(fno+1))*FF1+
 147   1          (*fno)*FF0 ;
 148   1          return(dds_no);             
 149   1      }
 150          //---------------------进位判断-------------------
 151          unsigned char judge(unsigned char a)            
 152          {
 153   1              unsigned char b=0;
 154   1              if(a>=10)
 155   1              {
 156   2                      b=0;
 157   2              }
 158   1              else
 159   1              {
 160   2                      b=a;    
 161   2              }
 162   1              return b;
 163   1      
 164   1      }
 165          //-------------------步进按键or模式选择---------------
 166          void mode(void)                                                         
 167          {
 168   1              if(int_flag==1)
 169   1              {
 170   2                      int_flag=0;
 171   2                      switch(key_value)
 172   2                      {
 173   3                              case 0x40:f10Mhz();break;
 174   3                              case 0x41:f1Mhz();break;
 175   3                              case 0x42:f100Khz();break;

⌨️ 快捷键说明

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