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

📄 lm75a.lst

📁 LM75A采集的实时温度
💻 LST
字号:
C51 COMPILER V8.08   LM75A                                                                 09/12/2008 22:19:59 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LM75A
OBJECT MODULE PLACED IN lm75a.OBJ
COMPILER INVOKED BY: D:\Keil C51\C51\BIN\C51.EXE lm75a.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "VIIC_C51.h"
   2          #include <reg51.h>
   3          #include <intrins.h>
   4          #include "lcd1602.h"
   5          #include "type.h"
   6          #include <string.h>
   7          #include <stdio.h>
   8          
   9          #define uchar unsigned char
  10          
  11          
  12          uchar data LM75A=0x90; // LM75A 的I2C 地址
  13          //uchar data MWD[2]={9}; //发送缓冲区
  14          uchar data  MRD[2]={204}; //接收缓冲区
  15          uchar data  MWD[2]={0}; 
  16          
  17          uchar dis[16];
  18          //long int m=0 ;
  19          
  20          void delayms(UINT t);
  21          Is_busy();
  22          void WriteOrder(UCHAR Order);
  23          void WriteData(UCHAR y,UCHAR x,unsigned char LcdData[]);
  24          void LCD_Init(void);
  25          int BinaryToDecimal(int bina) ;
  26          void Decimal_Display(uchar recv[]);
  27          void WriteSChar(UCHAR y,UCHAR x,UCHAR z);
  28          
  29          void Binary_Display(uchar recv[])       ;
  30          
  31          void main(void)
  32          {
  33   1              LCD_Init();     
  34   1      
  35   1              while(1)
  36   1              {
  37   2              
  38   2              IRcvStr(LM75A,0x00,MRD,2); //读取LM75A 温度值
  39   2              //Binary_Display(MRD);
  40   2      
  41   2              Decimal_Display(MRD);
  42   2              //       while(1);
  43   2              
  44   2              }
  45   1      }
  46          //*****************二进制转换成十进制***********
  47          //       bina 为输入的二进制数,d用来处理该数。
  48          //      k为标志位,当k为1时表示输入的数有问题
  49          //为每次分解的个位数;j为二进制的权值;m为累计的十进制和;p为输入的数的位数
  50          //超过8时,该数越界,需要重新输入,定k=1
  51          //***********************************************
  52          
  53          int BinaryToDecimal(int bina)
  54           {
  55   1              int i=0,j=1,m=0;                
C51 COMPILER V8.08   LM75A                                                                 09/12/2008 22:19:59 PAGE 2   

  56   1      
  57   1              while(bina)
  58   1              {
  59   2                      i=bina%10;
  60   2              
  61   2                      m+=i*j;
  62   2                      j=j*2;
  63   2                      bina/=10;
  64   2      
  65   2              }
  66   1              //if(k=1)WriteData(2,0,"over!");
  67   1              return m;
  68   1       }
  69          
  70          
  71          
  72          //**********************二  进制显示子函数***************************//
  73          
  74          
  75          void Binary_Display(uchar recv[])
  76          {
  77   1              int a=1,b,c=0;
  78   1              int i;
  79   1                      
  80   1              for(a=1;a>=0;a--)
  81   1              {
  82   2                      int m=0x01;
  83   2                      for(b=0;b<8;b++)
  84   2                      {
  85   3                              dis[c]=recv[a]&m;
  86   3                              c++;
  87   3                              m<<=1;
  88   3                      }
  89   2              } 
  90   1              
  91   1              
  92   1                
  93   1                for ( i=0;i<15;i++)
  94   1                {
  95   2                      if (dis[14-i]) 
  96   2                              WriteSChar(1,i+1,0x31);
  97   2                              //WriteData(1,i+1,"1");
  98   2                      else
  99   2                               WriteSChar(1,i+1,0x30);
 100   2      
 101   2                                      //WriteData(1,i+1,"0");
 102   2                }
 103   1                
 104   1               if(!dis[15])WriteData(1,0,"")  ;
 105   1               else
 106   1                      WriteData(1,0,"-")  ;
 107   1      }
 108           
 109          
 110          //**********************Last 进制显示子函数***************************//
 111          
 112          void Decimal_Display(uchar recv[])
 113          {
 114   1              int a=1,b,c=0;
 115   1              int i;
 116   1              int k=0;
 117   1              long int m=0,j=1;
C51 COMPILER V8.08   LM75A                                                                 09/12/2008 22:19:59 PAGE 3   

 118   1              
 119   1              for(a=1;a>=0;a--)
 120   1              {
 121   2                      int n=0x01;
 122   2                      for(b=0;b<8;b++)
 123   2                      {
 124   3                              dis[c]=recv[a]&n;
 125   3                              c++;
 126   3                              n<<=1;
 127   3                      }
 128   2              }
 129   1              
 130   1              if(!dis[15])WriteData(1,0,"")  ;
 131   1              else
 132   1                      WriteData(1,0,"-")  ;    
 133   1      
 134   1              for(a=5;a<=14;a++)
 135   1              {
 136   2                      if(dis[a])k=1;
 137   2                      else k=0;
 138   2                      m+=k*j;
 139   2                      j=j*2;
 140   2              
 141   2              }
 142   1              
 143   1      /*              WriteSChar(1,1,(m/1000)+0x30);  
 144   1                      m=m%1000;
 145   1                      WriteSChar(1,2,(m/100)+0x30);   
 146   1                      m=m%100;
 147   1                      WriteSChar(1,3,(m/10)+0x30);    
 148   1                      m=m%10;
 149   1                      WriteSChar(1,4,(m%10)+0x30);    
 150   1      */
 151   1      
 152   1      
 153   1              m=(m*1000)/8;
 154   1      
 155   1      
 156   1              WriteSChar(1,1,(m/100000)+0x30);                          //3位整数,3位小数,
 157   1              m=m%100000;
 158   1              WriteSChar(1,2,(m/10000)+0x30);
 159   1              m=m%10000;
 160   1              WriteSChar(1,3,(m/1000)+0x30);
 161   1              m=m%1000;
 162   1              WriteData(1,4,".");
 163   1      
 164   1              WriteSChar(1,5,(m/100)+0x30);
 165   1              m=m%100;
 166   1              WriteSChar(1,6,(m/10)+0x30);
 167   1              m=m%10;
 168   1              WriteSChar(1,7,(m%10)+0x30);
 169   1      
 170   1              WriteData(1,8,"C");
 171   1      
 172   1              
 173   1       
 174   1      
 175   1       
 176   1      }
