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

📄 lcd1602-4bit.lst

📁 1602显示液晶四位并口驱动
💻 LST
字号:
C51 COMPILER V8.02   LCD1602_4BIT                                                          01/05/2007 19:41:12 PAGE 1   


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

line level    source

   1          /*******************************************************************
   2          *                                                                  *
   3          * ME500单片机开发系统演示程序 - LCD1602 4位数据线控制方式          *
   4          *                                                                  *
   5          * LCD1602显示                                                      *
   6          *                                                                  *
   7          * 邮箱:  gguoqing@willar.com                                       *
   8          * 网站: http://www.willar.com                                     *
   9          * 作者: gguoqing                                                  *
  10          * 时间: 2007/01/03                                                *
  11          *                                                                  *
  12          *【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved  *
  13          *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!        *
  14          *                                                                  *
  15          ********************************************************************
  16          *                                                                  *
  17          * 描述:                                                           *
  18          *    LCD1602可以分为8位和4位控制方式,8位控制方式是用D0-D7数据线   *
  19          * 来传送控制命令及数据。4位控制方式是用D4-D7数据线来传送控制命令   *
  20          * 及数据。使用4位数据线做控制时,需要分两次来传送,先送出高4位数   *
  21          * 据,再送出低4位数据。可以节省单片机的4根端口线。                 *
  22          *                                                                  *
  23          *******************************************************************/
  24          
  25          #include < reg51.h >
  26          #include < intrins.h >
  27          
  28          #define uchar unsigned char
  29          #define uint  unsigned int
  30          
  31          sbit  LCD_RS = P2^0;             
  32          sbit  LCD_RW = P2^1;
  33          sbit  LCD_EN = P2^2;
  34          
  35          
  36          uchar code  cdis1[ ] = {"   WELCOME TO   "}; 
  37          uchar code  cdis2[ ] = {" WWW.WILLAR.COM "};
  38          
  39          /**********************************************************
  40          
  41          * 5us 延时子程序
  42          
  43          **********************************************************/
  44          void  delayNOP()
  45          {
  46   1         _nop_();
  47   1         _nop_();
  48   1         _nop_();
  49   1         _nop_();
  50   1         _nop_();
  51   1      }
  52          
  53          /**********************************************************
  54          
  55          * 延时子程序
C51 COMPILER V8.02   LCD1602_4BIT                                                          01/05/2007 19:41:12 PAGE 2   

  56          
  57          **********************************************************/
  58          void delay(uint ms) 
  59          {
  60   1         uchar t;
  61   1         while(ms--)
  62   1         { 
  63   2           for(t = 0; t < 120; t++);
  64   2         }
  65   1      }
  66          
  67          /**********************************************************
  68          
  69          * 检查LCD忙状态                                           
  70          * lcd_busy为1时,忙,等待。                               
  71          * lcd-busy为0时,闲,可写指令与数据                        
  72          
  73          **********************************************************/ 
  74          bit lcd_busy()
  75           {                          
  76   1          bit result;
  77   1          LCD_RS = 0;
  78   1          LCD_RW = 1;
  79   1          LCD_EN = 1;
  80   1          delayNOP();
  81   1          result = (bit)(P0&0x80);
  82   1          LCD_EN = 0;
  83   1          return(result); 
  84   1       }
  85          
  86          /*********************************************************                                      
  87          
  88          * 写指令或数据
  89          
  90          * start=0, 写入命令;  start=1, 写入数据
  91          
  92          *********************************************************/
  93          void lcd_write(bit start, uchar in_data) 
  94          {
  95   1          uchar Hdata,Ldata;
  96   1      
  97   1              while(lcd_busy());
  98   1      
  99   1          Hdata=in_data&0xf0;             //取高四位
 100   1          Ldata=(in_data<<4)&0xf0;    //取低四位
 101   1      
 102   1          if(start==0) 
 103   1          LCD_RS = 0;                 //写入命令
 104   1          else
 105   1          LCD_RS = 1;                 //写入数据
 106   1      
 107   1              LCD_RW = 0;
 108   1          LCD_EN = 0;
 109   1              delayNOP();
 110   1      
 111   1              P0 = Hdata;                     //发送高四位   
 112   1          LCD_EN = 1;
 113   1          delayNOP();
 114   1          LCD_EN = 0;
 115   1              delayNOP();
 116   1      
 117   1              P0 = Ldata;                     //发送低四位            
C51 COMPILER V8.02   LCD1602_4BIT                                                          01/05/2007 19:41:12 PAGE 3   

 118   1          LCD_EN = 1;
 119   1          delayNOP();
 120   1          LCD_EN = 0;
 121   1              delayNOP();
 122   1      }
 123          
 124          /*************************************************************
 125          
 126          *  LCD初始化设定                                             
 127          
 128          *************************************************************/
 129          void lcd_init()
 130          {
 131   1          delay(15);
 132   1          lcd_write(0,0x28);       //16*2显示,5*7点阵,4位数据
 133   1          delay(5);
 134   1          lcd_write(0,0x28);
 135   1          delay(5);
 136   1          lcd_write(0,0x28);
 137   1      
 138   1          delay(5);
 139   1          lcd_write(0,0x0c);           //显示开,关光标
 140   1          delay(5);
 141   1          lcd_write(0,0x06);           //移动光标
 142   1          delay(5);
 143   1          lcd_write(0,0x01);           //清除LCD的显示内容
 144   1          delay(25);                           //延时
 145   1      }
 146          
 147          /**********************************************************
 148          
 149          *  设定显示位置                                             
 150                                                                  
 151          **********************************************************/
 152          void lcd_pos(uchar pos)
 153          {                          
 154   1        lcd_write(0,pos|0x80);     //数据指针=80+地址变量
 155   1      }
 156          
 157          /**********************************************************
 158          
 159          * 主函数
 160          
 161          **********************************************************/
 162          void  main()
 163          {
 164   1          uchar  m;
 165   1      
 166   1              lcd_init();              //LCD1602初始化
 167   1              
 168   1              lcd_pos(0x00);           //设置显示位置为第一行
 169   1          for(m=0;m<16;m++)
 170   1          {
 171   2            lcd_write(1,cdis1[m]);
 172   2            delay(150);
 173   2          }
 174   1      
 175   1          lcd_pos(0x40);           //设置显示位置为第二行     
 176   1          for(m=0;m<16;m++)
 177   1          {           
 178   2                lcd_write(1,cdis2[m]);
 179   2            delay(150);
C51 COMPILER V8.02   LCD1602_4BIT                                                          01/05/2007 19:41:12 PAGE 4   

 180   2          }
 181   1              while(1) ;
 182   1      }
 183          
 184          /*********************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    245    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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