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

📄 18b20_1602.lst

📁 这是用于1602初始化的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   18B20_1602                                                            06/16/2007 18:49:50 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 18B20_1602
OBJECT MODULE PLACED IN 18b20_1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20_1602.c BROWSE DEBUG OBJECTEXTEND

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          uchar LCD_Wait(void)
  46          {
  47   1       RS = 0;
  48   1       RW = 1;                           _nop_();
  49   1       EN = 1;                           _nop_();
  50   1       //while(DBport & 0x80); _nop_();
  51   1       EN = 0;                           _nop_();
  52   1      
  53   1       return DBport;
  54   1      }
  55          
C51 COMPILER V8.02   18B20_1602                                                            06/16/2007 18:49:50 PAGE 2   

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

 118          void LCD_Setfunction(unsigned char Display_function)
 119          {
 120   1       LCD_Write(LCD_COMMAND, Display_function);
 121   1      }    
 122          
 123          /**********************************************************
 124          
 125          做完上面的设置,现在可以初始化LCD了
 126          
 127          **********************************************************/
 128          #define LCD_SCREEN_CLEAR    0x01
 129          
 130          void Initial_LCD(void)
 131          {
 132   1        EN = 0;
 133   1      
 134   1        LCD_Setfunction(LCD_DISPLAY_FUNCTION);
 135   1        LCD_Setfunction(LCD_DISPLAY_FUNCTION);
 136   1        //这几句顺序很重要,我随便改变了一下,竟然就没有显示了
 137   1        LCD_SetDisplay(LCD_SHOW | LCD_NO_CURSOR);
 138   1        LCD_Write(LCD_COMMAND, LCD_SCREEN_CLEAR);
 139   1        LCD_Setinput(LCD_CURSOR_RIGHT);
 140   1         
 141   1      }
 142          
 143          
 144          /**********************************************************
 145          
 146          令字符左移
 147          
 148          *********************************************************
 149          #define  SCREEN_RIGHT_MOVE  0x18
 150          #define  SCREEN_LEFT_MOVE   0x1C
 151          void LCD_SCREEN_MOVE(uchar Move_Director)
 152          {
 153           LCD_Write(LCD_COMMAND, Move_Director);
 154          }*/
 155          
 156          
 157          /**********************************************************
 158          
 159          设定显示位置程序(即字符在什么位置显示出来)
 160          
 161          **********************************************************/
 162          void GotoXY(uchar x, uchar y)
 163          {
 164   1       if(y == 0)
 165   1        {LCD_Write(LCD_COMMAND, 0x80|x);}            //1602地址为第一行00H~0FH,第二行为40H~4FH,
 166   1       if(y == 1)                                                            //而且写入地址命令格式为1xxx xxxx,
 167   1        {LCD_Write(LCD_COMMAND, 0x80|(x-0x40));} //所以这里的0x80|(x-0x40)就是如此得出
 168   1      }
 169          
 170          
 171          /**********************************************************
 172          
 173          写字符程序
 174          
 175          **********************************************************/
 176          void Print(uchar *str, uchar j)
 177          {
 178   1       uchar i = 0;
 179   1       for(i=0; i<j; i++)
C51 COMPILER V8.02   18B20_1602                                                            06/16/2007 18:49:50 PAGE 4   

 180   1        {
 181   2          LCD_Write(LCD_DATA, *str);
 182   2              str++;
 183   2        }
 184   1      }
 185          
 186          
 187          /*us级延时,延时时间约4+2*i*/
 188          void Delayus(uchar i)
 189           {
 190   1        while(--i);
 191   1       }
 192          
 193          /*产生复位脉冲,等待应答信号*/
 194          bit Resetpaulse()
 195          {
 196   1      
 197   1       DO = 0; //拉低约600us
 198   1       Delayus(150);
 199   1       Delayus(150);
 200   1      
 201   1       DO = 1;//产生上升沿,延时约15~60us
 202   1       Delayus(30);
 203   1      
 204   1       return(~DO); //等待应答信号
 205   1      
 206   1      } 
 207          
 208          /*读取数据一位*/
 209          bit Readbit()
 210          {
 211   1       uint i = 0;
 212   1       bit b = 0;
 213   1      
 214   1       DO = 0; //产生读时隙  
 215   1       i++;    //维持低电平至少1us
 216   1      
 217   1       DO = 1; //1us以上后拉高
 218   1       Delayus(2); //延时8us,DO下降沿15内ds18b20输出的数据才有效
 219   1      

⌨️ 快捷键说明

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