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

📄 adc0809.lst

📁 8路数据循环采集
💻 LST
字号:
C51 COMPILER V8.02   ADC0809                                                               07/23/2007 11:23:20 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE ADC0809
OBJECT MODULE PLACED IN adc0809.OBJ
COMPILER INVOKED BY: D:\Program Files\C51\BIN\C51.EXE adc0809.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h> 
   2          #include <intrins.h>
   3          #define  uchar  unsigned  char 
   4          #define  uint   unsigned  int 
   5          
   6          
   7          #define Digit0 0x01                     // 数码管1寄存器
   8          #define Digit1 0x02                     // 数码管2寄存器
   9          #define Digit2 0x03                     // 数码管3寄存器
  10          #define Digit3 0x04                     // 数码管4寄存器
  11          #define Digit4 0x05                     // 数码管5寄存器
  12          #define Digit5 0x06                     // 数码管6寄存器
  13          #define Digit6 0x07                     // 数码管7寄存器
  14          #define Digit7 0x08                     // 数码管8寄存器
  15          
  16          
  17          #define DecodeMode  0x09                // 译码模式寄存器
  18          #define Intensity   0x0a                // 亮度寄存器
  19          #define ScanLimit   0x0b                // 扫描位数寄存器
  20          #define ShutDown    0x0c                // 低功耗模式寄存器
  21          #define DisplayTest 0x0f                // 显示测试寄存器
  22          
  23          
  24          #define ShutdownMode    0x00            // 低功耗方式
  25          #define NormalOperation 0x01            // 正常操作方式
  26          
  27          #define ScanDigit       0x04        // 扫描位数设置,显示8位数码管
  28          #define DecodeDigit     0xff            // 译码设置,8位均为BCD码
  29          #define IntensityGrade  0x0a            // 亮度级别设置
  30          
  31          #define TestMode        0x01        // 显示测试模式
  32          #define TextEnd         0x00        // 显示测试结束,恢复正常工作模式
  33          
  34          
  35          
  36          sbit DIN = P1^0;                                        // 串行数据输入
  37          sbit CLK = P1^1;                                        // 串行时钟
  38          sbit LOAD =P1^2;                                        // 显示数据锁存控制
  39          
  40          sbit ST=P3^0; 
  41          sbit OE=P3^1; 
  42          sbit EOC=P3^2; 
  43          sbit CLK1=P3^3; 
  44          
  45          double  data  ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};  
  46          uint    data  dis[5]={0x00,0x00,0x00,0x00,0x00};  
  47          
  48          
  49          /* 延时t毫秒 */
  50          void delay(uint t)
  51          {
  52   1              uint i;
  53   1              while(t--)
  54   1              {
  55   2                      /* 对于12M时钟,约延时1ms */
C51 COMPILER V8.02   ADC0809                                                               07/23/2007 11:23:20 PAGE 2   

  56   2                      for (i=0;i<125;i++)
  57   2                      {}
  58   2              }
  59   1      }
  60          
  61          /* 向MAX7219写入字节(8位)*/
  62          void SendChar (uchar ch)
  63          {
  64   1              uchar i,temp;
  65   1          _nop_();
  66   1          for (i=0;i<8;i++)
  67   1          {
  68   2                      temp=ch&0x80;
  69   2              ch=ch<<1;
  70   2              if(temp)
  71   2              {
  72   3                      DIN=1;
  73   3                      CLK=0;
  74   3                      CLK=1;
  75   3              }
  76   2              else
  77   2              {
  78   3                      DIN=0;
  79   3                      CLK=0;
  80   3                      CLK=1;
  81   3              }
  82   2          }
  83   1      }
  84          
  85          /* 向MAX7219写入字(16位)*/
  86          void WriteWord (uchar addr,uchar num)
  87          {
  88   1          LOAD=0;
  89   1          _nop_();
  90   1          SendChar(addr);
  91   1          _nop_();
  92   1          SendChar(num);
  93   1          _nop_();
  94   1          LOAD=1;                             // 锁存进相应寄存器
  95   1      }
  96          
  97          /* MAX7219初始化 */
  98          void InitDisplay (void)
  99          {
 100   1          WriteWord (ScanLimit,ScanDigit);         // 设置扫描界限
 101   1          WriteWord (DecodeMode,DecodeDigit);      // 设置译码模式
 102   1          WriteWord (Intensity,IntensityGrade);    // 设置亮度
 103   1          WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式
 104   1      }
 105          
 106          
 107          
 108          
 109          
 110          
 111          //*******ADC0809转换函数***********/
 112          
 113          void  ADC0809_Convert()
 114          {
 115   1      uchar m;
 116   1      uchar adr=0x00;
 117   1      P2=adr;
C51 COMPILER V8.02   ADC0809                                                               07/23/2007 11:23:20 PAGE 3   

 118   1      for(m=0;m<8;m++)
 119   1       {
 120   2        
 121   2        
 122   2        ST=1;
 123   2        ST=0;
 124   2        _nop_();
 125   2        _nop_();
 126   2        _nop_();
 127   2        _nop_(); //延时4微秒
 128   2        while(EOC==0);//等待转换结束
 129   2        OE=1;
 130   2        ad_data[m]=P0;
 131   2        OE=0;
 132   2        adr++;
 133   2        P2=adr;//取AD值,地址加1
 134   2       }
 135   1      P2=0x00; //地址复位 
 136   1      }
 137          
 138          
 139          
 140          
 141          //***********显示扫描函数**********/
 142          Display_scan()
 143          {
 144   1      
 145   1       char k,n;
 146   1        
 147   1      
 148   1      dis[0]=0x00;                 //通道初值为0
 149   1      for(n=0;n<8;n++)             //每次显示8个数据
 150   1       {
 151   2        ad_data[n]=(ad_data[n]/255*5);
 152   2        dis[1]=(uint)ad_data[n];     
 153   2        ad_data[n]=(ad_data[n]-dis[1])*10;    
 154   2        dis[2]=(uint)ad_data[n];
 155   2        ad_data[n]=(ad_data[n]-dis[2])*10;
 156   2        dis[3]=(uint)ad_data[n];
 157   2        for(k=0;k<4;k++)
 158   2        {
 159   3        WriteWord ( Digit0,  dis[0]);
 160   3        WriteWord ( Digit1,  0x0f );
 161   3        WriteWord ( Digit2,  dis[1]|0x80);
 162   3        WriteWord ( Digit3,  dis[2]);
 163   3        WriteWord ( Digit4,  dis[3]);
 164   3        }
 165   2        delay(1000);  
 166   2        dis[0]++;                 //通道值加1
 167   2       }
 168   1      }
 169          
 170          /* 主函数 */
 171          void main(void)
 172          {   
 173   1         
 174   1      
 175   1              InitDisplay ();                                                 // MAX7219初始化 
 176   1          WriteWord(DisplayTest,TestMode);            // 开始显示测试,点亮所有LED
 177   1              delay(500);                                                     // 延时约3s
 178   1              WriteWord (DisplayTest,TextEnd);                // 退出显示测试模式
 179   1              
C51 COMPILER V8.02   ADC0809                                                               07/23/2007 11:23:20 PAGE 4   

 180   1              ST=0; 
 181   1          OE=0; 
 182   1          
 183   1              ET0=1; 
 184   1          EA=1; 
 185   1          TMOD=0x02; 
 186   1          TH0=216; 
 187   1          TL0=216; 
 188   1          TR0=1; 
 189   1      while(1)
 190   1       {
 191   2       ADC0809_Convert();
 192   2       Display_scan();
 193   2       
 194   2      } 
 195   1        
 196   1      }
 197          
 198          
 199          void timer0(void) interrupt 1 using 0 
 200          { 
 201   1          
 202   1        CLK1=~CLK1; 
 203   1      } 
 204            
 205          
 206          
 207                          


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