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

📄 adc0832.lst

📁 ADC0832 和 LCD1602 的测试程序
💻 LST
字号:
C51 COMPILER V8.09   ADC0832                                                               03/15/2008 09:11:19 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE ADC0832
OBJECT MODULE PLACED IN ADC0832.OBJ
COMPILER INVOKED BY: C:\EDA\Keil\C51\BIN\C51.EXE ADC0832.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1                   # include <AT89x52.h>
   2          
   3          /*****************************************
   4          
   5                   P0------DB0~DB7         
   6                           P1.0------RS
   7                           P1.1------RW
   8                           P1.2------E
   9          
  10          *****************************************/
  11          
  12          # define LCD_DB        P0
  13          
  14            sbit         LCD_RS=P1^0;
  15          
  16            sbit         LCD_RW=P1^1;
  17          
  18            sbit         LCD_E=P1^2;
  19          
  20            sbit ADC0832_CS =P2^0;
  21          
  22            sbit ADC0832_CLK=P3^6;
  23          
  24            sbit ADC0832_DO =P3^7;
  25          
  26            sbit ADC0832_DI =P3^7;
  27          
  28          /******定义函数****************/
  29          
  30          # define uchar unsigned char
  31          
  32          # define uint unsigned int
  33          
  34          
  35          void LCD_init(void);//初始化函数
  36          
  37          void LCD_write_command(uchar command);//写指令函数
  38          
  39          void LCD_write_data(uchar dat);//写数据函数
  40          
  41          void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一个字符,X(0-16),y(1-2)
  42          
  43          void delay_n40us(uint n);//延时函数
  44          
  45          
  46          
  47          void Delay(unsigned char x)
  48          
  49          { 
  50   1      
  51   1       unsigned char i; 
  52   1      
  53   1       for(i=0;i<x;i++); //延时,脉冲一位持续的时间
  54   1      
  55   1      }
