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

📄 lcd18b20test.lst

📁 AT89S52的万年历程序源码
💻 LST
字号:
C51 COMPILER V7.06   LCD18B20TEST                                                          04/20/2009 01:51:16 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCD18B20TEST
OBJECT MODULE PLACED IN LCD18B20test.OBJ
COMPILER INVOKED BY: D:\mcu\C51\BIN\C51.EXE LCD18B20test.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <at89x51.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          unsigned char i;
   7          sbit DQ=P3^0;//ds18b20与单片机连接口
   8          uchar disdata[5];
   9          idata uint tvalue;//温度值
  10          idata uchar tflag;//温度正负标志    
  11          
  12          sbit rs=P3^2;
  13          sbit rw=P3^3;
  14          sbit en=P3^4;
  15          sbit key_left=P1^0;
  16          sbit key_right=P1^1;
  17          
  18          
  19          uchar code opens[]="MACROSS";
  20          uchar code opens1[]="FRONTIER";
  21          uchar code hanzi[3][8]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00,
  22                                                     0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,
  23                                                     0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};
  24          void open();
  25          void ini(); 
  26          void write_order(uchar order);
  27          void write_date(uchar date);
  28          void delay(uchar z);
  29          void writeCG();
  30          /******************************ds1820程序***************************************/
  31          
  32          void ini()
  33          {
  34   1              rw=0;
  35   1              en=0;
  36   1              P1=0xff;
  37   1              writeCG();
  38   1              write_order(0x38);
  39   1              write_order(0x0c);
  40   1              write_order(0x06);
  41   1              write_order(0x01);
  42   1              
  43   1      
  44   1      }
  45          void write_order(uchar order)
  46          {
  47   1              rs=0;
  48   1              P2=order;
  49   1              delay(4);
  50   1              en=1;
  51   1              delay(4);
  52   1              en=0;
  53   1      }
  54          void write_date(uchar date)
  55          {       
C51 COMPILER V7.06   LCD18B20TEST                                                          04/20/2009 01:51:16 PAGE 2   

  56   1              rs=1;
  57   1              P2=date;
  58   1              delay(4);
  59   1              en=1;
  60   1              delay(4);
  61   1              en=0;
  62   1      }
  63          void delay(uchar z)
  64          {
  65   1              uchar x,y;
  66   1              for(x=z;x>0;x--)
  67   1                      for(y=110;y>0;y--);
  68   1      }
  69          void writeCG()
  70          {
  71   1              uchar x,y;
  72   1              write_order(0x40);
  73   1              for(y=0;y<3;y++)
  74   1              {
  75   2                      for(x=0;x<8;x++)
  76   2                      {
  77   3                              write_date(hanzi[y][x]);
  78   3                      }
  79   2              }
  80   1              
  81   1      }
  82          void open()
  83          {
  84   1              uchar num;
  85   1              write_order(0x80+0x10);
  86   1              for(num=0;opens[num]!='\0';num++)
  87   1              {
  88   2                      write_date(opens[num]);
  89   2                      delay(20);
  90   2              }
  91   1      
  92   1              
  93   1                              for(num=0;num<16;num++)
  94   1              {
  95   2                      write_order(0x1c);
  96   2                      delay(200);
  97   2              }
  98   1                              for(num=0;num<5;num++)
  99   1              {
 100   2                      write_order(0x18);
 101   2                      delay(200);
 102   2              }
 103   1                              for(num=0;num<4;num++)
 104   1              {
 105   2                      write_order(0x1c);
 106   2                      delay(200);
 107   2              }
 108   1                              for(num=0;num<3;num++)
 109   1              {
 110   2                      write_order(0x18);
 111   2                      delay(200);
 112   2              }
 113   1                              for(num=0;num<2;num++)
 114   1              {
 115   2                      write_order(0x1c);
 116   2                      delay(200);
 117   2              }
C51 COMPILER V7.06   LCD18B20TEST                                                          04/20/2009 01:51:16 PAGE 3   

 118   1                              for(num=0;num<1;num++)
 119   1              {
 120   2                      write_order(0x18);
 121   2                      delay(100);
 122   2              }
 123   1              write_order(0x80+0x53);
 124   1              for(num=0;opens1[num]!='\0';num++)
 125   1              {
 126   2                      write_date(opens1[num]);
 127   2                      delay(500);
 128   2              }
 129   1      }
 130          
 131          
 132          void delay_18B20(unsigned int t)//延时1微秒
 133          {
 134   1         while(t--);
 135   1      }
 136          
 137          void ds1820rst()/*ds1820复位*/
 138          { 
 139   1          unsigned char x=0;
 140   1          DQ = 1;          //DQ复位
 141   1          delay_18B20(4); //延时
 142   1          DQ = 0;          //DQ拉低
 143   1          delay_18B20(100); //精确延时大于480us
 144   1          DQ = 1;          //拉高
 145   1          delay_18B20(40); 
 146   1      } 
 147          
 148          uchar ds1820rd()/*读数据*///读时间隙
 149          {
 150   1          unsigned char j=0;
 151   1          unsigned char dat = 0;
 152   1          for (j=8;j>0;j--)
 153   1          {   
 154   2                  DQ = 0; //给脉冲信号
 155   2              dat>>=1;
 156   2              DQ = 1; //给脉冲信号
 157   2              if(DQ)
 158   2              dat|=0x80;
 159   2              delay_18B20(10);
 160   2          }
 161   1          return(dat);
 162   1      }
 163          
 164          void ds1820wr(uchar wdata)/*写数据*/
 165          {
 166   1          unsigned char j=0;
 167   1          for (j=8; i>0; j--)
 168   1          {
 169   2              DQ = 0;
 170   2              DQ = wdata&0x01;
 171   2              delay_18B20(10);
 172   2              DQ = 1;
 173   2              wdata>>=1;
 174   2          }
 175   1      }
 176          
 177          read_temp()/*读取温度值并转换*/
 178          {
 179   1          uchar a,b;
C51 COMPILER V7.06   LCD18B20TEST                                                          04/20/2009 01:51:16 PAGE 4   

 180   1          ds1820rst();    
 181   1          ds1820wr(0xcc);//*跳过读序列号*/
 182   1          ds1820wr(0x44);//*启动温度转换*/
 183   1          ds1820rst();    
 184   1          ds1820wr(0xcc);//*跳过读序列号*/  
 185   1          ds1820wr(0xbe);//*读取温度*/  
 186   1          a=ds1820rd();
 187   1          b=ds1820rd();
 188   1          tvalue=b;
 189   1          tvalue<<=8;
 190   1          tvalue=tvalue|a;
 191   1          if(tvalue<0x0fff)
 192   1              tflag=0;
 193   1          else
 194   1          {
 195   2                  tvalue=~tvalue+1;
 196   2              tflag=1;
 197   2          }
 198   1          tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 199   1          return(tvalue);
 200   1      }
 201          /*******************************************************************/
 202          void ds1820disp()//温度值显示
 203          { 
 204   1          uchar flagdat;
 205   1          disdata[0]=tvalue/1000+0x30;//百位数
 206   1          disdata[1]=tvalue%1000/100+0x30;//十位数
 207   1          disdata[2]=tvalue%100/10+0x30;//个位数
 208   1          disdata[3]=tvalue%10+0x30;//小数位
 209   1          
 210   1          if(tflag==0)
 211   1              flagdat=0x20;//正温度不显示符号
 212   1          else
 213   1             flagdat=0x2d;//负温度显示负号:-
 214   1          if(disdata[0]==0x30)
 215   1          {
 216   2                  disdata[0]=0x20;//如果百位为0,不显示     
 217   2              if(disdata[1]==0x30)
 218   2              {
 219   3                      disdata[1]=0x20;//如果百位为0,十位为0也不显示
 220   3              }
 221   2          }
 222   1          write_order(0xc0);
 223   1          write_date(flagdat);//显示符号位
 224   1          write_order(0xc1);
 225   1          write_date(disdata[0]);//显示百位
 226   1          write_order(0xc2);
 227   1          write_date(disdata[1]);//显示十位 
 228   1          write_order(0xc3);
 229   1          write_date(disdata[2]);//显示个位 
 230   1          write_order(0xc4);
 231   1          write_date(0x2e);//显示小数点    
 232   1          write_order(0xc5);
 233   1          write_date(disdata[3]);//显示小数位  
 234   1         }
 235          /********************主程序***********************************/
 236          void main()
 237          { 
 238   1      
 239   1          while(1) 
 240   1          {
 241   2                  read_temp();//读取温度   
C51 COMPILER V7.06   LCD18B20TEST                                                          04/20/2009 01:51:16 PAGE 5   

 242   2              ds1820disp();//显示    
 243   2          }
 244   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    773    ----
   CONSTANT SIZE    =     41    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       5
   IDATA SIZE       =      3    ----
   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 + -