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

📄 main_bak.lst

📁 一个使用adc0809进行数据采集,采用1602液晶显示模拟电压的源程序,已经调试通过.
💻 LST
字号:
C51 COMPILER V7.10   MAIN_BAK                                                              03/23/2006 01:25:46 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE MAIN_BAK
OBJECT MODULE PLACED IN main_bak.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main_bak.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*ADC0809驱动程序,采用AT89C51与ADC0809芯片进行实现,结果在LCD上显示*/
   2          
   3          #include <REG51.H>
   4          #include <stdio.h>
   5          #include <INTRINS.H>                            //为调用nop空指令需要
   6          #define DS_NOP()        _nop_();_nop_();_nop_();_nop_()
   7          
   8          #define         REF_Voltage     5.25      //ADC0809基准电压
   9          #define         PLUS_CH0                1         //各个通道增益
  10          #define         PLUS_CH1                1
  11          #define         PLUS_CH2                1
  12          #define         PLUS_CH3                4
  13          #define         PLUS_CH4                1
  14          #define         PLUS_CH5                1
  15          #define         PLUS_CH6                1
  16          #define         PLUS_CH7                1
  17          
  18          
  19                         
  20          /*对ADC0809的控制信号进行设置,使能够进行控制*/
  21          sbit    ST  = P2^5;
  22          sbit    OE  = P2^4;
  23          sbit    EOC = P2^3;
  24          sbit    ADC0809_C = P2^2;
  25          sbit    ADC0809_B = P2^1;
  26          sbit    ADC0809_A = P2^0;
  27          /*
  28          sbit    RW  = P3^6;
  29          sbit    RS  = P3^5;
  30          sbit    E   = P3^7;
  31            */
  32          
  33          
  34          //unsigned char r1[] = {"pass voltage:"};;
  35          //void  delay();
  36                  
  37          /*ADC0809转换函数,通道3输入模拟信号*/
  38          unsigned char ADC0809test(unsigned char ch0)
  39          {
  40   1              unsigned char ADCdata;                  //AD转换后得到的数字量
  41   1      
  42   1              ST  = 0;
  43   1              EOC = 1;
  44   1              OE  = 0;
  45   1              
  46   1              switch(ch0)
  47   1              {
  48   2                      case 0:
  49   2                      {
  50   3                              ADC0809_A = 0;
  51   3                              ADC0809_B = 0;
  52   3                              ADC0809_C = 0;
  53   3                              break;  
  54   3                      }
  55   2                      case 1:
C51 COMPILER V7.10   MAIN_BAK                                                              03/23/2006 01:25:46 PAGE 2   

  56   2                      {
  57   3                              ADC0809_A = 1;
  58   3                              ADC0809_B = 0;
  59   3                              ADC0809_C = 0;
  60   3                              break;  
  61   3                      }
  62   2                      case 2:
  63   2                      {
  64   3                              ADC0809_A = 0;
  65   3                              ADC0809_B = 1;
  66   3                              ADC0809_C = 0;
  67   3                              break;  
  68   3                      }
  69   2                      case 3:
  70   2                      {
  71   3                              ADC0809_A = 1;
  72   3                              ADC0809_B = 1;
  73   3                              ADC0809_C = 0;
  74   3                              break;  
  75   3                      }
  76   2                      case 4:
  77   2                      {
  78   3                              ADC0809_A = 0;
  79   3                              ADC0809_B = 0;
  80   3                              ADC0809_C = 1;
  81   3                              break;  
  82   3                      }
  83   2                      case 5:
  84   2                      {
  85   3                              ADC0809_A = 1;
  86   3                              ADC0809_B = 0;
  87   3                              ADC0809_C = 1;
  88   3                              break;  
  89   3                      }
  90   2      
  91   2                      case 6:
  92   2                      {
  93   3                              ADC0809_A = 0;
  94   3                              ADC0809_B = 1;
  95   3                              ADC0809_C = 1;
  96   3                              break;  
  97   3                      }
  98   2                      case 7:
  99   2                      {
 100   3                              ADC0809_A = 1;
 101   3                              ADC0809_B = 1;
 102   3                              ADC0809_C = 1;
 103   3                              break;  
 104   3                      }
 105   2                      default:break;
 106   2              }
 107   1              ST = 1;
 108   1              ST = 0;
 109   1              DS_NOP();
 110   1      
 111   1              while(EOC == 0)
 112   1              {
 113   2                ;
 114   2              }
 115   1              if(EOC == 1)
 116   1              {
 117   2                      OE = 1;
C51 COMPILER V7.10   MAIN_BAK                                                              03/23/2006 01:25:46 PAGE 3   

 118   2                      ADCdata  = P0;
 119   2                      return (ADCdata); 
 120   2              }
 121   1      }
 122          
 123          /*******************************************************
 124            电压测量并装换成实际的电压值
 125          入口参数: AD_ChannelNumber 输入通道号:在0-7之间选择 
 126          出口参数: 转换后的电压值,实际的值
 127          ********************************************************/
 128          float VoltageSurvey(unsigned char AD_ChannelNumber)
 129          {
 130   1              float  SurveyVoltage;                                                                           //测量到的电压值
 131   1              float  plus_ch;                                                                                         //通道增益
 132   1              
 133   1              switch(AD_ChannelNumber)
 134   1              {
 135   2                      case 0: plus_ch = PLUS_CH0;break;
 136   2                      case 1: plus_ch = PLUS_CH1;break;
 137   2                      case 2: plus_ch = PLUS_CH2;break;
 138   2                      case 3: plus_ch = PLUS_CH3;break;
 139   2                      case 4: plus_ch = PLUS_CH4;break;
 140   2                      case 5: plus_ch = PLUS_CH5;break;
 141   2                      case 6: plus_ch = PLUS_CH6;break;
 142   2                      case 7: plus_ch = PLUS_CH7;break;
 143   2                      default:break;
 144   2              }
 145   1      
 146   1              SurveyVoltage = ADC0809test(AD_ChannelNumber);
 147   1              SurveyVoltage = (SurveyVoltage / 256) * REF_Voltage * plus_ch;
 148   1              return(SurveyVoltage);
 149   1      }   
 150             
 151                
 152           
 153            
 154             //延时程序
 155          void delay(unsigned int k)
 156          {
 157   1              unsigned int i,j;
 158   1      
 159   1              for(i=k; i>0; i--)  
 160   1              {
 161   2                      for(j=255; j>0; j--);   
 162   2              } 
 163   1      }
 164          
 165          
 166          /*  
 167            void enable()  //写指令寄存器
 168                 { 
 169                       RS = 0;
 170                           RW = 0;
 171                           E  = 0;
 172                           dealy();
 173                           E  = 1;
 174                      }
 175          
 176           
 177              void write_com()    //写命令程序
 178                  {
 179                          P1 = 0x01;
C51 COMPILER V7.10   MAIN_BAK                                                              03/23/2006 01:25:46 PAGE 4   

 180                          enable();
 181                          P1 = 0x02;
 182                          enable();
 183                          P1 = 0x07;
 184                          enable();
 185                          P1 = 0X0F;
 186                          enable();
 187                          P1 = 0x1f;
 188                          enable();
 189                          P1 = 0x30;
 190                          enable();  
 191                          }
 192          
 193                  void write_data()       //写数据寄存器
 194                      {
 195                          RS = 1;
 196                          RW = 0;
 197                          E  = 0;
 198                          delay();
 199                          E  = 1;
 200                          }
 201                  
 202          
 203                   void enable();                  //写数地址和数据到LCD 
 204                        {
 205                             P1 = 0x80
 206                             enable();
 207                             P1 = r1;
 208                             write_data();
 209                             P1 = 0xc6;
 210                             enabke();
 211          
 212                             P1 = adc0809test();    //是ADC0809的驱动函数*
 213                             write_data();
 214                             P1 = 0xc7;
 215                             enable();
 216                             P1 = 'V';
 217                             write_data();
 218                              }
 219          */ 
 220          
 221          /*主函数程序, LCD驱动函数*/
 222          void main(void)
 223          {
 224   1              float OutVoltage;
 225   1              unsigned int Adc0809CHx;
 226   1      
 227   1              SCON  = 0x50;                   // SCON: mode 1, 8-bit UART, enable rcvr      
 228   1              TMOD |= 0x20;               //TMOD: timer 1, mode 2, 8-bit reload        
 229   1              TH1   = 221;                // TH1:  reload value for 1200 baud @ 16MHz   
 230   1              TR1   = 1;                  // TR1:  timer 1 run                          
 231   1              TI    = 1;                  // TI:   set TI to send first char of UART 
 232   1      
 233   1              
 234   1      
 235   1      
 236   1         while(1)
 237   1         {
 238   2                      Adc0809CHx = 3;
 239   2                      OutVoltage = VoltageSurvey(Adc0809CHx);
 240   2                      printf("the CH%d",Adc0809CHx);
 241   2                      printf("Voltage is %1.3f\r\n",OutVoltage);
C51 COMPILER V7.10   MAIN_BAK                                                              03/23/2006 01:25:46 PAGE 5   

 242   2                      delay(100);
 243   2                      /*
 244   2                      if(Adc0809CHx < 7)
 245   2                      {
 246   2                              Adc0809CHx++;
 247   2                      }
 248   2                      else
 249   2                      {
 250   2                              Adc0809CHx = 0; 
 251   2                      }
 252   2                      */
 253   2                      
 254   2              } 
 255   1      }


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