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

📄 main.lst

📁 c51控制ds1820在1602上显示温度
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  05/28/2008 22:19:05 PAGE 1   


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

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #define   uchar unsigned char
   4          
   5          
   6          #define  E  INT0        //液晶控制线定义
   7          #define  RS  RXD
   8          #define  RW  TXD                //液晶控制线定义
   9          
  10          
  11           
  12          sbit    D0=P2^7;        //传感器数据线定义
  13          bit status;
  14          
  15          code uchar ANSC[]={'0','1','2','3','4','5','6','7','8','9'};
  16          code uchar error[]="NO DEVICE!";
  17          code uchar table[]="The temper is:";
  18               uchar Temper[2];
  19          
  20          void delay1(uchar del)
  21          {
  22   1              uchar i;
  23   1              for(i=0;i<del;i++);
  24   1      }       
  25          
  26          
  27          
  28          void delay2(unsigned int i)
  29          {
  30   1               while(--i);
  31   1      }
  32          
  33          
  34          
  35          
  36          void delay(uchar del)
  37          {
  38   1              uchar i,j;
  39   1              for(i=del;i>0;i--)
  40   1                      for(j=0;j<110;j++);
  41   1      }
  42          
  43          
  44          
  45          
  46          
  47          
  48          //*******************************************************
  49          void Write_Com(uchar com)
  50          {
  51   1              
  52   1              RS=0;
  53   1              P0=com;
  54   1              delay(1);
  55   1              E=1;
C51 COMPILER V7.06   MAIN                                                                  05/28/2008 22:19:05 PAGE 2   

  56   1              delay(1);       
  57   1              E=0;
  58   1      }
  59          
  60          void Write_Data(uchar date)
  61          {
  62   1              RS=1;
  63   1              P0=date;
  64   1              delay(1);
  65   1              E=1;
  66   1              delay(2);
  67   1              E=0;
  68   1      }
  69          //*******************************************************
  70          
  71          
  72          
  73          //*******************一线总线的写操作********************
  74          
  75          
  76          
  77          void write_command(uchar com1)      //一线总线写命令
  78          {
  79   1              unsigned char i=0;
  80   1              for (i=8; i>0; i--)
  81   1              {
  82   2                      D0 = 0;
  83   2                      _nop_();_nop_();
  84   2                      D0=1;
  85   2                      D0 = com1&0x01;
  86   2                  delay2(5);
  87   2                  D0 = 1;
  88   2                  com1>>=1;
  89   2          }
  90   1      }
  91          //********************************************************
  92          
  93          
  94          
  95          
  96          
  97          
  98          
  99          unsigned char read_data()
 100          {
 101   1                      unsigned char i=0;
 102   1                      unsigned char temp=0;
 103   1                      for (i=8;i>0;i--)
 104   1                       {
 105   2                              D0 = 0; 
 106   2                              _nop_();_nop_();
 107   2                              temp>>=1;
 108   2                              D0 = 1; 
 109   2                              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
 110   2                              if(D0)  temp|=0x80;
 111   2                              delay2(4);
 112   2                       }
 113   1                      _nop_();_nop_();_nop_();
 114   1                       return(temp);
 115   1      }
 116          
 117          
