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

📄 max147.lst

📁 基于8位并行AD和12位串行AD的数字直流电压表
💻 LST
字号:
C51 COMPILER V7.06   MAX147                                                                08/08/2007 17:32:12 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAX147
OBJECT MODULE PLACED IN MAX147.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE MAX147.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include"reg51.h"
   2          #include"intrins.h"
   3          #define uchar unsigned char 
   4          #define uint unsigned int
   5          #define nop() _nop_()
   6          #define WEI P2
   7          #define DUAN P0
   8          
   9          code uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
  10          data uchar Disp_Data[4]={0,0,0,0};
  11          idata uint D_Temp[10]={0,0,0,0,0,0,0,0,0};
  12          idata float D_Temp1[10]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
  13          sbit START=P3^2;
  14          /*************变量定义******************/
  15          float Vref=2.5;
  16          bit End_Flag=0;
  17          /*************函数声明******************/
  18          void delay(uchar j);//
  19          void Data_Process(void);
  20          void led_display(void);
  21          void Wr_Contrl_Byte(uchar CB);
  22          /**************************************/
  23          sbit SCLK = P1^0;       //串行时钟
  24          sbit CS = P1^1;         //片选端
  25          sbit DIN = P1^2;        //串行数据输入
  26          sbit SSTRB = P1^3;      //输出闸门
  27          sbit DOUT = P1^4;       //串行数据输出
  28          
  29          /***************************************/
  30          void delay(uchar j)
  31          {       register i;
  32   1              while(j--)
  33   1              {
  34   2                      for(i=0;i<125;i++)
  35   2                      {;}
  36   2              }
  37   1      }
  38          /***************************************/ 
  39          void Wr_Contrl_Byte(uchar CB)
  40          {
  41   1              uchar i;
  42   1              CS=0;
  43   1              for(i=0;i<8;i++)
  44   1              {       
  45   2                      SCLK=0;
  46   2                      DIN=0;
  47   2                      if((CB<<i)&0x80)DIN=1;
  48   2                      SCLK=1;
  49   2                      nop();
  50   2                      nop();
  51   2                      nop();
  52   2              }
  53   1              CS=1;
  54   1      }
  55                   
C51 COMPILER V7.06   MAX147                                                                08/08/2007 17:32:12 PAGE 2   

  56          /***************************************/
  57          uint Re_Data(void)
  58          {
  59   1              uint Con_Data=0;
  60   1              uchar i;
  61   1              CS=0;
  62   1              Con_Data=0;
  63   1              DOUT=1;
  64   1              for(i=0;i<12;i++)
  65   1              {       
  66   2                  SCLK=0;
  67   2                      nop();
  68   2                      nop();
  69   2                      nop();
  70   2                      SCLK=1;
  71   2                      Con_Data<<=1;
  72   2                      if(DOUT)
  73   2                       {Con_Data|=0x01;}
  74   2              }       
  75   1              CS=1;
  76   1              return Con_Data;
  77   1      }
  78          /***************************************/
  79          void Data_Process(void)
  80          {
  81   1              uchar i;
  82   1              float tt;
  83   1              uint dispnumber;
  84   1              if(End_Flag)
  85   1              {
  86   2                      for(i=0;i<10;i++)
  87   2                      {
  88   3                              D_Temp1[i]=2.0*(D_Temp[i]*Vref)/4095.0;
  89   3                      } 
  90   2                      
  91   2                      tt=(D_Temp1[0]+D_Temp1[1]+D_Temp1[2]+D_Temp1[3]+D_Temp1[4]+D_Temp1[5]+D_Temp1[6]+D_Temp1[7]+D_Temp1[8]+D
             -_Temp1[9])/10.0;
  92   2                      //计算数字量对应的电压值(单极性×2)
  93   2                      tt*=1000.0;                                                               //电压放大1000倍,显示到
  94   2                  dispnumber=(uint)tt;
  95   2                      Disp_Data[0]=dispnumber/1000;
  96   2                      Disp_Data[1]=dispnumber%1000/100;
  97   2                      Disp_Data[2]=dispnumber%1000%100/10;
  98   2                      Disp_Data[3]=dispnumber%1000%100%10;
  99   2                      End_Flag=0;
 100   2              }
 101   1      }
 102          /**************************************/
 103          void led_display(void)
 104          {
 105   1              uchar i,j,k;
 106   1          uchar *p,*q;
 107   1              p=&Disp_Data[0];        
 108   1              q=display;      
 109   1              k=0x08;
 110   1                      for(i=0;i<4;i++)
 111   1                      {
 112   2                              WEI=k;
 113   2                              j=*(p+i);
 114   2                              DUAN=*(q+j);
 115   2                              if(i==0)
 116   2                              {DUAN|=0x80;}                   
C51 COMPILER V7.06   MAX147                                                                08/08/2007 17:32:12 PAGE 3   

 117   2                              k>>=1;
 118   2                              delay(1);
 119   2                      }
 120   1      }
 121          
 122          /**************************************/
 123          void main(void)//主程序
 124          {   
 125   1              TH0=(65536-10000)/256;
 126   1              TL0=(65536-10000)%256;
 127   1              TMOD=0x01;
 128   1              ET0=1;
 129   1              EA=1;
 130   1              
 131   1              while(1)
 132   1              {       if(!START)
 133   2                      {
 134   3                              delay(5);
 135   3                              while(!START);
 136   3                              TR0=1;
 137   3                      }       
 138   2                      Data_Process();
 139   2                      led_display();
 140   2              }
 141   1       }
 142          
 143          
 144          void timer0(void)interrupt 1
 145          {       
 146   1              static uchar cnt;
 147   1              TH0=(65536-10000)/256;
 148   1              TL0=(65536-10000)%256;
 149   1              Wr_Contrl_Byte(0xce);   //10001110:通道0,单极单端输入,内部时钟模式
 150   1          D_Temp[cnt]=Re_Data();
 151   1              cnt++;
 152   1              if(cnt==10)
 153   1              {
 154   2                      cnt=0;
 155   2                      End_Flag=1;
 156   2                      TR0=0;
 157   2              }
 158   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    597    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9      13
   IDATA SIZE       =     60    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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