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

📄 lcd1602_8a.lst

📁 文件夹包含LCD1602的一些经常用到的驱动: ├─★★LCD1602四线驱动 ├─★LCD1602_8显示Mini Driver ├─★★LCD1602A_优化驱动 ├─★▲LCD1602滚
💻 LST
📖 第 1 页 / 共 3 页
字号:
  10      =1  /*--------------------------------------------------------------*/ 
  11      =1  //防止被重复定义
  12      =1  #ifndef __LCD1602_8A_H__                        
  13      =1  #define __LCD1602_8A_H__
  14      =1  //所需头文件
  15      =1  #include <intrins.h>
   1      =2  /*--------------------------------------------------------------------------
   2      =2  INTRINS.H
C51 COMPILER V7.06   LCD1602_8A                                                            08/10/2008 09:52:05 PAGE 5   

   3      =2  
   4      =2  Intrinsic functions for C51.
   5      =2  Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
   6      =2  All rights reserved.
   7      =2  --------------------------------------------------------------------------*/
   8      =2  
   9      =2  #ifndef __INTRINS_H__
  10      =2  #define __INTRINS_H__
  11      =2  
  12      =2  extern void          _nop_     (void);
  13      =2  extern bit           _testbit_ (bit);
  14      =2  extern unsigned char _cror_    (unsigned char, unsigned char);
  15      =2  extern unsigned int  _iror_    (unsigned int,  unsigned char);
  16      =2  extern unsigned long _lror_    (unsigned long, unsigned char);
  17      =2  extern unsigned char _crol_    (unsigned char, unsigned char);
  18      =2  extern unsigned int  _irol_    (unsigned int,  unsigned char);
  19      =2  extern unsigned long _lrol_    (unsigned long, unsigned char);
  20      =2  extern unsigned char _chkfloat_(float);
  21      =2  
  22      =2  #endif
  23      =2  
  16      =1  
  17      =1  
  18      =1  /*--------------------------------------------------------------*/ 
  19      =1  //LCD1602与单片机接口定义
  20      =1  sfr             LCD_IO = 0x80;                  //P0-0x80,P1-0x90,P2-0xA0,P3-0xB0;
  21      =1  sbit    LCD_RS = P2^0;                  //LCD数据/命令选择端(H/L)
  22      =1  sbit    LCD_RW = P2^1;                  //LCD  读/写  选择端(H/L)
  23      =1  sbit    LCD_EN = P2^2;                  //LCD使能控制端
  24      =1  sbit    LCD_BZ = LCD_IO^7;              //LCD忙标志位
  25      =1  
  26      =1  
  27      =1  /*--------------------------------------------------------------*/ 
  28      =1  //函数声明
  29      =1  void LCD_busy  (void);                                                                                                  //检测LCD是否忙
  30      =1  void LCD_init  (void);                                                                                                  //LCD初始化
  31      =1  void LCD_clr   (void);                                                                                                  //LCD清屏
  32      =1  void LCD_cmd   (unsigned char cmd);                                                                             //写入指令
  33      =1  void LCD_dat   (unsigned char dat);                                                                             //写入数据
  34      =1  void LCD_pos   (unsigned char x, unsigned char y);                                              //显示定位
  35      =1  void LCD_printc(unsigned char x, unsigned char y, unsigned char c);             //定位输出字符
  36      =1  void LCD_prints(unsigned char x, unsigned char y, unsigned char *s);    //定位输出字符串
  37      =1  
  38      =1  
  39      =1  /*--------------------------------------------------------------*/ 
  40      =1  //检测LCD忙状态
  41      =1  void LCD_busy(void)
  42      =1  {
  43   1  =1          do
  44   1  =1          {
  45   2  =1                  LCD_EN = 0;
  46   2  =1                  LCD_RS = 0;                     //指令
  47   2  =1                  LCD_RW = 1;                     //读出
  48   2  =1                  LCD_IO = 0xff;          
  49   2  =1                  LCD_EN = 1;
  50   2  =1                  _nop_();                        //高电平读出    延迟时间1us
  51   2  =1          }while(LCD_BZ);                 //LCD_BZ=1表示忙,LCD_BZ=0表示空闲
  52   1  =1          LCD_EN = 0;
  53   1  =1  }
  54      =1  
  55      =1  
  56      =1  /*--------------------------------------------------------------*/ 
