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

📄 adc0832.lst

📁 基于ADC0832做的一个万用表源程序,包括KEIL的工程文件都在
💻 LST
字号:
C51 COMPILER V7.06   ADC0832                                                               01/04/2008 18:23:27 PAGE 1   


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

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          
   4          #define uchar unsigned char
   5          #define uint  unsigned int
   6          
   7          /*******LCD口线定义*******/
   8          #define LCD_DATA P0              //定义数据线D0-D7
   9          sbit LCD_RS=P1^0;                 //定义寄存器选择位
  10          sbit LCD_RW=P1^1;                //定义读写信号线位
  11          sbit LCD_E=P1^2;                 //定义使能信号位
  12          sbit LCD_BUSY=LCD_DATA^7;//检测LCD状态字中BUSY标识
  13          
  14          /*******ADC0832口线定义*******/
  15          sbit AD_CLK=P3^6;
  16          sbit AD_CS=P2^0;
  17          sbit AD_DI=P3^7;
  18          
  19          /*******通道定义*******/
  20          sbit CH1=P3^0;
  21          sbit CH2=P3^1;
  22          /*******函数申明*******/
  23          void LCD_Init(void);
  24          void LCD_Write_Data(uchar dat);
  25          void LCD_Write_Cmd(uchar cmd,BusyC);
  26          void LCD_Disp_Char(uchar X,uchar Y,uchar DData);
  27          void LCD_Disp_String(uchar X,uchar Y,uchar code *DData);
  28          void LCD_Delay(uint ms);
  29          uchar LCD_Check_Busy(void);
  30          uchar readadc(void);
  31          
  32          uchar code disptab[]={'0','1','2','3','4','5','6','7','8','9'};//字符代表码;
  33          uchar code a_1[]={"WILLAR"};
  34          uchar code a_2[]={"DIGITAL"};
  35          uchar code a_3[]={"VOLTMETER"};
  36          uchar code dispstring1[]={"VOLTAGE:"};
  37          uchar code channel[]={"INPUT"};
  38          uchar code channel2[]={"CHANNEL"};
  39          /*******LCD函数部分*******/
  40          void LCD_Init(void)
  41          {
  42   1       LCD_DATA=0;                       
  43   1       LCD_Write_Cmd(0x38,0);    //三次显示模式设置,不检测忙信号
  44   1       LCD_Delay(5);
  45   1       LCD_Write_Cmd(0x38,0);
  46   1       LCD_Delay(5);
  47   1       LCD_Write_Cmd(0x38,0);
  48   1       LCD_Delay(5);
  49   1       
  50   1       LCD_Write_Cmd(0x38,1);   //显示模式设置,开始要求检测忙信号:8位、2行、5X7点阵
  51   1       LCD_Write_Cmd(0x08,1);   //关闭显示
  52   1       LCD_Write_Cmd(0x01,1);   //清屏
  53   1       LCD_Write_Cmd(0x06,1);   //显示光标移动设置:文字不动,光标自动右移
  54   1       LCD_Write_Cmd(0x0C,1);   //显示开及光标设置:光标关、光标不闪烁
  55   1      }
C51 COMPILER V7.06   ADC0832                                                               01/04/2008 18:23:27 PAGE 2   

  56          
  57          void LCD_Write_Cmd(uchar cmd,BusyC)
  58          {
  59   1       if(BusyC)      LCD_Check_Busy();
  60   1       LCD_DATA=cmd;
  61   1       LCD_RS=0;
  62   1       LCD_RW=0;
  63   1       LCD_E=0;
  64   1       LCD_Delay(5);
  65   1       LCD_E=1;
  66   1      }
  67          
  68          void LCD_Write_Data(uchar dat)
  69          {
  70   1       LCD_Check_Busy();
  71   1       LCD_DATA=dat;
  72   1       LCD_RS=1;
  73   1       LCD_RW=0;
  74   1       LCD_E=0;
  75   1       LCD_Delay(5);
  76   1       LCD_E=1;
  77   1      }
  78          
  79          void LCD_Disp_Char(uchar X,uchar Y,uchar DData)
  80          {
  81   1       Y &=0x01;
  82   1       X &=0x0F;
  83   1       if(Y) X|=0x40;
  84   1       X|=0x80;
  85   1       LCD_Write_Cmd(X,0);
  86   1       LCD_Write_Data(DData);
  87   1      }
  88          
  89          void LCD_Disp_String(uchar X,uchar Y,uchar code *DData)
  90          {
  91   1       uchar StringLength;
  92   1       StringLength=0;
  93   1       Y &=0x01;
  94   1       X &=0x0F;
  95   1       while(DData[StringLength]>0x20)
  96   1       {
  97   2         if(X<=0x0F)
  98   2              {
  99   3                 LCD_Disp_Char(X,Y,DData[StringLength]); 
 100   3              StringLength++;
 101   3                      X++;
 102   3           }
 103   2        }
 104   1      }
 105          
 106          
 107          uchar LCD_Check_Busy(void)
 108          {
 109   1        LCD_DATA=0xFF;
 110   1        LCD_RS=0;
 111   1        LCD_RW=1;
 112   1        LCD_E=0;
 113   1        LCD_Delay(5);
 114   1        LCD_E=1;
 115   1        while(LCD_DATA & 0x80);
 116   1        return(LCD_DATA);
 117   1      }
