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

📄 da-ad.lst

📁 AD/DA转换
💻 LST
字号:
C51 COMPILER V6.12  DA_AD                                                                  09/04/2011 10:53:12 PAGE 1   


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

stmt level    source

   1          /**********************************************************************************
   2          *  标题:       ************* DA-AD试验*******************                         *
   3          *																				  *
   4          *   1.通过本例程了解并掌握AD-DA转换芯片的基本原理和使用 						  *
   5          *   2.了解掌握I2C总线接口的工作原理及一般编程方法。								  *
   6          *   																			  *
   7          *    连接方法:JP8 (P1)与J12用跳线连接 								          *
   8          *    																			  *
   9          * 通过改变学习板上的2个电位器对应的2段模拟输入,实现模拟输入,学员观察数码管的数字变化情况
  10          * 通过改D[4]的值,实现模拟输出,学员观察学习板上DA处LED的亮度变化				  *
  11          *				  *																  *
  12          * 注意:I2C驱动程序只能在12T模式下工作   6T模式自己修改相应时序                   *                 	     
             -                                                         *
  13          * 请学员认真消化本例程,懂得AD-DA 在C语言中的操作应用                       	  *
  14          ***********************************************************************************/
  15          
  16          #include<reg52.h>
  17          #include <I2C.H>
  18          
  19          #define  PCF8591 0x90    //PCF8591 地址
  20          
  21          
  22          //else IO
  23          sbit    LS138A=P2^2;  
  24          sbit    LS138B=P2^3;
  25          sbit    LS138C=P2^4;  
  26          
  27          //此表为 LED 的字模, 共阴数码管 0-9  - 
  28          unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
  29          
  30          unsigned char AD_CHANNEL;
  31          unsigned long xdata  LedOut[8];
  32          unsigned int  D[32];
  33          		 
  34          
  35          /*******************************************************************
  36          DAC 变换, 转化函数               
  37          *******************************************************************/
  38          bit DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)
  39          {
  40   1         Start_I2c();              //启动总线
  41   1         SendByte(sla);            //发送器件地址
  42   1         if(ack==0)return(0);
  43   1         SendByte(c);              //发送控制字节
  44   1         if(ack==0)return(0);
  45   1         SendByte(Val);            //发送DAC的数值  
  46   1         if(ack==0)return(0);
  47   1         Stop_I2c();               //结束总线
  48   1         return(1);
  49   1      }
  50          
  51          /*******************************************************************
  52          ADC发送字节[命令]数据函数               
  53          *******************************************************************/
  54          bit ISendByte(unsigned char sla,unsigned char c)
C51 COMPILER V6.12  DA_AD                                                                  09/04/2011 10:53:12 PAGE 2   

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

 117   2           LedOut[2]=Disp_Tab[D[1]%100/10]|0x80;
 118   2           LedOut[3]=Disp_Tab[D[1]%10];
 119   2      	 
 120   2      	 LedOut[4]=Disp_Tab[D[0]%10000/1000];
 121   2           LedOut[5]=Disp_Tab[D[0]%1000/100];
 122   2           LedOut[6]=Disp_Tab[D[0]%100/10]|0x80;
 123   2           LedOut[7]=Disp_Tab[D[0]%10];  
 124   2      	  
 125   2      	
 126   2      	 for( i=0; i<8; i++) 
 127   2      	 {	 P1 = LedOut[i];
 128   3      			
 129   3      	  switch(i)	  //使用switch 语句控制138译码器  也可以是用查表的方式 学员可以试着自己修改				  
 130   3      	     {	    
 131   4      			case 0:LS138A=0; LS138B=0; LS138C=0; break;         
 132   4      	        case 1:LS138A=1; LS138B=0; LS138C=0; break;             	
 133   4      	        case 2:LS138A=0; LS138B=1; LS138C=0; break; 
 134   4      	        case 3:LS138A=1; LS138B=1; LS138C=0; break; 
 135   4      			case 4:LS138A=0; LS138B=0; LS138C=1; break;
 136   4      			case 5:LS138A=1; LS138B=0; LS138C=1; break;
 137   4      			case 6:LS138A=0; LS138B=1; LS138C=1; break;
 138   4      			case 7:LS138A=1; LS138B=1; LS138C=1; break;
 139   4      			
 140   4      	     }
 141   3      	 
 142   3      	     for (j = 0 ; j<90 ;j++) { ;}	   //扫描间隔时间
 143   3      	  }
 144   2      
 145   2      	    P1 = 0; 
 146   2      
 147   2       }  
 148   1      }
 149          
 150          
 151          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    773    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =     32    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     65       7
   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 + -