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

📄 lcd1602.lst

📁 音乐盒程序:基于AT89S52的数字音乐盒程序
💻 LST
字号:
C51 COMPILER V8.02   LCD1602                                                               04/25/2009 20:54:56 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: D:\keilc51\C51\BIN\C51.EXE LCD1602.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<c8051f020.h>
   2          #define uchar unsigned char
   3          #define uint  unsigned int
   4          
   5          //***************程序说明*******************
   6          // 对字符型液晶显示器定义三根地址线:
   7          // sbit RS=P4^0;sbit RW=P4^1;sbit EN=P4^2;               
   8          // 由于P4口在f020单片机上不可位寻址,故以下
   9          // 程序均采用对P4口赋值的形式给三根控制位赋值
  10          //*******************************************
  11          
  12          //*******************************************
  13          // 该部分主要是对要用到的函数进行申明
  14          // 后面将具体的对相关函数进行定义,可选择性的选
  15          // 择相关函数
  16          //*******************************************
  17          void Lcd1602_Initial( );
  18          void Lcd1602_Write_Command(uchar Command_Code);
  19          void Lcd1602_Write_Data(uchar row,uchar column,uchar Data);
  20          void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer);
  21          //void Lcd1602_Clear_Char(uchar row,uchar column);
  22          //void Lcd1602_Clear_Line(uchar line); //前两个函数没用
  23          //void Lcd1602_Clear_All( );   //这个函数只在AD9851中用
  24          
  25          void Lcd_delay(uint t1,t2);
  26          //void Lcd_delay(uint t1,uint t2); 可以写成上面这种方式
  27          
  28          //**********************************************
  29          // 功能说明:对字符型液晶显示器LCD1602进行初始化
  30          // 输入变量:无 ; 全局变量:无
  31          // 返回值: 无
  32          // 调用函数:Lcd1602_Write_Command()
  33          //**********************************************
  34          void Lcd1602_Initial( )
  35          {  
  36   1          Lcd1602_Write_Command(0x38);//显示模式设置:0011(数据位8位),1(双行显示)0(5*7点阵)**
  37   1          Lcd1602_Write_Command(0x0c);//显示开关设置:0000,11(开显示),1(开光标),1(字符闪烁)
  38   1          Lcd1602_Write_Command(0x01);//清屏显示设置:显示清屏。
  39   1          Lcd1602_Write_Command(0x06);//输入方式设置:0000,011(光标自左向右移)0(整屏不移动)。
  40   1              Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
  41   1          Lcd1602_Write_Command(0x02);//光标复位命令:数据指针清零
  42   1          Lcd1602_Write_Command(0x0c);//开显示,显示光标,光标闪烁
  43   1          Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
  44   1      } 
  45          
  46          //**************************************************
  47          // 功能说明:对字符型液晶显示器LCD1602写入控制字
  48          // 输入变量:uchar Command_Code ;全局变量:无
  49          // 返回值 :无
  50          // 调用函数 :无 
  51          //************************************************** 
  52          void Lcd1602_Write_Command(uchar Command_Code)
  53          {
  54   1          P4=0x00;                             //RS=0;RW=0;EN=0;开始写入指令
  55   1          P5=Command_Code;             //将待写入指令赋给P5口
C51 COMPILER V8.02   LCD1602                                                               04/25/2009 20:54:56 PAGE 2   

  56   1          Lcd_delay(10,1);
  57   1          P4=0x04;                 //NE=1;开启使能      
  58   1          Lcd_delay(10,10);
  59   1          P4=0x00;                 //EN=0;当EN由高向底转变时,LCD接收数据或指令       
  60   1      }
  61          
  62          //**************************************************
  63          // 功能说明:对字符型液晶显示器LCD1602写入数据
  64          // 输入变量:uchar row,uchar column,uchar Data 
  65          // 其中   row的取值范围为:1-- 2
  66          //     column的取值范围为:0--15
  67          // 全局变量 :无   ;返回值 : 无
  68          // 调用函数 :Lcd1602_Write_Command()
  69          //**************************************************
  70          void Lcd1602_Write_Data(uchar row,uchar column,uchar Data)
  71          {
  72   1          if (row==2) 
  73   1              column |= 0x40;            //当要显示第二行时,相应的地址码为当前列数+0x40;
  74   1              column |= 0x80;            //算出指令码即让DDRAM指针指向相应的位置
  75   1      
  76   1          Lcd1602_Write_Command(column); //这里不检测忙信号,发送地址码
  77   1      
  78   1          P4=0x01;                                       //RS=1;RW=0;EN=0;开始写入数据
  79   1          P5=Data;                                       
  80   1          Lcd_delay(10,10);
  81   1          P4=0x05;                       //EN=1
  82   1          Lcd_delay(10,10);
  83   1          P4=0x01;                       //EN=0
  84   1      }
  85          
  86          //***********************************************************
  87          // 功能说明:写字符串到LCD,如果一行写不下,则写到下一行
  88          //           如果一屏写不下,则只写一屏;
  89          // 输入变量:uchar row,uchar column,uchar *dis_buffer
  90          // 全局变量 :无  ;返回值 : 无
  91          // 调用函数 :Lcd1602_Write_Data();
  92          //            Lcd1602_Write_Command     ;
  93          //***********************************************************
  94          void Lcd1602_Write_String(uchar row,uchar column,uchar *dis_buffer)
  95          {
  96   1              uchar i=0;
  97   1          while(dis_buffer[i]!='\0')
  98   1              {
  99   2                  Lcd1602_Write_Data(row,column,dis_buffer[i]);
 100   2                  i++;column++;
 101   2                  if(column==40)
 102   2                  {               
 103   3                      column=1;
 104   3                      row++;
 105   3                      if(row==2) return;
 106   3                      else
 107   3                      {
 108   4                        switch(row)                                     //这种结构保持以后升级到多行显示液晶
 109   4                        {
 110   5                          case 1:Lcd1602_Write_Command(0x80);break;
 111   5                          case 2:Lcd1602_Write_Command(0x80+0x40);break;//重新调整数据地址指针
 112   5                          default:break;
 113   5                        }
 114   4                      }
 115   3                  }
 116   2              } 
 117   1      }   