C51 COMPILER V8.09   ADC0832                                                               03/15/2008 09:11:19 PAGE 2   

  56          
  57           unsigned char ReadADC(void) //把模拟电压值转换成8位二进制数并返回
  58          
  59          { 
  60   1      
  61   1            unsigned char i,ch;
  62   1      
  63   1            ch = 0 ;
  64   1      
  65   1            
  66   1            ADC0832_CS=0;
  67   1      
  68   1            //ADC0832_DO=0;//片选,DO为高阻态
  69   1      
  70   1            for(i=0;i<100;i++)
  71   1      
  72   1                  { ; }
  73   1      
  74   1            ADC0832_CLK=0;
  75   1      
  76   1            Delay(20);
  77   1      
  78   1            ADC0832_DI = 1 ; 
  79   1      
  80   1            ADC0832_CLK=1; 
  81   1      
  82   1            Delay(2); //第一个脉冲,起始位 
  83   1      
  84   1            ADC0832_CLK=0; 
  85   1      
  86   1            Delay(2); 
  87   1      
  88   1            ADC0832_DI=1; 
  89   1      
  90   1            ADC0832_CLK=1;
  91   1      
  92   1            Delay(20); //第二个脉冲,DI=1表示双通道单极性输入
  93   1      
  94   1            ADC0832_CLK=0;
  95   1      
  96   1            Delay(20);
  97   1      
  98   1            ADC0832_DI=0; 
  99   1      
 100   1            ADC0832_CLK=1;
 101   1      
 102   1            Delay(20); //第三个脉冲,DI=0表示选择通道0(CH2)
 103   1      
 104   1            //ADC0832_DI=1; 
 105   1      
 106   1            ADC0832_DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备
 107   1      
 108   1            ADC0832_CLK=1;
 109   1      
 110   1            Delay(20);
 111   1      
 112   1            ADC0832_CLK=0; 
 113   1      
 114   1            Delay(20);//经实验,这里加一个脉冲AD便能正确读出数据,
 115   1      
 116   1                 //不加的话读出的数据少一位(最低位d0读不出)
 117   1      
C51 COMPILER V8.09   ADC0832                                                               03/15/2008 09:11:19 PAGE 3   

 118   1           for (i=0; i<8; i++)
 119   1      
 120   1           { 
 121   2      
 122   2              ADC0832_CLK=1; 
 123   2      
 124   2              Delay(20); 
 125   2      
 126   2              ADC0832_CLK=0; 
 127   2      
 128   2              Delay(20);
 129   2      
 130   2              ch=(ch<<1)|ADC0832_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数
 131   2      
 132   2         }
 133   1      
 134   1          ADC0832_CS=1;//取消片选,一个转换周期结束
 135   1      
 136   1          return(ch);//把转换结果返回
 137   1      
 138   1      }
 139          
 140          
 141          //*******初始化函数***************
 142          
 143          void LCD_init(void)
 144          
 145          {
 146   1      
 147   1          delay_n40us(10000);
 148   1      
 149   1          LCD_write_command(0x38);//设置8位格式,2行,5x7
 150   1      
 151   1          LCD_write_command(0x38);//设置8位格式,2行,5x7
 152   1      
 153   1          LCD_write_command(0x38);//设置8位格式,2行,5x7
 154   1      
 155   1          
 156   1              LCD_write_command(0x02);//整体显示,关光标,不闪烁
 157   1      
 158   1              LCD_write_command(0x0C);//清除屏幕显示
 159   1      
 160   1          LCD_write_command(0x06);//设定输入方式,增量不移位
 161   1      
 162   1      }
 163          
 164          //********************************
 165          
 166          //********写指令函数************
 167          
 168          void LCD_write_command(uchar dat)
 169          
 170          {
 171   1          
 172   1          LCD_E = 0;
 173   1              
 174   1              LCD_RS=0;//指令
 175   1      
 176   1          LCD_RW=0;//写入
 177   1      
 178   1          LCD_DB=dat;
 179   1              
C51 COMPILER V8.09   ADC0832                                                               03/15/2008 09:11:19 PAGE 4   

 180   1              LCD_E=1;//允许
 181   1      
 182   1              delay_n40us(10);//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。
 183   1      
 184   1          LCD_E = 0;
 185   1      }
 186          
 187          //*******************************
 188          
 189          //********写数据函数*************
 190          
 191          void LCD_write_data(uchar dat)
 192          
 193          {
 194   1      
 195   1           LCD_E = 0;     
 196   1      
 197   1               LCD_RS=1;//数据
 198   1      
 199   1           LCD_RW=0;//写入
 200   1      
 201   1           LCD_DB=dat;
 202   1               
 203   1               LCD_E=1;//允许
 204   1      
 205   1           delay_n40us(10);
 206   1           
 207   1               LCD_E = 0;
 208   1      }
 209          
 210          //********************************
 211          
 212          //*******显示一个字符函数*********
 213          
 214          void LCD_disp_char(uchar x,uchar y,uchar dat)
 215          
 216          {
 217   1               uchar address;
 218   1      
 219   1           if(y==1)
 220   1      
 221   1                    address=0x80+x;
 222   1      
 223   1           else
 224   1      
 225   1                    address=0xc0+x;
 226   1      
 227   1           LCD_write_command(address);
 228   1      
 229   1           LCD_write_data(dat);
 230   1      }
 231          
 232          
 233          
 234          void delay_n40us(uint n)
 235          
 236          {    
 237   1             uint i;
 238   1      
 239   1            uchar j;            
 240   1      
 241   1              for(i=n;i>0;i--)
C51 COMPILER V8.09   ADC0832                                                               03/15/2008 09:11:19 PAGE 5   

 242   1      
 243   1                 for(j=0;j<15;j++)
 244   1                                ;          //
 245   1      
 246   1      }                                         //
 247          
 248          //*******************************
 249          
 250          //*********主函数*****************
 251          
 252          void main(void)
 253          
 254          {
 255   1              
 256   1              unsigned char result;        
 257   1      
 258   1                      LCD_init();
 259   1                      while(1)
 260   1                      {
 261   2                  result = ReadADC();
 262   2                          LCD_disp_char(1,1,result/100+0x30);
 263   2                              result = result %100;
 264   2                              LCD_disp_char(2,1,result/10+0x30);
 265   2                              result = result %10;
 266   2                              LCD_disp_char(3,1,result+0x30);
 267   2                       
 268   2                          delay_n40us(5000);
 269   2                       }
 270   1                       
 271   1      
 272   1              
 273   1      }                 
 274          


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