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

📄 dds.lst

📁 使用keil C51编译的DDS的LED显示源码
💻 LST
字号:
C51 COMPILER V7.50   DDS                                                                   12/21/2006 15:07:00 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DDS
OBJECT MODULE PLACED IN dds.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE dds.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <absacc.h>
   2          #include <reg51.h>
   3          #include <stdlib.h>
   4          #include <math.h>
   5          #include <intrins.h>
   6          #include <lcdhead.h>
   7          #define uchar unsigned char
   8          #define uint unsigned int
   9          
  10          
  11          
  12          sbit LOAD=P2^4;                //送M值至寄存器
  13          sbit FQ_UP=P2^6;               //DDS显示
  14          sbit RESET_PHASEREG=P2^5;     //复位相位累加器
  15          
  16          /*P1口用作LED显示线*/
  17          sbit LED_CLK=P1^0;   //LED时钟线
  18          sbit LED_DAT=P1^1;   //LED数据线
  19          
  20          uchar count=0;       //已经显示的位数
  21          bit flag=0;         //是否按了ENTER,为0表示没有按
  22          uchar idata value[6]={0,0,0,0,0,0};   //存储显示的数值
  23          uchar mh_data=0;                   //送给CPLD的频率步进值高位
  24          uchar ml_data=0;                   //送给CPLD的频率步进值低位
  25          uchar phase=0;                     //送给CPLD相位控制字
  26          
  27          void display(uchar i);
  28          /*数字'1','2','3','4','5','6','7','8','9','0'的七段码字库*/
  29          const uchar code LED_FONT[11]={  //
  30                  0xFC, //0
  31                  0x60, //1
  32                  0xDA, //2
  33                  0xF2, //3
  34                  0x66, //4
  35                  0xB6, //5
  36                  0xBE, //6
  37                  0xE0, //7
  38                  0xFE, //8
  39                  0xF6, //9
  40                  0x00, //不显示
  41          };
  42          
  43          void init_IO()//初始化输入输出端口
  44          {
  45   1              uchar i;
  46   1              P0 = 0xFF;
  47   1              P1 = 0xFF;
  48   1              RESET_PHASEREG=1;    //禁止相位累加器工作
  49   1              LOAD=0;              //回送M控制线初始为低电平
  50   1              P3 = 0xFF;
  51   1              for(i=0;i<6;i++)           
  52   1                  display(10); 
  53   1      }
  54          
  55          
