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

📄 da-ad.lst

📁 光敏和热敏电阻实验
💻 LST
字号:
C51 COMPILER V7.10   DA_AD                                                                 03/30/2011 11:55:46 PAGE 1   


C51 COMPILER V7.10, 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          *  标题:       ************* 光敏电阻和热敏电阻试验*******************            *
   3          *                                                                                               *                                                                 *
   4          *   1.通过本例程了解并掌握AD-DA转换芯片和热敏光敏电阻的基本原理和使用                     *
   5          *   2.了解掌握I2C总线接口的工作原理及一般编程方法。
   6          *   
   7          *    连接方法:JP10 (P0)与J12用跳线连接                                                                         *
   8          
   9          * 通过改变学习板上光敏和热敏电阻实现模拟输入,AD输入通道在第3和第4通道上
  10          * 学员观察数码管的数字变化情况
  11          * 学员用遮挡光敏电阻和有触摸热敏电阻可以看到AD的值发生变化                                *
  12          *                                                                                     *
  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          ADC发送字节[命令]数据函数               
  37          *******************************************************************/
  38          bit ISendByte(unsigned char sla,unsigned char c)
  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         Stop_I2c();               //结束总线
  46   1         return(1);
  47   1      }
  48          
  49          /*******************************************************************
  50          ADC读字节数据函数               
  51          *******************************************************************/
  52          unsigned char IRcvByte(unsigned char sla)
  53          {  unsigned char c;
  54   1      
  55   1         Start_I2c();          //启动总线
C51 COMPILER V7.10   DA_AD                                                                 03/30/2011 11:55:46 PAGE 2   

  56   1         SendByte(sla+1);      //发送器件地址
  57   1         if(ack==0)return(0);
  58   1         c=RcvByte();          //读取数据0
  59   1      
  60   1         Ack_I2c(1);           //发送非就答位
  61   1         Stop_I2c();           //结束总线
  62   1         return(c);
  63   1      }
  64          
  65          //******************************************************************/
  66          main()
  67          {  char i,j;
  68   1      
  69   1       while(1)
  70   1       {/********以下AD-DA处理*************/  
  71   2         switch(AD_CHANNEL)
  72   2         {
  73   3           case 0: ISendByte(PCF8591,0x41);
  74   3                   D[0]=IRcvByte(PCF8591)*2;  //ADC0 模数转换1  放大2倍显示
  75   3                               break;  
  76   3       
  77   3               case 1: ISendByte(PCF8591,0x42);
  78   3                   D[1]=IRcvByte(PCF8591)*2;  //ADC1  模数转换2
  79   3                               break;  
  80   3      
  81   3               case 2: ISendByte(PCF8591,0x43);
  82   3                   D[2]=IRcvByte(PCF8591);  //ADC2    模数转换3
  83   3                               break;  
  84   3      
  85   3               case 3: ISendByte(PCF8591,0x40);
  86   3                   D[3]=IRcvByte(PCF8591);  //ADC3   模数转换4
  87   3                               break;  
  88   3                 }
  89   2      
  90   2        if(++AD_CHANNEL>3) AD_CHANNEL=0;
  91   2      
  92   2       /********以下将AD3 AD4采集的热名电阻和光敏电阻值送到LED数码管显示*************/
  93   2                              
  94   2               LedOut[0]=Disp_Tab[D[2]%10000/1000];
  95   2           LedOut[1]=Disp_Tab[D[2]%1000/100];
  96   2           LedOut[2]=Disp_Tab[D[2]%100/10]|0x80;
  97   2           LedOut[3]=Disp_Tab[D[2]%10];
  98   2               
  99   2               LedOut[4]=Disp_Tab[D[3]%10000/1000];
 100   2           LedOut[5]=Disp_Tab[D[3]%1000/100];
 101   2           LedOut[6]=Disp_Tab[D[3]%100/10]|0x80;
 102   2           LedOut[7]=Disp_Tab[D[3]%10];  
 103   2                
 104   2              
 105   2               for( i=0; i<8; i++) 
 106   2               {       P0 = LedOut[i];
 107   3                              
 108   3                switch(i)       //使用switch 语句控制138译码器  也可以是用查表的方式 学员可以试着自己修改                               
 109   3                   {      
 110   4                              case 0:LS138A=0; LS138B=0; LS138C=0; break;         
 111   4                      case 1:LS138A=1; LS138B=0; LS138C=0; break;                     
 112   4                      case 2:LS138A=0; LS138B=1; LS138C=0; break; 
 113   4                      case 3:LS138A=1; LS138B=1; LS138C=0; break; 
 114   4                              case 4:LS138A=0; LS138B=0; LS138C=1; break;
 115   4                              case 5:LS138A=1; LS138B=0; LS138C=1; break;
 116   4                              case 6:LS138A=0; LS138B=1; LS138C=1; break;
 117   4                              case 7:LS138A=1; LS138B=1; LS138C=1; break;
C51 COMPILER V7.10   DA_AD                                                                 03/30/2011 11:55:46 PAGE 3   

 118   4                              
 119   4                   }
 120   3               
 121   3                   for (j = 0 ; j<90 ;j++) { ;}          //扫描间隔时间
 122   3                }
 123   2      
 124   2                  P0 = 0; 
 125   2      
 126   2       }  
 127   1      }
 128          
 129          
 130          


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