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

📄 da-ad.lst

📁 单片机的实用程序代码
💻 LST
字号:
C51 COMPILER V7.50   DA_AD                                                                 09/19/2011 17:35:06 PAGE 1   


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

line level    source

   1          /**********************************************************************************
   2          *  标题:       ************* DA-AD试验*******************                         *
   3          *                                                                                                                                                                 *
   4          *   1.通过本例程了解并掌握AD-DA转换芯片的基本原理和使用                                                   *
   5          *   2.了解掌握I2C总线接口的工作原理及一般编程方法。
   6          *                                                                                     *
   7          * 请学员认真消化本例程,懂得AD-DA 在C语言中的操作应用                             *
   8          ***********************************************************************************/
   9          
  10          #include<reg52.h>
  11          #include <I2C.H>
  12          
  13          #define  PCF8591 0x90    //PCF8591 地址
  14          
  15          
  16          //else IO
  17          sbit    LS138A=P2^2;  
  18          sbit    LS138B=P2^3;
  19          sbit    LS138C=P2^4;  
  20          
  21          // 此表为 LED 的字模            // 0    1    2    3    4    5    6   7    8    9    A    b    c    d    E 
             -   -    L   P    U    Hidden  _ (20)
  22          unsigned char code  Disp_Tab[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x88,0x83,0xC6,0xA1,0
             -x86,0xbf,0xc7,0x8c,0xc1, 0xff,  0xf7 }; 
  23          
  24          unsigned char AD_CHANNEL;
  25          unsigned long xdata  LedOut[8];
  26          unsigned int  D[32];
  27                           
  28          
  29          /*******************************************************************
  30          DAC 变换, 转化函数               
  31          *******************************************************************/
  32          bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
  33          {
  34   1         Start_I2c();              //启动总线
  35   1         SendByte(sla);            //发送器件地址
  36   1         if(ack==0)return(0);
  37   1         SendByte(c);              //发送控制字节
  38   1         if(ack==0)return(0);
  39   1         SendByte(Val);            //发送DAC的数值  
  40   1         if(ack==0)return(0);
  41   1         Stop_I2c();               //结束总线
  42   1         return(1);
  43   1      }
  44          
  45          /*******************************************************************
  46          ADC发送字节[命令]数据函数               
  47          *******************************************************************/
  48          bit ISendByte(unsigned char sla,unsigned char c)
  49          {
  50   1         Start_I2c();              //启动总线
  51   1         SendByte(sla);            //发送器件地址
  52   1         if(ack==0)return(0);
  53   1         SendByte(c);              //发送数据
C51 COMPILER V7.50   DA_AD                                                                 09/19/2011 17:35:06 PAGE 2   

  54   1         if(ack==0)return(0);
  55   1         Stop_I2c();               //结束总线
  56   1         return(1);
  57   1      }
  58          
  59          /*******************************************************************
  60          ADC读字节数据函数               
  61          *******************************************************************/
  62          unsigned char IRcvByte(unsigned char sla)
  63          {  unsigned char c;
  64   1      
  65   1         Start_I2c();          //启动总线
  66   1         SendByte(sla+1);      //发送器件地址
  67   1         if(ack==0)return(0);
  68   1         c=RcvByte();          //读取数据0
  69   1      
  70   1         Ack_I2c(1);           //发送非就答位
  71   1         Stop_I2c();           //结束总线
  72   1         return(c);
  73   1      }
  74          
  75          //******************************************************************/
  76          main()
  77          {  unsigned char i,j;
  78   1      
  79   1       while(1)
  80   1       {/********以下AD-DA处理*************/  
  81   2         switch(AD_CHANNEL)
  82   2         {
  83   3           case 0: ISendByte(PCF8591,0x41);
  84   3                   D[0]=IRcvByte(PCF8591)*2;  //ADC0 模数转换1
  85   3                               break;  
  86   3       
  87   3               case 1: ISendByte(PCF8591,0x42);
  88   3                   D[1]=IRcvByte(PCF8591)*2;  //ADC1  模数转换2
  89   3                               break;  
  90   3      
  91   3               case 2: ISendByte(PCF8591,0x43);
  92   3                   D[2]=IRcvByte(PCF8591)*2;  //ADC2  模数转换3
  93   3                               break;  
  94   3      
  95   3               case 3: ISendByte(PCF8591,0x40);
  96   3                   D[3]=IRcvByte(PCF8591)*2;  //ADC3   模数转换4
  97   3                               break;  
  98   3      
  99   3               case 4: DACconversion(PCF8591,0x40, D[4]/4); //DAC       数模转换
 100   3                       break;
 101   3         }
 102   2      
 103   2         if(++AD_CHANNEL>4) AD_CHANNEL=0;
 104   2      
 105   2       /********以下将AD的值送到LED数码管显示*************/
 106   2               D[4]+=1;               
 107   2               LedOut[0]=Disp_Tab[D[4]%10000/1000];
 108   2           LedOut[1]=Disp_Tab[D[4]%1000/100];
 109   2           LedOut[2]=Disp_Tab[D[4]%100/10];
 110   2           LedOut[3]=Disp_Tab[D[4]%10];  
 111   2              
 112   2               for( i=0; i<4; i++) 
 113   2               {       
 114   3                      P0 = LedOut[i];
 115   3                      P2 = i;          
C51 COMPILER V7.50   DA_AD                                                                 09/19/2011 17:35:06 PAGE 3   

 116   3                  for (j = 0 ; j<200 ;j++) { ;}
 117   3                } 
 118   2              }  
 119   1      }
 120          
 121          
 122          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    486    ----
   CONSTANT SIZE    =     21    ----
   XDATA SIZE       =     32    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     65       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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