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

📄 lcd_1602.lst

📁 DS18B20多点测温
💻 LST
字号:
C51 COMPILER V8.02   LCD_1602                                                              04/15/2009 18:08:20 PAGE 1   


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

line level    source

   1          #include<c8051f020.h>
   2          #define uint unsigned int
   3          #define uchar unsigned char
   4          
   5          /*sbit RS=P4^0;
   6          sbit RW=P4^1;
   7          sbit EN=P4^2;*/
   8          
   9          void write_comm(uchar);
  10          void write_data(uchar);
  11          void lcd_delay(uchar,uchar);
  12          void write_string(uchar,uchar,uchar*);
  13          
  14          void L1602_init()
  15          {
  16   1              lcd_delay(10,10);
  17   1              write_comm(0x38);               //显示模式控制:设置16*2显示,5*7点阵,8位数据口
  18   1              write_comm(0x08);               //关显示
  19   1              write_comm(0x01);               //清屏
  20   1              write_comm(0x06);               //输入模式控制:光标右移,整屏不移动
  21   1              write_comm(0x0f);               //开显示,显示光标,光标闪烁
  22   1                                                              //0x0e,开显示,显示下光标,光标不闪烁
  23   1              write_comm(0x80);
  24   1          write_comm(0x02);           //数据指针清零
  25   1      }
  26          
  27          void write_comm(uchar Commend_Code)
  28          {
  29   1              P4&=~0x01;
  30   1              P4&=~0x02;
  31   1              P5=Commend_Code;
  32   1              lcd_delay(10,10);
  33   1              P4|=0x04;
  34   1              lcd_delay(100,100);
  35   1              P4&=~0x04;
  36   1      }
  37          
  38          void write_data(uchar Data)
  39          {
  40   1              P4|=0x01;                                        //RS=1
  41   1              P4&=~0x02;                                       //RW=0
  42   1              P5=Data;
  43   1              lcd_delay(10,10);                               
  44   1              P4|=0x04;                                        //EN=1
  45   1              lcd_delay(100,100);
  46   1              P4&=~0x04;                                       //EN=0
  47   1      }
  48          
  49          void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
  50          {
  51   1      
  52   1          if (row==1) 
  53   1              column |= 0x40; //当要显示第二行时地址码+0x40;
  54   1              column |= 0x80; // 算出指令码
  55   1      
C51 COMPILER V8.02   LCD_1602                                                              04/15/2009 18:08:20 PAGE 2   

  56   1          write_comm(column); //这里不检测忙信号,发送地址码
  57   1              write_data(Data);
  58   1      }
  59          
  60          void write_string(uchar row,uchar column,uchar *dis_buffer)
  61          {
  62   1          switch(row)                                     //这种结构保持以后升级到多行显示液晶
  63   1            {
  64   2              case 0:write_comm(0x80+column);break;
  65   2              case 1:write_comm(0x80+0x40+column);break;//重新调整数据地址指针
  66   2              default:break;
  67   2            }
  68   1      
  69   1          while(*dis_buffer!='\0') // '\0'结束符
  70   1           {
  71   2                      write_data(*dis_buffer);
  72   2                              dis_buffer++;
  73   2                  column++;
  74   2                  if(column==16)
  75   2                  {               
  76   3                      column=0;
  77   3                      row++;
  78   3                      if(row>=3)
  79   3                          return;
  80   3                      else
  81   3                        switch(row)                                     //这种结构保持以后升级到多行显示液晶
  82   3                        {
  83   4                          case 0:write_comm(0x80);break;
  84   4                          case 1:write_comm(0x80+0x40);break;                  //重新调整数据地址指针
  85   4                          default:break;
  86   4                        }
  87   3                  }
  88   2              } 
  89   1      } 
  90          
  91          void Cursor_shift(uchar direct,uchar x)
  92          {
  93   1              uchar i;
  94   1              for(i=0;i<x;i++)
  95   1                      if(direct=='R')
  96   1                              write_comm(0x14);               //光标右移
  97   1                      else if(direct=='L')
  98   1                                      write_comm(0x10);       //光标左移
  99   1      }
 100          
 101          void Display_shift(uchar direct,uchar x)
 102          {
 103   1              uchar i;
 104   1                      for(i=0;i<x;i++)
 105   1                      if(direct=='R')
 106   1                              write_comm(0x1c);               //显示右移
 107   1                      else if(direct=='L')
 108   1                                      write_comm(0x18);       //显示左移
 109   1      }
 110          
 111                    
 112          void lcd_delay(uchar t1,uchar t2)
 113          {
 114   1              uchar i,j;
 115   1              for(i=0;i<t1;i++)
 116   1                      for(j=0;j<t2;j++);
 117   1      }
C51 COMPILER V8.02   LCD_1602                                                              04/15/2009 18:08:20 PAGE 3   

 118          
 119          
 120          //==================================================
 121          // 以下为几种清屏命令
 122          //==================================================
 123          
 124          void Clear_All()
 125          {
 126   1         write_comm(0x01);                                                    //显示清屏。
 127   1         write_comm(0x80);                                                    //将数据指针
 128   1      }                                                                                               //设置到第一行的第一个字符
 129          
 130          void Clear_Line(uchar line)
 131          {
 132   1          write_string(line,0,"                ");
 133   1          switch(line)                                                                //这种结构保持以后升级到多行显示液晶
 134   1              {
 135   2                 case 1:write_comm(0x80);break;       //将数据地址指针定位到第一行
 136   2                 case 2:write_comm(0x80+0x40);break;  //将数据地址指针定位到第二行
 137   2                 default: break;
 138   2              }   
 139   1      }


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