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

📄 1602.lst

📁 用C语言编写的1602lcd模块驱动程序
💻 LST
字号:
C51 COMPILER V8.02   1602                                                                  03/12/2009 15:47:43 PAGE 1   


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

line level    source

   1          /*=======================================
   2                                   1602lcd模块驱动程序
   3          ==========================================
   4          
   5          说明:1.晶体:11.0592MHz
   6               2.1602驱动:ks0066
   7              
   8          ******************************************/
   9          #include <reg52.h>
  10          #include <string.h>
  11          
  12          #define uchar unsigned char
  13          #define uint  unsigned int 
  14          #define lcd_data  P0                    //定义P2口为数据口
  15          
  16          sbit  lcd_rs  = P2^0 ;           //寄存器选择
  17          sbit  lcd_rw  = P2^1 ;       //读/写控制
  18          sbit  lcd_e   = P2^2 ;           //读/写使能
  19          //sbit  lcd_blk = P1^0 ;      //背光led   1.off 0.on
  20          
  21          
  22          
  23          //函数声明
  24          void delay5ms(void);
  25          void delay400ms(void);
  26          void lcd_write_command(uchar wc_lcd,busy_c);
  27          
  28          
  29          /***********************************
  30          //函数名称:    void lcd_ini(void)
  31          //传递参数:    无
  32          //返 回 值:    无
  33          //函数功能:    LCD初始化
  34          //函数说明:
  35          ***********************************/
  36          void lcd_ini(void)
  37          {
  38   1          lcd_data = 0;
  39   1          lcd_write_command(0x38,0);        //16*2显示,5*7点阵,8位数据接口,不检测忙
  40   1          delay5ms();
  41   1      //    lcd_write_command(0x38,0);
  42   1      //    delay5ms();
  43   1      //    lcd_write_command(0x38,0);        //三次显示模式, 不检测忙
  44   1      //    delay5ms();
  45   1          lcd_write_command(0x38,1);        //16*2显示,5*7点阵,8位数据接口,需要检测忙
  46   1      //    lcd_write_command(0x80,1);        //关闭显示
  47   1          lcd_write_command(0x01,1);        //clear显示    
  48   1          lcd_write_command(0x06,1);        //指针和光标+1,不滚屏
  49   1          lcd_write_command(0x0c,1);        //开显示,不显示光标
  50   1      }
  51          
  52          /***********************************
  53          //函数名称:    uchar lcd_read_status(void)
  54          //传递参数:    无
  55          //返 回 值:    uchar
C51 COMPILER V8.02   1602                                                                  03/12/2009 15:47:43 PAGE 2   

  56          //函数功能:    读lcm状态,等待lcd空闲
  57          //函数说明:    DB7=1,忙
  58          ***********************************/
  59          uchar lcd_read_status(void)
  60          {
  61   1          lcd_data=0xff;
  62   1          lcd_rs=0;
  63   1          lcd_rw=1;
  64   1          lcd_e=0;
  65   1          lcd_e=0;
  66   1          lcd_e=1;
  67   1          while(lcd_data & 0x80);       //如果DB7为1表示忙,则死循环等待
  68   1          return lcd_data;
  69   1      }
  70          
  71          /***********************************
  72          //函数名称:    void lcd_write_data(uchar wd_lcd)
  73          //传递参数:    uchar  wd_lcd
  74          //返 回 值:    无
  75          //函数功能:    lcd写数据
  76          //函数说明:    
  77          ***********************************/
  78          void lcd_write_data(uchar wd_lcd)
  79          {
  80   1          lcd_read_status();            //判断lcd忙标志
  81   1          lcd_data = wd_lcd;
  82   1          lcd_rs = 1;
  83   1          lcd_rw = 0;
  84   1          lcd_e = 0;
  85   1          lcd_e = 0;
  86   1          lcd_e = 1;
  87   1      }
  88          
  89          /***********************************
  90          //函数名称:    void lcd_write_command(uchar wc_lcd, busy_c)
  91          //传递参数:    uchar wc_lcd, busy_c
  92          //返 回 值:    无
  93          //函数功能:    lcd写命令
  94          //函数说明:    busy_c=0 是表示不用检测忙信号
  95          ***********************************/
  96          void lcd_write_command(uchar wc_lcd, busy_c)
  97          {
  98   1          if (busy_c)
  99   1              lcd_read_status();
 100   1          lcd_data = wc_lcd;
 101   1          lcd_rs=0;
 102   1          lcd_rw = 0;
 103   1          lcd_e = 0;
 104   1          lcd_e = 0;
 105   1          lcd_e = 1;
 106   1      }
 107          
 108          /***********************************
 109          //函数名称:    void disp_one_char(uchar x, uchar y,uchar disp_data)
 110          //传递参数:    uchar x, uchar y,uchar disp_data
 111          //返 回 值:    无
 112          //函数功能:    指定位置显示 一个 字符
 113          //函数说明:    
 114          ***********************************/
 115          void disp_one_char(uchar x,uchar y,uchar disp_data)
 116          {
 117   1          y = y&0x01;
C51 COMPILER V8.02   1602                                                                  03/12/2009 15:47:43 PAGE 3   

 118   1          x = x&0x0f;                  //限制2行,没行15个字
 119   1          if (y)
 120   1            x =x + 0x40;          //算RAM地址,假如y为1则表示第二行,x地址就从40H开始
 121   1          x = x + 0x80;                       //两行的地址的最高位DB7都要恒为1
 122   1          lcd_write_command(x,0);
 123   1          lcd_write_data(disp_data);
 124   1      }
 125          
 126          /***********************************
 127          //函数名称:    void disp_one_char(uchar x, uchar y,uchar *disp_data)
 128          //传递参数:    uchar x, uchar y,uchar *disp_data
 129          //返 回 值:    无
 130          //函数功能:    指定位置显示 一串 字符
 131          //函数说明:    
 132          ***********************************/    
 133          void disp_list_char(uchar x,uchar y,uchar *disp_data)  //x表示列位置,从0到15共16位,y表示行,从0到1共2行
 134          {
 135   1          uchar char_length,j;
 136   1          char_length = strlen(disp_data);
 137   1          y = y&0x01;
 138   1          x = x&0x0f;
 139   1          for (j=0;j<char_length;j++)
 140   1          {
 141   2              disp_one_char( x,y,disp_data[j]);        //显示一个字符
 142   2              x++;
 143   2          }
 144   1      }
 145          
 146          /***********************************
 147          //函数名称:    void delay5ms(void)
 148          //传递参数:    无
 149          //返 回 值:    无
 150          //函数功能:    延时5MS
 151          //函数说明:
 152          ***********************************/
 153          void delay5ms(void)
 154          {
 155   1          uint TempCyc = 5552;
 156   1          while(TempCyc--);
 157   1      }
 158          
 159          
 160          /***********************************
 161          //函数名称:    void delay400ms(void)
 162          //传递参数:    无
 163          //返 回 值:    无
 164          //函数功能:    L延时400MS
 165          //函数说明:    LCD开机延时
 166          ***********************************/
 167          
 168          /*                                          
 169          void delay400ms(void)
 170          {
 171              uchar TempCycA = 5;
 172              uint  TempCycB;
 173              while(TempCycA--)
 174              {
 175                  TempCycB=7269;
 176                  while(TempCycB--);
 177              };
 178          }                                                        
 179          
C51 COMPILER V8.02   1602                                                                  03/12/2009 15:47:43 PAGE 4   

 180          /*****d******************************
 181          //函数名称:    void main(void)
 182          //传递参数:    无
 183          //返 回 值:    无
 184          //函数功能:    主函数
 185          //函数说明:    
 186          ************************************/
 187          void main(void)
 188          { 
 189   1              uint key,x=0;
 190   1          delay5ms(); 
 191   1          lcd_ini();                              //lcd初始化
 192   1              while((key=P2&0xf0)==0xf0)                 //Wellcome流动效果
 193   1              {                                                                 
 194   2          disp_list_char(x,0,"->Wellcome->    ");       // 开机首屏幕
 195   2              x++;
 196   2              
 197   2          disp_list_char(0,1,"^Happy new year^");       // 问候语     
 198   2              delay5ms();delay5ms();delay5ms();delay5ms();delay5ms();
 199   2              delay5ms();delay5ms();delay5ms();delay5ms();delay5ms();   //10个delay5毫秒
 200   2      
 201   2              }                                                                                                                 //要按定任一键约1秒才跳出循环
 202   1        
 203   1          while(1)
 204   1              {
 205   2               key=0;
 206   2               key=P2&0xf0;     //键盘扫描
 207   2      
 208   2               switch(key)
 209   2                { case  0xe0:
 210   3                    {
 211   4                 disp_list_char(0,0," Do you want to ");
 212   4                         disp_list_char(0,1,"send Record 01 ?");        
 213   4      
 214   4                         }break; 
 215   3                }
 216   2              }                  
 217   1                
 218   1      }
 219          
 220          
 221          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    336    ----
   CONSTANT SIZE    =     68    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   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 + -