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

📄 max1870.lst

📁 max187的读取操作 用1602来显示!
💻 LST
字号:
C51 COMPILER V8.06   MAX1870                                                               08/17/2008 09:54:50 PAGE 1   


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

line level    source

   1          /********************************************************************/
   2          //*********************************************************************/
   3          #include<reg52.h>
   4          #include<intrins.h>
   5          //#include<stdio.h>
   6          #include<math.h> 
   7          //extern float pow   (float x, float y);       //用到pow函数
   8          #define uint unsigned int 
   9          #define uchar unsigned char
  10          /*******************max187连线图********************/
  11          sbit CS=P2^1;    //max187片选
  12          sbit CLK=P2^0;   //max187时钟脉冲
  13          sbit SDOUT=P2^2;  //max187数据输出口,返回给AT89S51
  14          /*************LCD1602连线图**********************/
  15          sbit RS=P1^2;      //数据\命令选择
  16          sbit RW=P1^1;      //读\写选择
  17          sbit E=P1^0;       //使能端
  18          /*************变量定义********************/
  19          //由于存放时数据范围的不同,要注意各变量的类型 
  20          uint num=0,temp,x=0;                    
  21          uchar i,xx,ge,fen1,fen2,fen3,t0;     //用在对数据的处理
  22          uint table[12]={0,0,0,0,0,0,0,0,0,0,0,0};      //暂存max187读回的二进制数
  23          /*****************************/
  24          /*延迟子程序.可运用于整个程序
  25          /*****************************/
  26          void delay(uint z)
  27          {
  28   1          uint x,y;
  29   1          for(x=z;x>0;x--)
  30   1              for(y=110;y>0;y--);
  31   1      }
  32          /********************************/
  33          /*max187子程序
  34          /********************************/
  35          /***************max187begin************/
  36          void read_max187(void)
  37          {       
  38   1      //   uint count=0;
  39   1          CS=1;
  40   1          CLK=0;
  41   1          CS=0;                    // 片选低电平,开始转换
  42   1      //  while(SDOUT==0);
  43   1          for(i=0;i<8;i++)             //延迟,等待转换结束
  44   1          {
  45   2              _nop_();
  46   2          }
  47   1          CLK=1;
  48   1          CLK=0;
  49   1          xx=SDOUT;
  50   1      //  count=count^xx;             
  51   1          table[0]=xx;              //将读回的数值存入table数组,便于后面进行的数制转换的处理
  52   1          for(i=0;i<11;i++)
  53   1          {
  54   2              CLK=1;
  55   2              CLK=0;                    
C51 COMPILER V8.06   MAX1870                                                               08/17/2008 09:54:50 PAGE 2   

  56   2      //        count=count<<1;
  57   2                  xx=SDOUT;
  58   2      //        count=count^xx;
  59   2                  table[i+1]=xx;           
  60   2          }                      //运用完12次,存入12位二进制数
  61   1          CLK=1;
  62   1          CLK=0;
  63   1          CS=1;                 //读完数据,片选拉高
  64   1      //   return count;
  65   1      }
  66          /*********************max187end******************/
  67          /******************************************/       
  68          /*将max187返回的二进制转换为十进制,由LCD显示
  69          /******************************************/
  70          uint change_code(void)
  71          {   float j;
  72   1          read_max187();
  73   1      
  74   1              for(i=0,j=11;i<12,j>=0;j--,i++)
  75   1              {
  76   2                x=table[i]*pow( 2, j);
  77   2                num+=x;
  78   2              }
  79   1      
  80   1      /*    x=table[0]*2048;    //最高位
  81   1          num=num+x;          //由num进行十进制数值的累加
  82   1      
  83   1          x=table[1]*1024;    //次高位
  84   1          num=num+x; 
  85   1      
  86   1          x=table[2]*512;     //第十位
  87   1          num=num+x;
  88   1          
  89   1          x=table[3]*256;
  90   1          num=num+x;
  91   1          
  92   1          x=table[4]*128;
  93   1          num=num+x;
  94   1      
  95   1          x=table[5]*64;
  96   1          num=num+x;
  97   1      
  98   1          x=table[6]*32;
  99   1          num=num+x;
 100   1      
 101   1          x=table[7]*16;
 102   1          num=num+x;
 103   1      
 104   1          x=table[8]*8;
 105   1          num=num+x;
 106   1      
 107   1          x=table[9]*4;      //第三位
 108   1          num=num+x;
 109   1      
 110   1          x=table[10]*2;     //次低位
 111   1          num=num+x;
 112   1                  
 113   1          x=table[11]*1;     //最低位
 114   1          num=num+x;
 115   1           
 116   1       */ 
 117   1        return num;          //num累加得最后要显示的十进制数值,做为函数的返回值    
C51 COMPILER V8.06   MAX1870                                                               08/17/2008 09:54:50 PAGE 3   

 118   1      }
 119          /*******************************/
 120          /*LCD1602子程序
 121          /*******************************/
 122          /*********LCD1602begin*******/
 123          void write_com(uchar com)     //写命令子函数
 124          {
 125   1          RS=0;
 126   1          P0=com;
 127   1          RW=0;
 128   1          delay(5);
 129   1          E=1;
 130   1          delay(5);
 131   1          E=0;
 132   1      }
 133          void write_data(uchar date)        //写数据子函数
 134          {
 135   1          RS=1;
 136   1          P0=date;
 137   1          RW=0;
 138   1          delay(5);
 139   1          E=1;
 140   1          delay(5);
 141   1          E=0;
 142   1      }
 143          void write_str(uchar add,uchar *str)        //从一个地址开始写字符串
 144          {
 145   1          write_com(add);        //要写数据的地址
 146   1          while(*str!='\0')
 147   1          {
 148   2              write_data(*str++);
 149   2          }
 150   1      }
 151          void init(void)            //LCD初始化函数
 152          {
 153   1          E=0;
 154   1          write_com(0x38);    //显示模式设置
 155   1          write_com(0x0c);    //显示ON,显示光标OFF,光标闪烁OFF
 156   1          write_com(0x06);    //写完一个字符,地址指针右移
 157   1          write_com(0x01);    //清屏
 158   1          write_com(0x80+0x00);  
 159   1      }
 160          /*************LCD1602end****************/
 161          /*******************************/
 162          /*主函数
 163          /*******************************/
 164          void main(void)
 165          {       
 166   1      TMOD=0x01;
 167   1      TH0=(65536-20000)/256;
 168   1      TL0=(65536-20000)%256;
 169   1      EA=1;
 170   1      ET0=1;
 171   1      TR0=1;
 172   1          init();      
 173   1          write_str(0x80+1,"Voltage  Value");
 174   1          write_str(0x80+0x40+6,".");     
 175   1          write_str(0x80+0x40+10,"V");       
 176   1          while(1)
 177   1          {   if(t0==15){     t0=0;
 178   3             temp=change_code();
 179   3                      temp=temp-15;
C51 COMPILER V8.06   MAX1870                                                               08/17/2008 09:54:50 PAGE 4   

 180   3              ge=temp/1000%10;           
 181   3              fen1=temp/100%10;       
 182   3              fen2=temp/10%10;         
 183   3              fen3=temp%10; 
 184   3                      delay(10);            
 185   3      
 186   3              write_com(0x80+0x40+5);
 187   3              write_data(0x30+ge); 
 188   3                      delay(5);
 189   3              write_com(0x80+0x40+7);
 190   3              write_data(0x30+fen1);
 191   3                      delay(5);
 192   3      
 193   3              write_com(0x80+0x40+8);
 194   3              write_data(0x30+fen2);
 195   3                      delay(15);
 196   3              write_com(0x80+0x40+9);
 197   3              write_data(0x30+fen3);
 198   3                      delay(50);
 199   3      
 200   3              num=0;           
 201   3              temp=0; 
 202   3                      }    
 203   2          }
 204   1      }
 205          
 206          void time0() interrupt 1
 207          {
 208   1      TH0=(65536-50000)/256;
 209   1      TL0=(65536-50000)%256;
 210   1      t0++;
 211   1      } 


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