*** WARNING C280 IN LINE 115 OF LM75A.C: 'i': unreferenced local variable
 177           
 178          //********************延时********************************
C51 COMPILER V8.08   LM75A                                                                 09/12/2008 22:19:59 PAGE 4   

 179          
 180          void delayms(UINT t)
 181          {
 182   1              UCHAR i;
 183   1              while(t--)
 184   1              {
 185   2                      for(i=0;i<100;i++);
 186   2              }
 187   1      }
 188          
 189          
 190          //********************************************************************
 191          //       LCD1602 判忙函数
 192          //********************************************************************
 193          Is_busy()
 194          {
 195   1              rs=1;
 196   1              rw=0;
 197   1              en=0;
 198   1              LCD_Data=0xff;
 199   1              rs=0;
 200   1              rw=1;
 201   1              en=0;
 202   1              delayms(10);
 203   1              en=1;
 204   1              while(busy);
 205   1      
 206   1      }
 207          //********************************************************************
 208          //        写命令
 209          //********************************************************************
 210          void WriteOrder(UCHAR Order)
 211          {
 212   1              //LCD_Data=0xff;
 213   1              //Is_busy();
 214   1              rs=0;
 215   1              rw=0;
 216   1              en=0;
 217   1          delayms(10);
 218   1              en=1;
 219   1              LCD_Data=Order;
 220   1                      /*
 221   1      Order=
 222   1              0X01;//清屏
 223   1              0X02;//归位
 224   1              0X38;// 8位2行5x7点阵
 225   1              0X08;//显示器关、光标关、闪烁关
 226   1              0X09;//显示器关、光标关、闪烁开
 227   1              0X0A;//显示器关、光标开、闪烁关
 228   1              0X0B;//显示器关、光标开、闪烁开
 229   1              0X0C;//显示器开、光标关、闪烁关
 230   1              0X0D;//显示器开、光标关、闪烁开
 231   1              0X0E;//显示器开、光标开、闪烁关
 232   1              0X0F;//显示器开、光标开、闪烁开
 233   1              0X06;//文字不动,光标自动右移
 234   1              0X07;//文字,光标自动右移
 235   1              0x05;//文字,光标自动左移
 236   1              0X80;//写入显示起始地址(第一行第一个位置)
 237   1              0XC0;//写入显示起始地址(第二行第一个位置)
 238   1              
 239   1              */
 240   1      
C51 COMPILER V8.08   LM75A                                                                 09/12/2008 22:19:59 PAGE 5   

 241   1      }
 242          //********************************************************************
 243          //        写字符串
 244          //********************************************************************
 245          void WriteData(UCHAR y,UCHAR x,unsigned char LcdData[])//LcdData)
 246          {
 247   1              UCHAR j,len;
 248   1              len=strlen(LcdData);
 249   1              //UCHAR D_Idx;
 250   1              //LCD_Data=0xff;
 251   1              //Is_busy();
 252   1              if(1==y) 
 253   1              {
 254   2                      WriteOrder(x+0x80);
 255   2              }
 256   1              else
 257   1              { 
 258   2                      WriteOrder(x+0xC0);     
 259   2              }
 260   1              
 261   1          rs=0;
 262   1              rw=0;
 263   1              en=0;
 264   1          delayms(10);
 265   1              en=1;
 266   1              //D_Idx=len(LcdData);
 267   1              for(j=0;j<len;j++)
 268   1              {
 269   2                      //LCD_Data=LCD[j];
 270   2                      LCD_Data=LcdData[j];
 271   2                      Is_busy();
 272   2                      en=1;
 273   2              }
 274   1                      
 275   1      }
 276          //********************************************************
 277          //写单个字符
 278          //********************************************************
 279          void WriteSChar(UCHAR y,UCHAR x,UCHAR z)//LcdData)
 280          {
 281   1              UCHAR j;
 282   1      //      len=strlen(LcdData);
 283   1              //UCHAR D_Idx;
 284   1              //LCD_Data=0xff;
 285   1              //Is_busy();
 286   1              if(1==y) 
 287   1              {
 288   2                      WriteOrder(x+0x80);
 289   2              }
 290   1              else
 291   1              { 
 292   2                      WriteOrder(x+0xC0);     
 293   2              }
 294   1              
 295   1          rs=0;
 296   1              rw=0;
 297   1              en=0;
 298   1          delayms(10);
 299   1              en=1;
 300   1              //D_Idx=len(LcdData);
 301   1      
 302   1                      //LCD_Data=LCD[j];
C51 COMPILER V8.08   LM75A                                                                 09/12/2008 22:19:59 PAGE 6   

 303   1              LCD_Data=z;
 304   1              Is_busy();
 305   1              en=1;
 306   1      
 307   1                      
 308   1      }
*** WARNING C280 IN LINE 281 OF LM75A.C: 'j': unreferenced local variable
 309          
 310          //********************************************************************
 311          //        LCD1602初始化
 312          //********************************************************************
 313          void LCD_Init(void)
 314          {
 315   1              
 316   1              WriteOrder(0X01);
 317   1              WriteOrder(0x38);
 318   1              WriteOrder(0x0C);
 319   1              WriteOrder(0x06);
 320   1              
 321   1      }
 322          
 323          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1433    ----
   CONSTANT SIZE    =      7    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21      55
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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