main.lst

来自「51与ADC0804的编程实现的具体方法」· LST 代码 · 共 264 行

LST
264
字号
C51 COMPILER V8.02   MAIN                                                                  03/10/2008 17:14:46 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //===========================================================
   2          //
   3          //
   4          // COPY RIGHT
   5          //
   6          //
   7          //===========================================================
   8          
   9          // 文件名:              Main.c
  10          // 创建日期:   080303
  11          // 创建:            神之吻
  12          // 描述:                作用:
  13          //                   ADC0804芯片的使用,模数转换试验
  14          //                      现象:
  15          //                      
  16          //                      引脚连接关系:
  17          //                  1.用跳线将P2口的8脚与JE排插连接(即ADC0804的输出引脚DB0-DB7对应单片机的P20-P27)
  18          //                  2.用跳线将P35连接JC5(即ADC0804的片选信号CS接单片机的P35引脚)
  19          //                  3.用跳线将P36连接JC6(即ADC0804的启动转换信号WR接单片机的P36引脚)
  20          //                  4.用跳线将P37连接JC7(即ADC0804的读取转换结果控制信号RD接单片机的P37引脚)
  21          //                          
  22          //------------------------------------------------------------
  23          
  24          
  25          //********************************************************
  26          //*                    头文件
  27          //********************************************************
  28          
  29          #include <reg52.h>
  30          
  31          //*******************************************************
  32          //*                  常量定义
  33          //*******************************************************
  34          
  35          // TRUE/FALSE定义
  36          //---------------------------------------------------
  37          #ifndef TRUE
  38          #define TRUE  0xFF
  39          #endif
  40           
  41          #ifndef FALSE
  42          #define FALSE 0x00
  43          #endif
  44          
  45          // 引脚宏定义
  46          //---------------------------------------------------
  47          sbit ADC_CS = P3^5;       //ADC0804片选控制信号
  48          sbit ADC_WR = P3^6;       //ADC0804启动转换信号WR
  49          sbit ADC_RD = P3^7;       //ADC0804读取转换结果控制信号RD
  50          sbit DOT = P0^2;          //八段数码管小数点控制位
  51          
  52          #define DB P2             //ADC0804的转换结果DB0-DB7
  53          #define BITCODE P0        //八段数码管的位编码
  54          #define BITCHOOSE P1      //位选择,在数码管的六位中选择一位显示
  55          
C51 COMPILER V8.02   MAIN                                                                  03/10/2008 17:14:46 PAGE 2   

  56          
  57          
  58          // 其它常量宏定义
  59          //---------------------------------------------------
  60          #define VREF 10           //参考电压:由于ADC0804的Vref/2外接电压5V,因此进行ADC转换的参考电压为10V
  61          #define FULLSCALE  256    
  62          
  63          //********************************************************
  64          //*                    类型定义
  65          //********************************************************
  66           
  67          // 类型重命名
  68          //---------------------------------------------------
  69          typedef unsigned char  BOOLEAN;                 //布尔类型变量
  70          typedef unsigned char  uint8;                   //无符号8位整型变量
  71          typedef signed   char  int8;                    //有符号8位整型变量
  72          typedef unsigned int   uint16;                  //无符号16位整型变量
  73          typedef signed int     int16;                   //有符号16位整型变量
  74          typedef unsigned long  uint32;                  //无符号32位整型变量
  75          typedef signed  long   int32;                   //有符号32位整型变量
  76          typedef float          fp32;                    //单精度浮点数(32位长度)
  77          
  78          //********************************************************
  79          //*                    全局变量声明
  80          //********************************************************
  81          
  82          // 与八段数码管有关的表定义
  83          //---------------------------------------------------
  84          uint8 code sled_table[] = {     // 位编码
  85                                          0x14,   // 0
  86                                          0xD7,   // 1
  87                                          0x4C,   // 2
  88                                          0x45,   // 3
  89                                          0x87,   // 4
  90                                          0x25,   // 5
  91                                          0x24,   // 6
  92                                          0x57,   // 7
  93                                          0x04,   // 8
  94                                          0x05,   // 9
  95                                          0x06,   // A
  96                                          0xA4,   // B
  97                                          0x3C,   // C
  98                                          0xC4,   // D
  99                                          0x2C,   // E
 100                                          0x2E    // F
 101                                          };
 102          
 103          uint8 code bit_table[] = {      // 位选
 104                                          0xDF,   // bit0
 105                                          0xEF,   // bit1
 106                                          0xF7,   // bit2
 107                                          0xFB,   // bit3
 108                                          0xFD,   // bit4
 109                                          0xFE,   // bit5 
 110                                          };
 111                                          
 112          uint8 code dot = 0xFB;  // 小数点位置
 113          
 114          //与ADC0804采样芯片有关的数据结构
 115          //-----------------------------------------------------
 116          uint8 SampleValue;                   //直接从ADC0804的DB引脚取出的二进制采样结果
 117          fp32  RealVoltage;                                       //转换后的实际电压值
