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

📄 lcd1602.lst

📁 实验30 单片机驱动1602液晶滚动显示技术
💻 LST
字号:
C51 COMPILER V8.09   LCD1602                                                               04/18/2008 09:37:55 PAGE 1   


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

line level    source

   1          /* *****************************************************************/
   2          /* 电子技术实验室论坛单片机开发板演示程序                          */
   3          /* 1602滚动显示                                                                                                 */
   4          /* 1602液晶显示                                                    */
   5          /* 晶体:11.0592M                                                  */
   6          /* MCU:STC89S51,52orAT89系列                                                                     */
   7          /* 版本: V1.0 (2008/03/20)                                        */
   8          /* 技术交流论坛:http://mcudz.5d6d.com                             */
   9          /*【声明】此程序仅用于学习参考,为学习板赠送资料,不得用做商业用途 */
  10          /*                                                                 */
  11          /*******************************************************************/
  12          #include <reg51.h>
  13          #include <intrins.h>
  14          
  15          typedef unsigned char BYTE;
  16          typedef bit BOOL;  
  17          
  18          sbit LCD_RS = P0^7;             
  19          sbit LCD_RW = P0^6;
  20          sbit LCD_EP = P0^5;
  21          
  22          BYTE code dis1[] = {"   WLCOME  TO   "};
  23          BYTE code dis2[] = {" mcudz.5d6d.com"};
  24          BYTE code dis3[] = {"   OT  EMOCLW   "};
  25          BYTE code dis4[] = {"  moc.d6d5.www "};
  26          
  27          delay(int ms)
  28          {                           // 延时子程序
  29   1      int i;
  30   1      while(ms--)
  31   1      {
  32   2        for(i = 0; i< 250; i++)
  33   2        {
  34   3         _nop_();
  35   3         _nop_();
  36   3         _nop_();
  37   3         _nop_();
  38   3        }
  39   2      }
  40   1      }
  41          
  42          BOOL lcd_bz()
  43          {                          // 测试LCD忙碌状态
  44   1      BOOL result;
  45   1      LCD_RS = 0;
  46   1      LCD_RW = 1;
  47   1      LCD_EP = 1;
  48   1      _nop_();
  49   1      _nop_();
  50   1      _nop_();
  51   1      _nop_();
  52   1      result = (BOOL)(P2 & 0x80);
  53   1      LCD_EP = 0;
  54   1      return result; 
  55   1      }
C51 COMPILER V8.09   LCD1602                                                               04/18/2008 09:37:55 PAGE 2   

  56          
  57          lcd_wcmd(BYTE cmd)
  58          {                          // 写入指令数据到LCD
  59   1      while(lcd_bz());
  60   1      LCD_RS = 0;
  61   1      LCD_RW = 0;
  62   1      LCD_EP = 0;
  63   1      _nop_();
  64   1      _nop_(); 
  65   1      P2 = cmd;
  66   1      _nop_();
  67   1      _nop_();
  68   1      _nop_();
  69   1      _nop_();
  70   1      LCD_EP = 1;
  71   1      _nop_();
  72   1      _nop_();
  73   1      _nop_();
  74   1      _nop_();
  75   1      LCD_EP = 0;  
  76   1      }
  77          
  78          lcd_pos(BYTE pos)
  79          {                          //设定显示位置
  80   1      lcd_wcmd(pos | 0x80);
  81   1      }
  82          
  83          lcd_wdat(BYTE dat) 
  84          {                          //写入字符显示数据到LCD
  85   1      while(lcd_bz());
  86   1      LCD_RS = 1;
  87   1      LCD_RW = 0;
  88   1      LCD_EP = 0;
  89   1      P2 = dat;
  90   1      _nop_();
  91   1      _nop_();
  92   1      _nop_();
  93   1      _nop_();
  94   1      LCD_EP = 1;
  95   1      _nop_();
  96   1      _nop_();
  97   1      _nop_();
  98   1      _nop_();
  99   1      LCD_EP = 0; 
 100   1      }
 101          
 102          lcd_init()
 103          {                        //LCD初始化设定
 104   1      lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据
 105   1      delay(1);
 106   1      lcd_wcmd(0x0c);          //显示开,关光标
 107   1      delay(1);
 108   1      lcd_wcmd(0x06);          //移动光标
 109   1      delay(1);
 110   1      lcd_wcmd(0x01);          //清除LCD的显示内容
 111   1      delay(1);
 112   1      }
 113          
 114          main()
 115          {
 116   1            BYTE i;
 117   1            lcd_init();               // 初始化LCD
C51 COMPILER V8.09   LCD1602                                                               04/18/2008 09:37:55 PAGE 3   

 118   1            delay(10);
 119   1      
 120   1          while(1)              
 121   1         { 
 122   2            lcd_wcmd(0x06);            //向右移动光标
 123   2            lcd_pos(0);                //设置显示位置为第一行的第1个字符
 124   2            i = 0;
 125   2           while(dis1[ i ] != '\0')
 126   2           {                           //显示字符"Welcome TO"
 127   3             lcd_wdat(dis1[ i ]);
 128   3             i++;
 129   3             delay(30);                //控制两字之间显示速度
 130   3           }
 131   2            lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 132   2            i = 0;
 133   2           while(dis2[ i ] != '\0')
 134   2           {
 135   3             lcd_wdat(dis2[ i ]);      //显示字符" WWW.WILLAR.COM "
 136   3             i++;
 137   3             delay(30);                //控制两字之间显示速度
 138   3           }
 139   2            delay(800);                //控制停留时间
 140   2      
 141   2            lcd_wcmd(0x01);            //清除LCD的显示内容
 142   2            delay(1);
 143   2            lcd_wcmd(0x04);            //向左移动光标
 144   2           
 145   2            lcd_pos(15);               //设置显示位置为第一行的第16个字符
 146   2            i = 0;
 147   2           while(dis3[ i ] != '\0')
 148   2           {                           //显示字符"Welcome TO"
 149   3             lcd_wdat(dis3[ i ]);
 150   3             i++;
 151   3             delay(30);                //控制两字之间显示速度
 152   3           }
 153   2            lcd_pos(0x4F);             //设置显示位置为第二行的第16个字符
 154   2            i = 0;
 155   2           while(dis4[ i ] != '\0')
 156   2           {
 157   3             lcd_wdat(dis4[ i ]);      //显示字符" WWW.WILLAR.COM "
 158   3             i++;
 159   3             delay(30);                //控制两字之间显示速度
 160   3           }
 161   2            delay(800);                //控制停留时间
 162   2      
 163   2            lcd_wcmd(0x01);            //清除LCD的显示内容
 164   2            delay(200);                //控制两屏转换时间
 165   2                
 166   2         }
 167   1      }
 168           
 169           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    305    ----
   CONSTANT SIZE    =     66    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
C51 COMPILER V8.09   LCD1602                                                               04/18/2008 09:37:55 PAGE 4   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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