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

📄 11.lst

📁 lcd1602编程资料。包括8位和4位口的c语言程序。当单片机口不够时可用4位接法
💻 LST
字号:
C51 COMPILER V8.02   11                                                                    04/09/2007 21:36:09 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 11
OBJECT MODULE PLACED IN 11.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 11.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           #include < reg51.h >
  25           #include < intrins.h >
  26           #define uchar unsigned char
  27           #define uint  unsigned int
  28           sbit  LCD_RS = P2^1;             
  29           sbit  LCD_RW = P2^2;
  30           sbit  LCD_EN = P2^0;
  31           
  32           uchar code  cdis1[ ] = {"   WELCOME TO   "}; 
  33           uchar code  cdis2[ ] = {" WWW.WILLAR.COM "};
  34           /**********************************************************
  35           * 5us 延时子程序
  36           **********************************************************/
  37           void  delayNOP()
  38           {
  39   1          _nop_();
  40   1          _nop_();
  41   1          _nop_();
  42   1          _nop_();
  43   1          _nop_();
  44   1       }
  45           /**********************************************************
  46           * 延时子程序
  47           **********************************************************/
  48           void delay(uint ms) 
  49           {
  50   1          uchar t;
  51   1          while(ms--)
  52   1          { 
  53   2            for(t = 0; t < 120; t++);
  54   2          }
  55   1       }
C51 COMPILER V8.02   11                                                                    04/09/2007 21:36:09 PAGE 2   

  56           
  57           /**********************************************************
  58           * 检查LCD忙状态                                           
  59           * lcd_busy为1时,忙,等待。                               
  60           * lcd-busy为0时, 闲,可写指令与数据                        
  61           **********************************************************/ 
  62           bit lcd_busy()
  63            {                          
  64   1           bit result;
  65   1           LCD_RS = 0;
  66   1           LCD_RW = 1;
  67   1           LCD_EN = 1;
  68   1           delayNOP();
  69   1           result = (bit)(P0&0x80);
  70   1           LCD_EN = 0;
  71   1           return(result); 
  72   1        }
  73           /*********************************************************      
  74           * 写指令或数据
  75           * start=0, 写入命令;  start=1, 写入数据
  76           *********************************************************/
  77           void lcd_write(bit start, uchar in_data) 
  78           {
  79   1           uchar Hdata,Ldata;
  80   1           while(lcd_busy());
  81   1           Hdata=in_data&0xf0;             //取高四位
  82   1           Ldata=(in_data<<4)&0xf0;    //取低四位
  83   1           if(start==0) 
  84   1           LCD_RS = 0;                //写入命令
  85   1           else
  86   1           LCD_RS = 1;                 //写入数据
  87   1      
  88   1           LCD_RW = 0;
  89   1      
  90   1           LCD_EN = 0;
  91   1           delayNOP();
  92   1           P0 = Hdata;                 //发送高四位   
  93   1           LCD_EN = 1;
  94   1           delayNOP();
  95   1           LCD_EN = 0;
  96   1      
  97   1           delayNOP();
  98   1           P0 = Ldata;                 //发送低四位      
  99   1           LCD_EN = 1;
 100   1           delayNOP();
 101   1           LCD_EN = 0;
 102   1           delayNOP();
 103   1       }
 104           /*************************************************************
 105           *  LCD初始化设定                                             
 106           *************************************************************/
 107           void lcd_init()
 108           {
 109   1           delay(15);
 110   1           lcd_write(0,0x28);                //16*2显示,5*7点阵,4位数据
 111   1           delay(5);
 112   1           lcd_write(0,0x28);
 113   1           delay(5);
 114   1           lcd_write(0,0x28);
 115   1           delay(5);
 116   1           lcd_write(0,0x0c);               //显示开,关光标
 117   1           delay(5);
C51 COMPILER V8.02   11                                                                    04/09/2007 21:36:09 PAGE 3   

 118   1           lcd_write(0,0x06);              //移动光标
 119   1           delay(5);
 120   1           lcd_write(0,0x01);              //清除LCD的显示内容
 121   1           delay(25);                          //延时
 122   1       }
 123           /**********************************************************
 124           *  设定显示位置                                             
 125                                                                   
 126           **********************************************************/
 127           void lcd_pos(uchar pos)
 128           {                          
 129   1          lcd_write(0,pos|0x80);     //数据指针=80+地址变量
 130   1       }
 131           /**********************************************************
 132           * 主函数
 133           **********************************************************/
 134           void  main()
 135           {
 136   1           uchar  m;
 137   1           lcd_init();                          //LCD1602初始化
 138   1        
 139   1           lcd_pos(0x00);                 //设置显示位置为第一行
 140   1           for(m=0;m<16;m++)
 141   1           lcd_write(1,cdis1[m]);
 142   1       
 143   1            lcd_pos(0x40);                //设置显示位置为第二行     
 144   1            for(m=0;m<16;m++)  
 145   1            lcd_write(1,cdis2[m]);
 146   1             while(1);
 147   1       }
 148           /*********************************************************/  
 149           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    231    ----
   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 + -