C51 COMPILER V7.06   LCD1602_8A                                                            08/10/2008 09:52:05 PAGE 6   

  57      =1  //写入指令
  58      =1  void LCD_cmd(unsigned char cmd)                 
  59      =1  {
  60   1  =1          LCD_busy();                             //检测忙
  61   1  =1          LCD_RS = 0;                             //指令
  62   1  =1          LCD_RW = 0;                             //写入
  63   1  =1          LCD_EN = 1;
  64   1  =1          LCD_IO = cmd;                   //传指令
  65   1  =1          LCD_EN = 0;                             //下降沿有效
  66   1  =1  }
  67      =1  
  68      =1  
  69      =1  /*--------------------------------------------------------------*/ 
  70      =1  //写入数据
  71      =1  void LCD_dat(unsigned char dat) 
  72      =1  {
  73   1  =1          LCD_busy();                             //检测忙
  74   1  =1          LCD_RS = 1;                             //数据
  75   1  =1          LCD_RW = 0;                             //写入
  76   1  =1          LCD_EN = 1;
  77   1  =1          LCD_IO = dat;                   //传数据
  78   1  =1          LCD_EN = 0;                             //下降沿有效
  79   1  =1  }
  80      =1  
  81      =1  
  82      =1  /*--------------------------------------------------------------*/ 
  83      =1  //显示定位
  84      =1  void LCD_pos(unsigned char x, unsigned char y)
  85      =1  {
  86   1  =1          if(y)   LCD_cmd(x|0xc0);//y=1第二行显示,y=0第一行显示   0<=x<16
  87   1  =1          else    LCD_cmd(x|0x80);//数据指针=80+地址码(00H~27H,40H~67H)
  88   1  =1  }
  89      =1  
  90      =1  
  91      =1  /*--------------------------------------------------------------*/ 
  92      =1  //LCD清屏
  93      =1  void LCD_clr(void)
  94      =1  {
  95   1  =1          LCD_cmd(0x01);
  96   1  =1  }
  97      =1  
  98      =1  
  99      =1  /*--------------------------------------------------------------*/ 
 100      =1  //定位输出字符
 101      =1  void LCD_printc(unsigned char x, unsigned char y, unsigned char c)
 102      =1  {
 103   1  =1          LCD_pos(x,y);
 104   1  =1          LCD_dat(c);
 105   1  =1  }
 106      =1  
 107      =1  
 108      =1  /*--------------------------------------------------------------*/ 
 109      =1  //定位输出字符串
 110      =1  void LCD_prints(unsigned char x, unsigned char y, unsigned char *s)
 111      =1  {
 112   1  =1          LCD_pos(x,y);
 113   1  =1          while(*s)
 114   1  =1          {
 115   2  =1                  LCD_dat(*s);
 116   2  =1                  s++;
 117   2  =1          }
 118   1  =1  }
C51 COMPILER V7.06   LCD1602_8A                                                            08/10/2008 09:52:05 PAGE 7   

 119      =1  
 120      =1  
 121      =1  /*--------------------------------------------------------------*/ 
 122      =1  //LCD初始化
 123      =1  void LCD_init(void)
 124      =1  {
 125   1  =1          LCD_cmd(0x38);                  //设置LCD为16X2显示,5X7点阵,八位数据接口        
 126   1  =1          LCD_cmd(0x06);                  //LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)
 127   1  =1          LCD_cmd(0x0c);                  //LCD开显示及光标设置(光标不闪烁,不显示"_")
 128   1  =1          LCD_cmd(0x01);                  //清屏
 129   1  =1  }
 130      =1  
 131      =1  
 132      =1  /*--------------------------------------------------------------*/ 
 133      =1  #endif
 134      =1  
 135      =1  
 136      =1  
 137      =1  
 138      =1  
   3          
   4          
   5          unsigned char code tab[]={"       Hello! Welcome you to our shcool! Have a good time!"};
   6          
   7          
   8          //延时500ms 函数定义
   9          void delay500ms(void)
  10          {
  11   1          unsigned char i,j,k;
  12   1          for(i=15;i>0;i--)
  13   1          for(j=66;j>0;j--)
  14   1          for(k=251;k>0;k--);
  15   1      }
  16          
  17          
  18          void main(void)
  19          {
  20   1              unsigned char *s=tab;
  21   1              LCD_init();
  22   1              while(1)
  23   1              {
  24   2                      LCD_clr();
  25   2                      LCD_prints(5,0,"!*^ ^*!");
  26   2                      LCD_printc(8,0,'_');
  27   2                      LCD_prints(0,1,s++);
  28   2                      if(*s=='\0')  s=tab;
  29   2                      delay500ms();
  30   2              }       
  31   1      }
  32          
C51 COMPILER V7.06   LCD1602_8A                                                            08/10/2008 09:52:05 PAGE 8   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION Com0020 (BEGIN)
0000         L?0033:
0000 7500FF      R     MOV     s,#0FFH
0003 750000      R     MOV     s+01H,#HIGH tab
0006 750000      R     MOV     s+02H,#LOW tab
0009 22                RET     
             ; FUNCTION Com0020 (END)

             ; FUNCTION LCD_busy (BEGIN)
                                           ; SOURCE LINE # 41
                                           ; SOURCE LINE # 42
0000         ?C0003:
                                           ; SOURCE LINE # 44
                                           ; SOURCE LINE # 45
0000 C2A2              CLR     LCD_EN
                                           ; SOURCE LINE # 46
0002 C2A0              CLR     LCD_RS
                                           ; SOURCE LINE # 47
0004 D2A1              SETB    LCD_RW
                                           ; SOURCE LINE # 48
0006 7580FF            MOV     LCD_IO,#0FFH
                                           ; SOURCE LINE # 49
0009 D2A2              SETB    LCD_EN
                                           ; SOURCE LINE # 50
000B 00                NOP     
                                           ; SOURCE LINE # 51
000C 2087F1            JB      LCD_BZ,?C0003
                                           ; SOURCE LINE # 52
000F C2A2              CLR     LCD_EN
                                           ; SOURCE LINE # 53
0011 22                RET     
             ; FUNCTION LCD_busy (END)

             ; FUNCTION _LCD_cmd (BEGIN)
                                           ; SOURCE LINE # 58
;---- Variable 'cmd' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 59
                                           ; SOURCE LINE # 60
0000 120000      R     LCALL   LCD_busy
                                           ; SOURCE LINE # 61
0003 C2A0              CLR     LCD_RS
                                           ; SOURCE LINE # 62
0005 C2A1              CLR     LCD_RW
                                           ; SOURCE LINE # 63
0007 D2A2              SETB    LCD_EN
                                           ; SOURCE LINE # 64
0009 8F80              MOV     LCD_IO,R7
                                           ; SOURCE LINE # 65
000B C2A2              CLR     LCD_EN
                                           ; SOURCE LINE # 66
000D 22                RET     
             ; FUNCTION _LCD_cmd (END)

             ; FUNCTION _LCD_dat (BEGIN)
                                           ; SOURCE LINE # 71

⌨️ 快捷键说明

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