C51 COMPILER V7.50   DDS                                                                   12/21/2006 15:07:00 PAGE 2   

  56          void init_int()//初始化中断
  57          {       
  58   1              IE=0x81;      //开外部中断0
  59   1              IE0=0;
  60   1              IT0=1;        //外部中断0为跳变触发方式
  61   1              EA=1;       //CPU开中断
  62   1      }
  63          
  64          void display(uchar i)
  65          {
  66   1              uchar j,mask;
  67   1              mask=0x01;
  68   1              for(j=0;j<8;j++){
  69   2                      LED_CLK=0;
  70   2                      LED_DAT=( (LED_FONT[i]) & mask);
  71   2                      mask<<=1;
  72   2                      LED_CLK=1;   //上升沿移位
  73   2              }
  74   1              
  75   1              displaynum(i,3,14+10*count);//在液晶屏显示数据i。
  76   1      }       
  77                  
  78          void clear_dds()
  79          {
  80   1              uchar i,j;
  81   1              for(i=0;i<7;i++)
  82   1                  display(10);
  83   1              if(count>0){
  84   2              count-=1;
  85   2              value[count]=0;
  86   2              for(j=0;j<count;j++) 
  87   2                  display(value[j]);    //除最后一位外,重新显示
  88   2              }
  89   1              displaynum(10,3,14+10*count);
  90   1      }
  91                            
  92          void reset_dds()                 
  93          {
  94   1              uchar i;
  95   1              init_port();
*** WARNING C206 IN LINE 95 OF DDS.C: 'init_port': missing function-prototype
  96   1              init_interrupt();
*** WARNING C206 IN LINE 96 OF DDS.C: 'init_interrupt': missing function-prototype
  97   1              count=0;
  98   1              flag=0;
  99   1              for(i=0;i<6;i++)
 100   1                  value[i]=0;          //各标志位和显示数据存储区清零
 101   1              for(i=0;i<7;i++)         //清空数码管显示
 102   1                  display(10);
 103   1              for(i=0;i<6;i++)
 104   1                 displaynum(10,3,14+10*i);
 105   1      }       
 106          
 107          void enter_dds()
 108          {
 109   1              uchar i;
 110   1              float temp;
 111   1              uint sum=0;
 112   1              uint m_data=0;
 113   1              uchar phase;
 114   1              flag=1;
 115   1              for(i=0;i<count;i++)
C51 COMPILER V7.50   DDS                                                                   12/21/2006 15:07:00 PAGE 3   

 116   1                 sum=sum+value[i]*pow(10,count-i-1);  //显示数据按权相加
 117   1              temp=sum/0.964;                          //实际的分辨率为0.964
 118   1              m_data=floor(temp);
 119   1              if((temp-m_data)>=0.5){
 120   2                     m_data+=1;
 121   2                  }
 122   1              LOAD=0;
 123   1              ml_data=m_data;                       //频率步进值低位
 124   1              mh_data=((m_data&0xFF00)>>8);         //频率步进值高位      
 125   1              P0=mh_data;
 126   1              LOAD=1;                               //上升沿送高位
 127   1              _nop_(); 
 128   1              _nop_();
 129   1              _nop_();
 130   1              LOAD=0;
 131   1              P0=ml_data;                           
 132   1              LOAD=1;                               //上升沿送低位
 133   1              FQ_UP=0;
 134   1              _nop_(); 
 135   1              _nop_();
 136   1              _nop_(); 
 137   1              phase=sum%10;
 138   1              FQ_UP=1;                    //dds输出新频率对应的波形
 139   1              RESET_PHASEREG=0;     //相位累加器读取增量寄存器中的值开始工作
 140   1      }
 141          
 142          main()
 143          {
 144   1              init_IO();
 145   1              init_int();
 146   1              clearscan();
 147   1              huanying();//欢迎动画
 148   1              please();//进入工作界面
 149   1              _nop_();
 150   1              _nop_();
 151   1              _nop_();
 152   1              while(1){}          //等待中断
 153   1      }
 154          
 155          void interrupt_handle() interrupt 0     
 156          {                                               
 157   1              uchar disdata;
 158   1              EA=0;                //CPU关中断
 159   1              disdata=P2&0x0F;        //读取P2口的低四位显示数据编码          
 160   1              if(flag==0){            //没按确定键时
 161   2                if(count<5){
 162   3                  switch(disdata){
 163   4                   case(0): display(0);
 164   4                            value[count]=0;
 165   4                            count+=1;
 166   4                            break;
 167   4                   case(1): display(1);
 168   4                            value[count]=1;
 169   4                            count+=1;
 170   4                            break;
 171   4                   case(2): display(2);
 172   4                            value[count]=2;
 173   4                            count+=1;
 174   4                            break;
 175   4                   case(3): display(3);
 176   4                            value[count]=3;
 177   4                            count+=1;
C51 COMPILER V7.50   DDS                                                                   12/21/2006 15:07:00 PAGE 4   

 178   4                            break;
 179   4                   case(4): display(4);
 180   4                            value[count]=4;
 181   4                            count+=1;
 182   4                            break; 
 183   4                   case(5): display(5);
 184   4                            value[count]=5;
 185   4                            count+=1;
 186   4                            break; 
 187   4                   case(6): display(6);
 188   4                            value[count]=6;
 189   4                            count+=1;
 190   4                            break; 
 191   4                   case(7): display(7);
 192   4                            value[count]=7;
 193   4                            count+=1;
 194   4                            break; 
 195   4                   case(8): display(8);
 196   4                            value[count]=8;
 197   4                            count+=1;
 198   4                            break; 
 199   4                   case(9): display(9);
 200   4                            value[count]=9;
 201   4                            count+=1;
 202   4                            break; 
 203   4                   case(10): clear_dds();
 204   4                             break;
 205   4                   case(11): reset_dds();
 206   4                             break; 
 207   4                   case(12): enter_dds();
 208   4                             break;
 209   4                   }
 210   3                   }
 211   2                   else{   //当显示了6位数据后数码管和液晶屏不再显示数据,只有功能键有效
 212   3                   switch(disdata){
 213   4                   case(10): clear_dds();
 214   4                             break;
 215   4                   case(11): reset_dds();
 216   4                             break;
 217   4                   case(12): enter_dds();
 218   4                             break;
 219   4                   }
 220   3                }
 221   2                }
 222   1                else{                     //按了确定键时,只有复位键有效
 223   2                   if(disdata==11)
 224   2                             reset_dds();
 225   2                }
 226   1                EA=1;                   //CPU开中断
 227   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1659    ----
   CONSTANT SIZE    =    507    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      29
   IDATA SIZE       =      6    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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