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

📄 复 lcd_18b20.lst

📁 LCD_18B20温度采集控制显示 电路搭建: CSPIN = P2^7 CLKPIN = P2^6 DIPIN = P2^5 DQ= P3^4 晶振:11.0592M 实现功能:通过AT8
💻 LST
字号:
C51 COMPILER V7.06   ___LCD_18B20                                                          12/17/2006 14:08:51 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE ___LCD_18B20
OBJECT MODULE PLACED IN ..\复 LCD_18B20.obj
COMPILER INVOKED BY: C:\Program Files\keilc\C51\BIN\C51.EXE 复 LCD_18B20.C BROWSE DEBUG OBJECTEXTEND OBJECT(..\复 LCD_18
                    -B20.obj)

stmt level    source

   1          /*LCD_18B20温度采集
   2          电路搭建: CSPIN = P2^7; CLKPIN = P2^6; DIPIN = P2^5;
   3          DQ= P3^4;       晶振:11.0592M
   4          实现功能:通过AT89S51(STC89C51)采集控制DS18B20,在小太阳人LCD上显示
   5          设计者:陈仲库
   6          设计日期:2006年12月12日
   7          */
   8          
   9          #include<reg51.h>
  10          #include<intrins.h>
  11          #define time_1 300
  12          sbit  CSPIN = P2^7;                //用户自定义CS对应引脚
  13          sbit  CLKPIN = P2^6;               //用户自定义CLK对应引脚
  14          sbit  DIPIN = P2^5;                //用户自定义DI对应引脚
  15          sbit  DQ= P3^4;                                    //用户自定义18B20对应引脚
  16          unsigned char data l_data[7];      //用户自定义LCD缓冲区 其中前四个为数字
  17          unsigned char code ch_data[]={0xEB, 0x60,0xC7,0xE5,0x6C,0xAD,0xAF,0xE0,0xEF,0xED};//定义0~9十个数字 小数点
             -并上0x10
  18          
  19          void LCD_WriteBit(bit n)
  20          {  DIPIN = n;
  21   1         _nop_();
  22   1         _nop_();
  23   1         CLKPIN = 1;
  24   1         _nop_();
  25   1         _nop_();
  26   1         CLKPIN = 0;
  27   1         _nop_();
  28   1         _nop_();
  29   1         CLKPIN = 1;
  30   1      }
  31          
  32          void LCD_WriteCommand(unsigned char cmdcode)  //送控制字
  33          {  unsigned char i;
  34   1         CSPIN=1;
  35   1         CSPIN=0;
  36   1         LCD_WriteBit(1);
  37   1         LCD_WriteBit(0);
  38   1         LCD_WriteBit(0);
  39   1         for (i=0;i<8;i++)
  40   1         {  if((cmdcode&0x80)==0x80)
  41   2               LCD_WriteBit(1);
  42   2            else
  43   2               LCD_WriteBit(0);
  44   2            cmdcode<<=1;
  45   2         }
  46   1         LCD_WriteBit(0);
  47   1         DIPIN=1;
  48   1         CSPIN=1;
  49   1      }
  50          
  51          void LCD_Reset()                    //初始化
  52          {  LCD_WriteCommand(0x00);                    //掉电
  53   1         LCD_WriteCommand(0x02);                   //关闭
C51 COMPILER V7.06   ___LCD_18B20                                                          12/17/2006 14:08:51 PAGE 2   

  54   1         LCD_WriteCommand(0x01);                   //上电
  55   1         LCD_WriteCommand(0x03);                   //显示
  56   1         LCD_WriteCommand(0x29);                   //模式设置
  57   1      }
  58          
  59          void lcdwd(unsigned char address,unsigned char data1)  //送6位地址+8位数据
  60          {  unsigned char i;
  61   1         CSPIN = 1;
  62   1         CSPIN = 0;
  63   1         LCD_WriteBit(1);
  64   1         LCD_WriteBit(0);
  65   1         LCD_WriteBit(1);
  66   1         address<<=2;
  67   1         for (i=0;i<6;i++)
  68   1         {  if((address&0x80)==0x80)
  69   2               LCD_WriteBit(1);
  70   2            else
  71   2               LCD_WriteBit(0);
  72   2            address<<=1;
  73   2         }
  74   1         for (i=0;i<8;i++)
  75   1         {  if((data1&0x01)==0x01)
  76   2               LCD_WriteBit(1);
  77   2            else
  78   2               LCD_WriteBit(0);
  79   2            data1>>=1;
  80   2         }
  81   1         DIPIN=1;
  82   1         CSPIN=1;
  83   1      }
  84          
  85          void LCD_WriteWord()                      //送数(从第一个地址起)
  86          {  unsigned char j;
  87   1         for(j=0;j<7;j++)     lcdwd(j+j,l_data[j]);
  88   1      }
  89          
  90          ///////延时子程序////////
  91          void Delay(int us)   {  int s;   for ( s=0; s<us; s++);}
  92          
  93          ///////DS18B20初始化子程序////////
  94          void DS18B20_rst(void)           
  95          {
  96   1       DQ = 1;   
  97   1       Delay(2);  
  98   1       DQ = 0;    
  99   1       Delay(30); //精确延时  480~960us
 100   1       DQ = 1;    
 101   1       Delay(8); 
 102   1      }
 103          
 104          unsigned int DS18B20_Read(void)              
 105          { 
 106   1      int i=0;
 107   1      unsigned int u=0;
 108   1       for (i=0;i<16;i++)
 109   1      {                                                                      
 110   2        DQ=0;
 111   2        u>>=1;
 112   2        DQ=1;
 113   2        if(DQ) u|=0x8000;
 114   2        Delay(4);
 115   2      }
C51 COMPILER V7.06   ___LCD_18B20                                                          12/17/2006 14:08:51 PAGE 3   

 116   1       return (u);
 117   1      }
 118          
 119          void DS18B20_Write(unsigned char ku)          
 120          {  
 121   1      int i=0;
 122   1         for (i=0;i<8;i++)
 123   1      { 
 124   2        DQ=0;
 125   2        DQ =ku&0x01;
 126   2        Delay(3);
 127   2        DQ=1;
 128   2        ku>>=1;
 129   2      }
 130   1      } 
 131          //采集处理显示程序
 132          void Display(void)                 
 133           {   
 134   1      int t1,t2, t0;
 135   1      unsigned int tp;
 136   1      unsigned int lsb;
 137   1         DS18B20_rst();
 138   1         DS18B20_Write(0xCC);
 139   1         DS18B20_Write(0x44);
 140   1         DS18B20_rst();
 141   1         DS18B20_Write(0xCC);
 142   1         DS18B20_Write(0xBE);
 143   1         tp=DS18B20_Read();      //取得DS18B20读的温度值
 144   1      
 145   1         LCD_Reset();                  //初始化
 146   1         Delay(1000);
 147   1         lsb=(unsigned int)(tp*6.25); //18B20采集到结果
 148   1         t0=lsb/1000;
 149   1         if(t0)                                               //液晶显示最高位
 150   1                      l_data[0]=ch_data[t0];
 151   1              else
 152   1                  l_data[0]=0x00;
 153   1         t2= lsb%1000;
 154   1         l_data[1]=ch_data[t2/100]|0x10;//第0位写0  小数点|0x10 
 155   1         t1=t2%100;
 156   1         l_data[2]=ch_data[t1/10];
 157   1         //l_data[3]=ch_data[t1%10];  第四位
 158   1         l_data[3]=0xcc;//显示0的上半部 好像度一样
 159   1         LCD_WriteWord();                       
 160   1      //   Delay(time_1);
 161   1      }
 162             
 163          void  main(void)  
 164          {
 165   1        l_data[4]=0x20;//显示度的符号              
 166   1        while(1) 
 167   1      {
 168   2                                 
 169   2        Display();
 170   2      }
 171   1      }//温度18b20
 172          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    504    ----
   CONSTANT SIZE    =     10    ----
C51 COMPILER V7.06   ___LCD_18B20                                                          12/17/2006 14:08:51 PAGE 4   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   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 + -