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

📄 18b20.lst

📁 压缩包中含有DS10B20,JM12864液晶模块的资料,以及DS18B201有LCD显示温度的2个KEIL C程序.和电路原理图.
💻 LST
字号:
C51 COMPILER V7.06   18B20                                                                 08/11/2007 19:23:02 PAGE 1   


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

stmt level    source

   1          #include "reg52.h"
   2          #include "intrins.h"
   3          
   4          
   5          void write_op(unsigned char instruction);
   6          void write_dat(unsigned char indata);
   7          void check_busy();
   8          void lcd_ini();
   9          
  10          sbit DQ =P3^3;   //定义通信端口
  11          //延时函数
  12          
  13          sbit RS=P2^0;
  14          sbit RW=P2^1;
  15          sbit E=P2^2;
  16          sbit PSB=P2^3;
  17          sbit RST=P2^5;
  18          
  19          unsigned int th,tl;
  20          unsigned char  dis_char[]={ "室温是度"};
  21          
  22          unsigned char code line[]={0x80,0x90,0x88,0x98};
  23          
  24          void delay(unsigned int i)
  25          {
  26   1           while(i--);
  27   1          
  28   1      }
  29          
  30          //初始化函数
  31          Init_DS18B20()
  32          {
  33   1       unsigned char x=0;
  34   1       DQ = 1;    //DQ复位
  35   1       delay(8);  //稍做延时
  36   1       DQ = 0;    //单片机将DQ拉低
  37   1       delay(80); //精确延时 大于 480us
  38   1       DQ = 1;    //拉高总线
  39   1       delay(14);
  40   1       x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  41   1       delay(20);
  42   1      }
  43          //读一个字节
  44          ReadOneChar(void)
  45          {
  46   1      unsigned char i=0;
  47   1      unsigned char dat = 0;
  48   1      for (i=8;i>0;i--)
  49   1       {
  50   2        DQ = 0; // 给脉冲信号
  51   2        dat>>=1;
  52   2        DQ = 1; // 给脉冲信号
  53   2        if(DQ)
  54   2         dat|=0x80;
  55   2        delay(4);
C51 COMPILER V7.06   18B20                                                                 08/11/2007 19:23:02 PAGE 2   

  56   2       }
  57   1       return(dat);
  58   1      }
  59          //写一个字节
  60          WriteOneChar(unsigned char dat)
  61          {
  62   1       unsigned char i=0;
  63   1       for (i=8; i>0; i--)
  64   1       {
  65   2        DQ = 0;
  66   2        DQ = dat&0x01;
  67   2        delay(5);
  68   2        DQ = 1;
  69   2        dat>>=1;
  70   2       }
  71   1      delay(4);
  72   1      }
  73          //读取温度
  74          void ReadTemperature()
  75          {
  76   1      unsigned char a=0;
  77   1      unsigned char b=0;
  78   1      unsigned int t;
  79   1      Init_DS18B20();
  80   1      WriteOneChar(0xCC); // 跳过读序号列号的操作
  81   1      WriteOneChar(0x44); // 启动温度转换
  82   1      Init_DS18B20();
  83   1      WriteOneChar(0xCC); //跳过读序号列号的操作
  84   1      WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  85   1      a=ReadOneChar();   //读取温度值低位
  86   1      b=ReadOneChar();   //读取温度值高位
  87   1                 
  88   1      t=b<<8;          
  89   1      t=t|a;
  90   1      th=t>>4;
  91   1      tl=(t&0x0f)*625;        
  92   1      }
  93          
  94          
  95          void delayms(unsigned char n)
  96          {
  97   1       while(n--);
  98   1      }
  99          
 100          
 101          void write_op(unsigned char instruction)
 102          {
 103   1      check_busy();
 104   1      RS=0;
 105   1      RW=0;
 106   1      P0=instruction;
 107   1      E=1;
 108   1      _nop_();
 109   1      E=0;
 110   1      }
 111          
 112          void write_dat(unsigned char indata)
 113          {
 114   1      check_busy();
 115   1      RS=1;
 116   1      RW=0;
 117   1      P0=indata;
C51 COMPILER V7.06   18B20                                                                 08/11/2007 19:23:02 PAGE 3   

 118   1      E=1;
 119   1      _nop_();
 120   1      E=0;
 121   1      }
 122          
 123          void check_busy()
 124          {
 125   1      RS=0;
 126   1      RW=1;
 127   1      E=1;
 128   1      _nop_();
 129   1      while((bit)P0 & 0x80);
 130   1      E=0;
 131   1      }
 132          
 133          void lcd_ini()
 134          {
 135   1      RST=0;
 136   1          delayms(60);
 137   1          RST=1;
 138   1          _nop_();
 139   1          PSB=1;
 140   1          
 141   1          write_op(0x30);
 142   1          write_op(0x01);
 143   1          write_op(0x06);
 144   1          write_op(0x0c);
 145   1      }
 146          
 147           void main()
 148          {
 149   1      unsigned char j;
 150   1      
 151   1      unsigned char  tab[10]={'0','1','2','3','4','5','6','7','8','9'};
 152   1      unsigned char  tab1[10]={0,1,2,3,4,5,6,7,8,9};
 153   1      lcd_ini();
 154   1      
 155   1      while(1)
 156   1      {
 157   2      ReadTemperature();
 158   2      
 159   2      write_op(line[0]);
 160   2      for(j=0;j<6;j++) 
 161   2      write_dat(dis_char[j]);
 162   2      
 163   2      for(j=0;j<10;j++)//显示整数部分
 164   2      if(th/10==tab1[j])
 165   2        {
 166   3         write_dat(tab[j]);
 167   3       }
 168   2      
 169   2      for(j=0;j<10;j++)
 170   2      if(th%10==tab1[j])
 171   2        {
 172   3         write_dat(tab[j]);
 173   3       }
 174   2      
 175   2         write_dat('.');
 176   2      
 177   2         for(j=0;j<10;j++)//显示小数部分
 178   2      if(tl/1000==tab1[j])
 179   2        {
C51 COMPILER V7.06   18B20                                                                 08/11/2007 19:23:02 PAGE 4   

 180   3         write_dat(tab[j]);
 181   3       }
 182   2      
 183   2       for(j=0;j<10;j++)
 184   2       if((tl/100)%10==tab1[j])
 185   2        {
 186   3         write_dat(tab[j]);
 187   3       }
 188   2      
 189   2       for(j=0;j<10;j++)
 190   2       if((tl/10)%10==tab1[j])
 191   2        {
 192   3         write_dat(tab[j]);
 193   3       }
 194   2      
 195   2       for(j=0;j<10;j++)
 196   2       if(tl%10==tab1[j])
 197   2        {
 198   3         write_dat(tab[j]);
 199   3       }
 200   2      
 201   2      write_dat('0');
 202   2      
 203   2      
 204   2      for(j=6;j<8;j++) 
 205   2      write_dat(dis_char[j]);
 206   2      
 207   2      }
 208   1      
 209   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    649    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13      23
   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 + -