C51 COMPILER V8.02   MAIN                                                                  03/10/2008 17:14:46 PAGE 3   

 118          uint8 RealVoltBit[6];                //转换后地实际电压值的每一位编码值(用于八段数码管显示)
 119          
 120          //********************************************************
 121          //*                    函数原型
 122          //********************************************************
 123          
 124          void AdcStart();
 125          void AdcRead();
 126          void Display();
 127          void delay_ms(uint32 ms);
 128          
 129          //********************************************************
 130          //*                    main函数
 131          //********************************************************
 132          
 133          main()
 134          {
 135   1          while(TRUE)
 136   1              {
 137   2                AdcStart();      //启动一次ADC0804采样
 138   2                delay_ms(100);  //延时100ms,等待采样结束
 139   2                AdcRead();       //完成一次采样后,从ADC0804的DB引脚读取采样值
 140   2                Display();       //将采样结果在八段数码管显示出来
 141   2              }
 142   1      }
 143          
 144          
 145          //*******************************************************
 146          //*                    AdcStart
 147          //*
 148          //*功能描述:启动一次ADC0804采样
 149          //*输入参数:无
 150          //*返回值:无
 151          //*******************************************************
 152          void AdcStart()
 153          {
 154   1              ADC_CS = 0;              //片选信号置0,ADC0804有效
 155   1          
 156   1              ADC_WR = 0;      //WR信号为低电平有效,启动一次ADC采样
 157   1              //NOP
 158   1              ADC_WR = 1;      //采样启动完毕WR信号复位
 159   1              //NOP
 160   1              ADC_CS = 1;      //片选信号复位
 161   1      }
 162          
 163          //*******************************************************
 164          //*                    AdcRead
 165          //*
 166          //*功能描述:完成一次采样后,从ADC0804的DB引脚读取采样值
 167          //*输入参数:无
 168          //*返回值:无
 169          //*******************************************************
 170          void AdcRead()
 171          {
 172   1              ADC_CS = 0;              //片选信号置0,ADC0804有效
 173   1              //__NOP;
 174   1              ADC_RD = 0;      //RD信号为低电平有效,读出采样结果
 175   1              //NOP
 176   1              SampleValue = DB; //读出采样结果
 177   1      
 178   1              ADC_RD = 1;      //采样结果读出后,RD信号复位
 179   1              //NOP
C51 COMPILER V8.02   MAIN                                                                  03/10/2008 17:14:46 PAGE 4   

 180   1              ADC_CS = 1;      //片选信号复位      
 181   1      }
 182          
 183          //*******************************************************
 184          //*                    Display
 185          //*
 186          //*功能描述:将采样结果通过八段数码管显示出来
 187          //*输入参数:无
 188          //*返回值:无
 189          //*******************************************************
 190          void Display()
 191          {
 192   1          uint8 CurBit,CurCode;
 193   1          uint8 VoltInt;  //实际电压值的整数部分
 194   1              fp32  VoltDec;  //实际电压值的小数部分
 195   1              uint8 VoltDectoInt;
 196   1              RealVoltage = VREF * (SampleValue / FULLSCALE); //将二进制字节采样结果转换成实际电压值 
 197   1              VoltInt = (uint8)RealVoltage;    //获得实际电压值的整数部分
 198   1              VoltDec = RealVoltage - VoltInt; //获得实际电压值的小数部分
 199   1              VoltDectoInt = (uint8)(VoltDec * 10000);  //小数点后保留四位
 200   1              //显示小数部分(四位)
 201   1              for(CurBit = 0;CurBit < 4;CurBit ++)
 202   1              {
 203   2                      CurCode = VoltDectoInt % 10;
 204   2                      VoltDectoInt /= 10;
 205   2                      BITCHOOSE = bit_table[CurBit]; //选择当前显示的数码管
 206   2                      BITCODE  = sled_table[CurCode]; //将选中的八段数码管赋予位编码
 207   2              }
 208   1              //显示个位整数与小数点
 209   1              CurCode = VoltInt % 10;    //获得显示数据编码
 210   1              BITCHOOSE = bit_table[5]; //选择当前显示的数码管
 211   1              BITCODE  = sled_table[CurCode]; //将选中的八段数码管赋予位编码
 212   1              DOT = 0;                        //小数点位于个位整数所在的八段数码管上
 213   1              //显示十位整数
 214   1              VoltInt /= 10;
 215   1              CurCode = VoltInt;            //获得显示数据编码
 216   1              BITCHOOSE = bit_table[5]; //选择当前显示的数码管
 217   1              BITCODE  = sled_table[CurCode]; //将选中的八段数码管赋予位编码
 218   1      }
 219          
 220          //*******************************************************
 221          //*                    delay_ms
 222          //*
 223          //*功能描述:ms级延时函数
 224          //*输入参数:
 225          //*返回值:无
 226          //*******************************************************
 227          void delay_ms(uint32 ms)
 228          {
 229   1              uint32 i, j;
 230   1              for(i = 0; i < ms; i++)
 231   1                      for(j = 0; j < 5000; j++);
 232   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    325    ----
   CONSTANT SIZE    =     23    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      18
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.02   MAIN                                                                  03/10/2008 17:14:46 PAGE 5   

   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?