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

📄 18b20.lst

📁 18B2在液晶1602中的显示程序
💻 LST
字号:
C51 COMPILER V7.02b   18B20                                                                03/22/2009 16:16:18 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18B20.OBJ
COMPILER INVOKED BY: D:\Keil uVision 2\C51\BIN\C51.EXE 18B20.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #define uint unsigned int
   3          #define uchar unsigned char
   4                          
   5          sbit LCD_EN=P3^4;
   6          sbit LCD_RS=P3^5;
   7          bit flag;
   8          sbit DQ=P2^2;
   9          uchar tab[]={"   wendu        "};
  10          
  11          void delayms(uint z)
  12          {
  13   1              uint x,y;
  14   1              for(x=0;x<=110;x++)
  15   1              for(y=0;y<=z;y++);
  16   1      }
  17          delayus(uint z)
  18          {while(z--){}}
  19          /***************温度18B20***********************************/
  20          //功能:读18B20读一个字节
  21          uchar b20_read_byte(void)
  22          {
  23   1              uchar i=0;
  24   1              uchar dat = 0;
  25   1              for(i=8;i>0;i--)
  26   1              {       DQ = 0; // 给脉冲信号
  27   2                      dat>>=1;
  28   2                      DQ = 1; // 给脉冲信号
  29   2                      if(DQ)
  30   2                      dat|=0x80;
  31   2                      delayus(4);
  32   2              }
  33   1              return(dat);
  34   1      }
  35          
  36          //功能:写18B20一个字节
  37          void b20_write_byte(uchar dat)
  38          { uchar i=0;
  39   1              for(i=8; i>0; i--)
  40   1              {       DQ = 0;
  41   2                      DQ = dat&0x01;
  42   2                      delayus(4);
  43   2                      DQ = 1;
  44   2                      dat>>=1;
  45   2              }
  46   1      }
  47          
  48          //功能:初始化18B20
  49           void b20_init(void)
  50           {      uchar x=0;
  51   1              DQ = 1;    //DQ复位
  52   1              delayus(8);  //稍做延时
  53   1              DQ = 0;    //单片机将DQ拉低
  54   1              delayus(80); //精确延时 大于 480us
  55   1              DQ = 1;    //拉高总线
C51 COMPILER V7.02b   18B20                                                                03/22/2009 16:16:18 PAGE 2   

  56   1              delayus(14);
  57   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  58   1              delayus(20);
  59   1      }
  60          //功能:读取18B20的温度值
  61          uint b20_read(void)
  62          {
  63   1              uchar a=0;
  64   1              uchar b=0;
  65   1              uint t=0;
  66   1              uint t1=0;
  67   1              float tt=0;
  68   1              b20_init();
  69   1              b20_write_byte(0xcc); // 跳过读序号列号的操作
  70   1              b20_write_byte(0x44); // 启动温度转换
  71   1              b20_init();
  72   1              b20_write_byte(0xcc); //跳过读序号列号的操作
  73   1              b20_write_byte(0xbe); //读取温度寄存器
  74   1              a=b20_read_byte();    //读低8位
  75   1              b=b20_read_byte();    //读高8位
  76   1              t=b;
  77   1              if((t&0xf8)==0xf8)
  78   1              {       
  79   2                      flag=1;
  80   2                      b=~b;
  81   2                      a=~a+1;
  82   2              }
  83   1              else 
  84   1                      flag=0;
  85   1              b=(b&0x07)<<4;
  86   1              a=(a&0xf0)>>4;
  87   1              b=b|a;
  88   1              return(b);
  89   1      }
  90          
  91          /***************液晶1062**************************************/
  92          void LCD_write_com(uchar com)
  93          {
  94   1      P0=com;         //写入命令   
  95   1      LCD_RS=0;
  96   1      delayms(5);
  97   1      LCD_EN=1;
  98   1      delayms(5);
  99   1      LCD_EN=0;
 100   1      }
 101          void LCD_write_data(uchar date)
 102          {
 103   1      P0=date;        //写入数据
 104   1      LCD_RS=1;
 105   1      delayms(5);
 106   1      LCD_EN=1;
 107   1      delayms(5);
 108   1      LCD_EN=0;
 109   1      }
 110          void LCD_init()
 111          {
 112   1              uchar i;
 113   1              LCD_write_com(0x38);//显示16*2接口
 114   1              LCD_write_com(0x01);//清屏
 115   1              LCD_write_com(0x0c);//00001DCB,D开显示C显示光标B光标闪烁
 116   1              LCD_write_com(0x06);//000001NS,N1指针、光标加一,N0指针、光标减一。S1整屏左移N1/右移N0,S0整屏不移动
 117   1              LCD_write_com(0x80);
C51 COMPILER V7.02b   18B20                                                                03/22/2009 16:16:18 PAGE 3   

 118   1              for(i=0;i<16;i++)
 119   1              {
 120   2                      LCD_write_data(tab[i]);
 121   2                      delayms(5);
 122   2              }
 123   1      }
 124          void LCD_sfm(uchar date)
 125          {       
 126   1              uchar shi,ge,i=4;
 127   1              shi=date/10;
 128   1              ge=date%10;
 129   1              LCD_write_com(0x80+12);
 130   1              if(flag==1)
 131   1              LCD_write_data(0x20+13);
 132   1              else
 133   1              LCD_write_data(0x20+11);
 134   1      
 135   1              LCD_write_data(0x30+shi);
 136   1              LCD_write_data(0x30+ge);
 137   1      
 138   1      }
 139          
 140          /********************主函数********************************************************/
 141          main()
 142          {       
 143   1              uint a;
 144   1              b20_init();             
 145   1              LCD_init();     
 146   1              while(1)
 147   1              {       
 148   2                      a=b20_read();
 149   2                      LCD_sfm(a);
 150   2              }
 151   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    368    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17       8
   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 + -