C51 COMPILER V7.06   ADC0832                                                               01/04/2008 18:23:27 PAGE 3   

 118          
 119          void LCD_Delay(uint ms)
 120          {
 121   1        uchar i;
 122   1        while(ms--)
 123   1        {
 124   2          for(i=0;i<250;i++);
 125   2         }
 126   1      }
 127          
 128          
 129          /*******ADC0832函数部分*******/
 130          
 131          uchar readadc1(void)
 132          {
 133   1          uchar dat,i;
 134   1            
 135   1          AD_CS=1;         //芯片复位
 136   1              AD_CLK=0; 
 137   1          _nop_();
 138   1      
 139   1          AD_CS=0;         //CS拉低,启动A/D转换
 140   1          _nop_();
 141   1          
 142   1          AD_DI=1;         //启动标志位
 143   1          AD_CLK=1;        //第一个脉冲
 144   1          _nop_();
 145   1              AD_DI=0;         //在负跳变之前加一个DI反转操作
 146   1          AD_CLK=0;
 147   1          
 148   1          AD_DI=1;         //配置位1,单通道/差分输入选择
 149   1          _nop_();
 150   1              AD_CLK=1;        //第二个脉冲
 151   1          _nop_();
 152   1          AD_CLK=0;
 153   1          
 154   1          AD_DI=0;         //配置位2   
 155   1          _nop_();
 156   1              AD_CLK=1;        //第三个脉冲 
 157   1          _nop_();
 158   1          AD_CLK=0;        
 159   1          
 160   1              AD_DI=1;
 161   1          _nop_();         //空闲位
 162   1          AD_CLK=1;        //第四个脉冲
 163   1              
 164   1          for(i=0;i<=8;i++){             //读出8字节数据
 165   2              dat=dat<<1;
 166   2              _nop_();
 167   2              AD_CLK=1;                    //这里要先1后0...如果是先0后1则输出结果错误...
 168   2              if(AD_DI){
 169   3                  dat|=0x01;
 170   3              }
 171   2              _nop_();
 172   2              AD_CLK=0;
 173   2          }
 174   1              
 175   1          AD_CS=1;        //关闭芯片
 176   1          return(dat);          //返回数据
 177   1      }
 178          
 179          uchar readadc2(void)
C51 COMPILER V7.06   ADC0832                                                               01/04/2008 18:23:27 PAGE 4   

 180          {
 181   1          uchar dat,i;
 182   1            
 183   1          AD_CS=1;         //芯片复位
 184   1              AD_CLK=0; 
 185   1          _nop_();
 186   1      
 187   1          AD_CS=0;         //CS拉低,启动A/D转换
 188   1          _nop_();
 189   1          
 190   1          AD_DI=1;         //启动标志位
 191   1          AD_CLK=1;        //第一个脉冲
 192   1          _nop_();
 193   1              AD_DI=0;         //在负跳变之前加一个DI反转操作
 194   1          AD_CLK=0;
 195   1          
 196   1          AD_DI=1;         //配置位1,单通道/差分输入选择
 197   1          _nop_();
 198   1              AD_CLK=1;        //第二个脉冲
 199   1          _nop_();
 200   1          AD_CLK=0;
 201   1          
 202   1          AD_DI=1;         //配置位2   
 203   1          _nop_();
 204   1              AD_CLK=1;        //第三个脉冲 
 205   1          _nop_();
 206   1          AD_CLK=0;        
 207   1          
 208   1              AD_DI=1;
 209   1          _nop_();         //空闲位
 210   1          AD_CLK=1;        //第四个脉冲
 211   1              
 212   1          for(i=0;i<=8;i++){             //读出8字节数据
 213   2              dat=dat<<1;
 214   2              _nop_();
 215   2              AD_CLK=1;                    //这里要先1后0...如果是先0后1则输出结果错误...
 216   2              if(AD_DI){
 217   3                  dat|=0x01;
 218   3              }
 219   2              _nop_();
 220   2              AD_CLK=0;
 221   2          }
 222   1              
 223   1          AD_CS=1;        //关闭芯片
 224   1          return(dat);          //返回数据
 225   1      }
 226          /*******主函数部分*******/
 227          
 228          void main(void)
 229          {
 230   1        uint dat1,dat2;
 231   1        LCD_Delay(400);
 232   1        LCD_Init();
 233   1       
 234   1        LCD_Disp_String(1,0,a_1);
 235   1        LCD_Disp_String(8,0,a_2);
 236   1        LCD_Disp_String(4,1,a_3);
 237   1       
 238   1        LCD_Delay(1000);
 239   1        LCD_Init();
 240   1      
 241   1        LCD_Disp_String(1,0,channel);
C51 COMPILER V7.06   ADC0832                                                               01/04/2008 18:23:27 PAGE 5   

 242   1        LCD_Disp_String(7,0,channel2);
 243   1        LCD_Disp_String(2,1,dispstring1);
 244   1        LCD_Disp_Char(11,1,'.');
 245   1        LCD_Disp_Char(14,1,'V');
 246   1       while(1)
 247   1        {
 248   2          while(!CH1)
 249   2        {
 250   3          dat1=readadc1()/0.51;
 251   3          LCD_Disp_Char(15,0,'0');
 252   3              LCD_Disp_Char(10,1,disptab[dat1/100]);
 253   3              LCD_Disp_Char(12,1,disptab[(dat1%100)/10]);
 254   3              LCD_Disp_Char(13,1,disptab[dat1%10]);
 255   3          LCD_Delay(400);
 256   3        }
 257   2        
 258   2         while(!CH2)
 259   2         {
 260   3           dat2=readadc2()/0.51;
 261   3          LCD_Disp_Char(15,0,'1');
 262   3              LCD_Disp_Char(10,1,disptab[dat2/100]);
 263   3              LCD_Disp_Char(12,1,disptab[(dat2%100)/10]);
 264   3              LCD_Disp_Char(13,1,disptab[dat2%10]);
 265   3          LCD_Delay(400);
 266   3         }
 267   2      
 268   2      }
 269   1      
 270   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    750    ----
   CONSTANT SIZE    =     58    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   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 + -