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

📄 adc0832.lst

📁 WL025_ADC0832数字电压表数码管显示
💻 LST
字号:
C51 COMPILER V7.50   ADC0832                                                               02/05/2006 18:05:41 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE ADC0832
OBJECT MODULE PLACED IN ADC0832.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE ADC0832.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          /********************************************************************/
   3          /*                                                                  */
   4          /* ME300B单片机开发系统演示程序 - ADC0832电压表                     */
   5          /*                                                                  */
   6          /* 采用三位数码管显示                                               */
   7          /* 参考电压接至5V电源                                               */
   8          /* 最小输出电压:0.00V  最大输出电压:5.00V  分辨率:0.02V          */
   9          /*                                                                  */
  10          /* 邮箱:  gguoqing@willar.com                                       */
  11          /* 网站: http://www.willar.com                                     */
  12          /* 作者: gguoqing                                                  */
  13          /* 时间: 2006/01/20                                                */
  14          /*                                                                  */
  15          /*                                                                  */
  16          /*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved  */
  17          /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!        */
  18          /*                                                                  */
  19          /********************************************************************/
  20          
  21          #include"reg51.h"
  22          #include"intrins.h"
  23          
  24          #define uchar unsigned char
  25          #define uint  unsigned int
  26          
  27          #define disdata  P0        //显示数据段码输出口
  28          
  29          #define channel_0  0x02   //单通道0输入选择
  30          #define channel_1  0x03   //单通道1输入选择
  31          
  32          sbit ADC_CS = P3^4;        //片选端
  33          sbit ADC_CLK= P1^0;        //时钟端
  34          sbit ADC_DI = P1^1;        //数据输入输出复用
  35          sbit ADC_DO = P1^1;        //DI和DO端都接在P1.1
  36          
  37          sbit  ACC0=ACC^0;          //通道与输入方式控制字
  38          sbit  ACC1=ACC^1;          //通道与输入方式控制字
  39          sbit  DISX=P0^7;           //LED小数点
  40          
  41          uchar code disply[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; 
  42          
  43                               // 0    1    2    3    4    5    6    7    8    9   关闭
  44          
  45          uchar code dis_scan[3]={0x7f,0xbf,0xdf}; //列扫描控制字
  46          
  47          uint data dis[4]={0x00,0x00,0x00,0x00}; //定义3个显示数据单元和一个数据存储单元 
  48          
  49          /********************************************************************/
  50          /*                                                                  */
  51          /* 延时函数                                                         */
  52          /*                                                                  */
  53          /********************************************************************/
  54          
  55          delay(int ms)
C51 COMPILER V7.50   ADC0832                                                               02/05/2006 18:05:41 PAGE 2   

  56          {                           
  57   1          int i;
  58   1          while(ms--)
  59   1          {
  60   2            for(i = 0; i< 250; i++)
  61   2            {
  62   3             _nop_();
  63   3             _nop_();
  64   3             _nop_();
  65   3             _nop_();
  66   3            }
  67   2          }
  68   1      }
  69          
  70          /********************************************************************/
  71          /*                                                                  */
  72          /*  启动ADC转换                                                     */
  73          /*                                                                  */
  74          /********************************************************************/
  75          
  76          ADC_start() 
  77          {
  78   1          ADC_CS=1;         //一个转换周期开始
  79   1          _nop_(); 
  80   1          ADC_CLK=0;      
  81   1          _nop_();
  82   1          ADC_CS=0;         //CS置0,片选有效
  83   1          _nop_();
  84   1          ADC_DI=1;         //DI置1,起始位
  85   1          _nop_();
  86   1          ADC_CLK=1;        //第一个脉冲
  87   1          _nop_();
  88   1          ADC_DI=0;         //在负跳变之前加一个DI反转操作
  89   1          _nop_();
  90   1          ADC_CLK=0;      
  91   1          _nop_();      
  92   1      }
  93           
  94          /********************************************************************/
  95          /*                                                                  */
  96          /*AD转换函数                                                        */
  97          /*选择输入通道,输入信号的模式《单端输入,或差分输入》              */
  98          /*                                                                  */
  99          /********************************************************************/
 100                     
 101          ADC_read(uchar mode)
 102          {
 103   1          uchar i;
 104   1          ADC_start();      //启动转换开始
 105   1          ACC=mode;
 106   1          ADC_DI=ACC1;      //输出控制位1,DI=1,单通道输入,DI=0,差分输入。
 107   1          ADC_CLK=1;        //第二个脉冲
 108   1          _nop_();
 109   1          ADC_DI=0;
 110   1          ADC_CLK=0;
 111   1          _nop_();
 112   1          ADC_DI=ACC0;      //输出控制位0,DI=0,通道0输入,DI=1,通道1输入。
 113   1          ADC_CLK=1;        //第三个脉冲
 114   1          _nop_();
 115   1          ADC_DI=1;
 116   1          ADC_CLK=0;        //输入模式和通道号已经选择完。
 117   1      
C51 COMPILER V7.50   ADC0832                                                               02/05/2006 18:05:41 PAGE 3   

 118   1          ADC_CLK=1;        //第四个脉冲
 119   1          ACC=0;                 
 120   1          
 121   1          for(i=8;i>0;i--)  //读取8位数据
 122   1        {                      
 123   2          ADC_CLK=0;        //脉冲下降沿
 124   2         
 125   2          ACC=ACC<<1;
 126   2          ACC0=ADC_DO;      //读取DO端数据
 127   2          _nop_();
 128   2          _nop_();                
 129   2          ADC_CLK=1;                   
 130   2        }
 131   1          ADC_CS=1;         //CS=1,片选无效。
 132   1          return(ACC);
 133   1      }
 134          
 135          /********************************************************************/
 136          /*                                                                  */
 137          /* 数据处理与显示函数                                               */
 138          /* 将采集到的数据进行16进制转换为10进制的处理,然后送显示。         */
 139          /*                                                                  */
 140          /********************************************************************/
 141          
 142          show_value(uchar ad_data)
 143          
 144          {
 145   1          uchar  k; 
 146   1       
 147   1          dis[2]=ad_data/51;   //AD值转换为3为BCD码,最大为5.00V。
 148   1          dis[3]=ad_data%51;   //余数暂存
 149   1          dis[3]=dis[3]*10;    //计算小数第一位
 150   1          dis[1]=dis[3]/51;
 151   1          dis[3]=dis[3]%51;
 152   1          dis[3]=dis[3]*10;    //计算小数第二位
 153   1          dis[0]=dis[3]/51;                                                                             //
 154   1           
 155   1          for(k=0;k<3;k++)
 156   1           {
 157   2             disdata=disply[dis[k]];
 158   2             if(k==2){DISX=0;}
 159   2             P2=dis_scan[k];
 160   2             delay(1);
 161   2             P2=0xff;
 162   2           }          
 163   1      } 
 164                
 165          /********************************************************************/
 166          /*                                                                  */
 167          /*  主函数                                                          */
 168          /*                                                                  */
 169          /********************************************************************/
 170          main()
 171          { 
 172   1          uchar i,j;
 173   1          while(1)
 174   1          {
 175   2            i=ADC_read(channel_0);
 176   2            for(j=0;j<20;j++)      
 177   2            {
 178   3              show_value(i);
 179   3            }     
C51 COMPILER V7.50   ADC0832                                                               02/05/2006 18:05:41 PAGE 4   

 180   2          }
 181   1      }
 182           
 183          /********************************************************************/ 
 184          /*                                                                  */
 185          /*将i=ADC_read(channel_0)改为i=ADC_read(channel_1)即可使用JP6输入   */
 186          /*                                                                  */
 187          /********************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    256    ----
   CONSTANT SIZE    =     14    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       1
   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 + -