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

📄 18b20_1602.lst

📁 基于c51单片机的18b20实时温度检测
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.12   18B20_1602                                                            07/30/2008 10:40:15 PAGE 1   


C51 COMPILER V8.12, COMPILATION OF MODULE 18B20_1602
OBJECT MODULE PLACED IN .\18b20_1602.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\Documents and Settings\l\桌面\18b20b\ds18b20_1602\18b20_1602.c BROWSE DE
                    -BUG OBJECTEXTEND PRINT(.\18b20_1602.lst) OBJECT(.\18b20_1602.obj)

line level    source

   1          #include <at89x52.h>
   2          #include <absacc.h>
   3          #include <intrins.h>
   4          #include <math.h>
   5          #include <stdio.h>
   6          
   7          #define  uchar  unsigned char 
   8          #define  uint   unsigned int 
   9          
  10          #define  LCD_COMMAND  0  //1602写命令或数据参数
  11          #define  LCD_DATA     1
  12          
  13          #define  RS  P2_0       //1602控制端口
  14          #define  RW  P2_1
  15          #define  EN  P2_2 
  16          
  17          #define DBport  P0 //1602数据命令口
  18          
  19          #define DO   P1_0  //18b20总线接口
  20          
  21          
  22          uchar temp_l = 0;  //温度值存储低位字节
  23          uchar temp_h = 0;  //温度值存储高位字节
  24          
  25          uchar tempsign = 0;  //温度值符号位
  26          uchar temp_integer[4]; //温度整数存储数组
  27          uchar temp_dicimal[5]; //温度小数存储数组
  28          
  29          /*延时以ms为单位的t时间*/
  30          void Delay(uint t)
  31          {
  32   1        uint i;
  33   1        while(t--)
  34   1         {
  35   2          for(i=0; i<125; i++)
  36   2               { }
  37   2         }
  38   1      }
  39          
  40          /**********************************************************
  41          
  42          等待程序
  43          
  44          **********************************************************/
  45          bit LCD_busy(void)
  46          {
  47   1       bit result;
  48   1       RS = 0;
  49   1       RW = 1;                           
  50   1       EN = 1;                           
  51   1       _nop_();
  52   1       _nop_();
  53   1       _nop_();
  54   1       _nop_();
C51 COMPILER V8.12   18B20_1602                                                            07/30/2008 10:40:15 PAGE 2   

  55   1       result=(bit)(DBport&0x80);
  56   1       EN = 0;                           
  57   1      
  58   1       return result;
  59   1      }
  60          
  61          /**********************************************************
  62          
  63          写指令/数据
  64          
  65          **********************************************************/
  66          LCD_Write(bit style, uchar input)
  67          {
  68   1       while(LCD_busy());
  69   1       RW = 0;
  70   1       RS = style;
  71   1       EN = 0;
  72   1       _nop_();
  73   1       _nop_();
  74   1       DBport = input;
  75   1       _nop_();
  76   1       _nop_();
  77   1       _nop_();
  78   1       _nop_();
  79   1       EN = 1;
  80   1       _nop_();
  81   1       _nop_();
  82   1       _nop_();
  83   1       _nop_();               
  84   1       EN = 0;                 
  85   1      }
  86          
  87          
  88          /**********************************************************
  89          
  90          设置屏幕初始模式
  91          
  92          **********************************************************/
  93          #define LCD_SHOW                        0x0C    //显示开
  94          #define LCD_HIDE                        0x08    //显示关          
  95          
  96          #define LCD_CURSOR                      0x0A    //显示光标
  97          #define LCD_NO_CURSOR           0x08    //无光标                     
  98          
  99          #define LCD_FLASH                       0x09    //光标闪动
 100          #define LCD_NO_FLASH            0x08    //光标不闪动
 101          
 102          void LCD_SetDisplay(unsigned char DisplayMode)
 103          {
 104   1        LCD_Write(LCD_COMMAND, DisplayMode);  
 105   1      }
 106          
 107          
 108          /**********************************************************
 109          
 110          设置写完1byte数据后显示模式(输入每个字符后屏幕变化)
 111          
 112          **********************************************************/
 113          #define LCD_CURSOR_LEFT     0x04    //每写完一个字节光标左移,且AC减1
 114          #define LCD_CURSOR_RIGHT    0x06        //每写完一个字节光标右移,且AC加1
 115          
 116          #define LCD_CHAR_RIGHT      0x05   //每写完一个字节字符右移