C51 COMPILER V7.06   MAIN                                                                  05/28/2008 22:19:05 PAGE 3   

 118          
 119          void reset()
 120          {
 121   1              uchar i;
 122   1              D0=1;
 123   1              D0=0;
 124   1              for(i=0;i<60;i++)
 125   1                      _nop_();
 126   1              for(i=0;i<61;i++)
 127   1                      _nop_();        
 128   1              D0=1;
 129   1              delay1(9);
 130   1              status=D0;
 131   1              D0=1;
 132   1              for(i=0;i<60;i++)
 133   1                      _nop_();
 134   1              for(i=0;i<61;i++)
 135   1                      _nop_();        
 136   1      }
 137          
 138          
 139          void init1()
 140          {
 141   1              uchar i;
 142   1              reset();                                //传感器初始化和错误处理                                
 143   1              while(status)
 144   1              {
 145   2                      reset();
 146   2                      if(status)
 147   2                              {
 148   3                                      reset();
 149   3                                      if(status)
 150   3                                              {
 151   4                                                      i=0;
 152   4                                                      Write_Com(0x01);
 153   4                                                      delay(5);
 154   4                                                      Write_Com(0x80);
 155   4                                                      while(error[i]!='\0')
 156   4                                                      {
 157   5                                                              Write_Data(error[i]);
 158   5                                                              i++;
 159   5                                                      }
 160   4                                                      while(1);               
 161   4                                              }
 162   3                              }
 163   2                      break;               //传感器初始化和错误处理
 164   2              }       
 165   1      }
 166          
 167          
 168          
 169          
 170          void Init()
 171          {       
 172   1              D0=1;
 173   1              E=0;                     //液晶初始化   
 174   1              RW=0;
 175   1              Write_Com(0x38);
 176   1              Write_Com(0x0c);
 177   1              Write_Com(0x06);
 178   1              Write_Com(0x01);
 179   1              delay(5);               //液晶初始化
C51 COMPILER V7.06   MAIN                                                                  05/28/2008 22:19:05 PAGE 4   

 180   1              
 181   1      }                               
 182          
 183          
 184          
 185          //*******************************************************
 186          
 187          void main()
 188          {       
 189   1              uchar   MSB,LSB,shiwei,gewei,xiaoshu0,xiaoshu1,xiaoshu2,xiaoshu3;
 190   1              
 191   1              unsigned char i;
 192   1              Init();
 193   1              Write_Com(0x80);
 194   1              i=0;
 195   1              while(table[i]!='\0')
 196   1              {
 197   2                      Write_Data(table[i]);
 198   2                      i++;
 199   2                      delay(1);
 200   2              }       
 201   1              
 202   1      
 203   1      
 204   1      loop:init1();
 205   1              write_command(0xcc);          //跳过ROM匹配
 206   1              write_command(0x44);          //启动温度转换
 207   1              delay(255);
 208   1              delay(255);
 209   1          init1();                       //复位传感器
 210   1              write_command(0xcc);          //跳过ROM匹配
 211   1              write_command(0xbe);          //读取温度指令
 212   1              LSB=read_data();     //温度的小数位
 213   1              MSB=(read_data()<<4)|(LSB>>4);//温度的整数位
 214   1              shiwei=MSB/10;
 215   1              gewei=MSB%10;
 216   1              xiaoshu0=(LSB&0x0f)*625/1000;
 217   1              xiaoshu1=(((LSB&0x0f)*625)%1000)/100;
 218   1              xiaoshu2=(((LSB&0x0f)*625)%100)/10;
 219   1              xiaoshu3=((LSB&0x0f)*625)%10;
 220   1              Temper[0]=ANSC[shiwei];
 221   1              Temper[1]=ANSC[gewei];
 222   1              Temper[2]='.';  
 223   1              Temper[3]=ANSC[xiaoshu0];
 224   1              Temper[4]=ANSC[xiaoshu1];
 225   1              Temper[5]=ANSC[xiaoshu2];
 226   1              Temper[6]=ANSC[xiaoshu3];
 227   1              Temper[7]=0xdf;
 228   1              Temper[8]='C';
 229   1              Write_Com(0x80+0x45);
 230   1              Write_Data(Temper[0]);
 231   1              Write_Data(Temper[1]);
 232   1              Write_Data(Temper[2]);
 233   1              Write_Data(Temper[3]);
 234   1              Write_Data(Temper[4]);
 235   1              Write_Data(Temper[5]);
 236   1              Write_Data(Temper[6]);
 237   1              Write_Data(Temper[7]);
 238   1              Write_Data(Temper[8]);
 239   1              goto    loop;
 240   1      }

C51 COMPILER V7.06   MAIN                                                                  05/28/2008 22:19:05 PAGE 5   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    577    ----
   CONSTANT SIZE    =     36    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       5
   IDATA SIZE       =   ----    ----
   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 + -