C51 COMPILER V8.02   LCD1602                                                               04/25/2009 20:54:56 PAGE 3   

 118          
 119          //************************************************************
 120          // 功能说明:清除指定的位置的字符,光标返回最左边第一个字符位置
 121          // 输入变量:uchar row,uchar column ;全局变量:无
 122          // 返回值 : 无
 123          // 调用函数 : Lcd1602_Write_String()
 124          //************************************************************
 125          /*void Lcd1602_Clear_Char(uchar row,uchar column)
 126          {
 127              Lcd1602_Write_String(row,column," ");
 128          }*/ 
 129          
 130          //*************************************************************
 131          // 功能说明:清除指定的行,光标返回最左边第一个字符位置
 132          // 输入变量:uchar line ; 全局变量 : 无
 133          // 返回值  : 无
 134          // 调用函数 :Lcd1602_Write_String();Lcd1602_Write_Command()
 135          //*************************************************************
 136          /*void Lcd1602_Clear_Line(uchar line)
 137          {
 138              Lcd1602_Write_String(line,0,"                ");
 139              switch(line)                                           //这种结构保持以后升级到多行显示液晶
 140                  {
 141                     case 1:Lcd1602_Write_Command(0x80);break;       //将数据地址指针定位到第一行
 142                     case 2:Lcd1602_Write_Command(0x80+0x40);break;  //将数据地址指针定位到第二行
 143                     default: break;
 144                  }   
 145          } */
 146          
 147          //**************************************************************
 148          //      功能说明:清屏,并将DDRAM指针指向第一行第一列
 149          //      输入变量:无 ;全局变量: 无 ;返回值:无
 150          //  调用函数:Lcd1602_Write_Command()
 151          //***************************************************************
 152          /*void Lcd1602_Clear_All( )
 153          {
 154             Lcd1602_Write_Command(0x01);//显示清屏。
 155             Lcd1602_Write_Command(0x80);//将数据指针设置到第一行的第一个字符。
 156          } */
 157          
 158          //**************************************************************
 159          //      功能说明:延时
 160          //      输入变量:uint t1,t2    全局变量:无   ;返回值:无
 161          //      调用函数:无
 162          //*************************************************************
 163          
 164          //void Lcd_delay(uint t1,uint t2)可以写成下面这种方式
 165          void Lcd_delay(uint t1,t2)
 166          {   
 167   1              uint i,j;
 168   1              for(i=1;i<t1;i++)
 169   1          for(j=1;j<t2;j++);
 170   1                    
 171   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    222    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
C51 COMPILER V8.02   LCD1602                                                               04/25/2009 20:54:56 PAGE 4   

   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 + -