C51 COMPILER V8.12   18B20_1602                                                            07/30/2008 10:40:15 PAGE 3   

 117          #define LCD_CHAR_LEFT       0x07   //每写完一个字节字符左移
 118          
 119          void LCD_Setinput(unsigned char InputMode)
 120          {
 121   1       LCD_Write(LCD_COMMAND, InputMode);
 122   1      }
 123          
 124          
 125          /**********************************************************
 126          
 127          设定显示功能
 128          
 129          **********************************************************/
 130          #define  LCD_DISPLAY_FUNCTION   0x38  //8位两行显示,5×7字型
 131          
 132          void LCD_Setfunction(unsigned char Display_function)
 133          {
 134   1       LCD_Write(LCD_COMMAND, Display_function);
 135   1      }    
 136          
 137          /**********************************************************
 138          
 139          做完上面的设置,现在可以初始化LCD了
 140          
 141          **********************************************************/
 142          #define LCD_SCREEN_CLEAR    0x01
 143          
 144          void Initial_LCD(void)
 145          {
 146   1        EN = 0;
 147   1      
 148   1        LCD_Setfunction(LCD_DISPLAY_FUNCTION);
 149   1        LCD_Setfunction(LCD_DISPLAY_FUNCTION);
 150   1        //这几句顺序很重要,我随便改变了一下,竟然就没有显示了
 151   1        LCD_SetDisplay(LCD_SHOW | LCD_NO_CURSOR);
 152   1        LCD_Write(LCD_COMMAND, LCD_SCREEN_CLEAR);
 153   1        LCD_Setinput(LCD_CURSOR_RIGHT);
 154   1         
 155   1      }
 156          
 157          
 158          /**********************************************************
 159          
 160          令字符左移
 161          
 162          *********************************************************
 163          #define  SCREEN_RIGHT_MOVE  0x18
 164          #define  SCREEN_LEFT_MOVE   0x1C
 165          void LCD_SCREEN_MOVE(uchar Move_Director)
 166          {
 167           LCD_Write(LCD_COMMAND, Move_Director);
 168          }*/
 169          
 170          
 171          /**********************************************************
 172          
 173          设定显示位置程序(即字符在什么位置显示出来)
 174          
 175          **********************************************************/
 176          void GotoXY(uchar x, uchar y)
 177          {
 178   1       if(y == 0)
C51 COMPILER V8.12   18B20_1602                                                            07/30/2008 10:40:15 PAGE 4   

 179   1        {LCD_Write(LCD_COMMAND, 0x80|x);}            //1602地址为第一行00H~0FH,第二行为40H~4FH,
 180   1       if(y == 1)                                                            //而且写入地址命令格式为1xxx xxxx,
 181   1        {LCD_Write(LCD_COMMAND, 0x80|(x-0x40));} //所以这里的0x80|(x-0x40)就是如此得出
 182   1      }
 183          
 184          
 185          /**********************************************************
 186          
 187          写字符程序
 188          
 189          **********************************************************/
 190          void Print(uchar *str, uchar j)
 191          {
 192   1       uchar i = 0;
 193   1       for(i=0; i<j; i++)
 194   1        {
 195   2          LCD_Write(LCD_DATA, *str);
 196   2              str++;
 197   2        }
 198   1      }
 199          
 200          
 201          /*us级延时,延时时间约4+2*i*/
 202          void Delayus(uchar i)
 203           {
 204   1        while(--i);
 205   1       }
 206          
 207          /*产生复位脉冲,等待应答信号*/
 208          bit Resetpaulse()
 209          {
 210   1      
 211   1       DO = 0; //拉低约600us
 212   1       Delayus(150);
 213   1       Delayus(150);
 214   1      
 215   1       DO = 1;//产生上升沿,延时约15~60us
 216   1       Delayus(30);
 217   1      
 218   1       return(~DO); //等待应答信号
 219   1      
 220   1      } 
 221          
 222          /*读取数据一位*/
 223          bit Readbit()
 224          {
 225   1       uint i = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -