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

📄 lcd1602的滚动显示.txt

📁 此程序为1602的开发程序 使用的为c语言来进行编程
💻 TXT
字号:
LCD1602的滚动显示
       
      **************************************LCD1602头文件*********************************/ 

      #ifndef _LCD1602_H_
      #define _LCD1602_H_

      //输入方式设置
      #define LCD_AC_AUTO_INCREMENT     0x06   //数据读、写操作后,AC自动增一
      #define LCD_AC_AUTO_DECREASE      0x04   //数据读、写操作后,AC自动减一
      #define LCD_MOVE_ENABLE           0x05   //数据读、写操作,画面平移
      #define LCD_MOVE_DISENABLE        0x04   //数据读、写操作,画面不动
      #define LCD_GO_HOME               0x02   //AC=0,光标、画面回HOME位
      //设置显示、光标及闪烁开、关
      #define LCD_DISPLAY_ON            0x0C         //显示开
      #define LCD_DISPLAY_OFF           0x08         //显示关
      #define LCD_CURSOR_ON             0x0A         //光标显示
      #define LCD_CURSOR_OFF            0x08         //光标不显示
      #define LCD_CURSOR_BLINK_ON       0x09         //光标闪烁
      #define LCD_CURSOR_BLINK_OFF      0x08         //光标不闪烁
      //光标、画面移动,不影响DDRAM
      #define LCD_LEFT_MOVE             0x18         //LCD显示左移一位
      #define LCD_RIGHT_MOVE            0x1C         //LCD显示右移一位
      #define LCD_CURSOR_LEFT_MOVE      0x10         //光标左移一位
      #define LCD_CURSOR_RIGHT_MOVE     0x14         //光标右移一位
      //工作方式设置
      #define LCD_DISPLAY_DOUBLE_LINE   0x38         //两行显示
      #define LCD_DISPLAY_SINGLE_LINE   0x30         //单行显示
      #define LCD_CLEAR_SCREEN  0X01   //清屏
      /***********************LCD1602地址相关******************************/
      #define LINE1_HEAD    0x80   // 第一行DDRAM起始地址 
      #define LINE2_HEAD    0xc0   //  第二行DDRAM起始地址
      #define LINE1         0      //第一行
      #define LINE2         1      //第二行
      #define LINE_LENGTH   16     //每行的最大字符长度
      /***********************LCD1602接线引脚定义**************************/

      #define LCDIO     P2         //定义P2口与LCD1602的数据口相接
        sbit   LCD_RS=P1^4;         
        sbit   LCD_RW=P1^3;         
        sbit   LCD_EN=P1^2;
        sbit  LCD_BUSY=LCDIO^7;
       /**********************另外相关的定*********************************/
       #define HIGH               1
       #define LOW                0   
       #define TURE               1
       #define  FALSE             0
       #define  uchar unsigned char
       #define  uint  unsigned int
       
       /*************************以下是函数的申明部*************************/
       void LCD_init(void);                    //LCD1602初始化
       void LCD_send_command(uchar command);   //
       void LCD_send_data(uchar dat);
       void LCD_write_char(uchar x,uchar y,uchar dat);
       void LCD_disp_string(uchar x,uchar y,char *Data);
       void delay_ms(uint n);
       void LCD_check_busy(void);
       #endif
       /******************************************************************
       
      /#include <reg51.h>
      #include "LCD1602.h"
      /*******************主函数**********************************/
      uchar string[]="     I LOVE YOU! ";            //这里是要显示的字符
      void main(void)
      {
       uchar *cp;
       cp=string;
       LCD_init();
       while(1)
       {
        LCD_send_command(LCD_CLEAR_SCREEN);
        delay_ms(2);
        LCD_disp_string(0,1,cp);
        delay_ms(100);
               cp++;
        if(*cp==''\0'')
        {
         cp=string;                 //到达字符的尾部时,改变指针,重新指向字符串的头部
        }
       }
      }
      /*********************************************************/
      /**************LCD1602的初始化***************************/
      void LCD_init(void)
      {
       LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
       LCD_send_command(LCD_AC_AUTO_INCREMENT LCD_MOVE_DISENABLE);
       LCD_send_command(LCD_DISPLAY_ON LCD_CURSOR_OFF);
       LCD_send_command(LCD_CLEAR_SCREEN);
      }
      /********************************************************/
       
      void LCD_check_busy(void)   //检测LCD状态,看它是不是还在忙呢
      {
       do
        {
         LCD_EN=0;
         LCD_RS=0;
         LCD_RW=1;
         LCDIO=0xff;
         LCD_EN=1;
         }
         while(LCD_BUSY==1);
        
          LCD_EN=0;
      }
      /************LCD1602写命令*******************************/
      void LCD_send_command(uchar command)
      {
       LCD_check_busy();
       LCD_RS=LOW;
       LCD_RW=LOW;
       LCD_EN=HIGH;
       LCDIO=command;
       LCD_EN=LOW;
      }
      /********************************************************/
      /*****************LCD1602写数据**************************/
      void LCD_send_data(uchar dat)
      {
       LCD_check_busy();
       LCD_RS=HIGH;
       LCD_RW=LOW;
       LCD_EN=HIGH;
       LCDIO=dat;
       LCD_EN=LOW;
      }
      /********************************************************
       void LCD_write_char(uchar x,uchar y,uchar dat)
      {
           unsigned char address;
           if (y == LINE1) 
               address = LINE1_HEAD + x;
           else 
              address = LINE2_HEAD + x;
           LCD_send_command(address); 
          LCD_send_data(dat);
      }
      ******************LCD1602显示字符串*********************/
      void LCD_disp_string(uchar x,uchar y,uchar *Data)
      {
       if(y==LINE1)
       {
        if(x<LINE_LENGTH)
        {
         LCD_send_command(LINE1_HEAD+x);
         for(;x<LINE_LENGTH&&*Data!=''\0'';x++)
         {
          LCD_send_data(*(Data++));
         }
         if(*Data!=''\0'')
         {
          x=0;
          y=LINE2;
         }
        }
       }
       if(y==LINE2)
       {
        LCD_send_command(LINE2_HEAD+x);
        for(;x<LINE_LENGTH&&*Data!=''\0'';x++)
        {
         LCD_send_data(*(Data++));
        }
       }
      }
      /****************************************************************/
      /********************延时函数***********************************/
        
      /***************************************************************/
      void delay_ms(uint n)
      {
       uint i,j;
       for(i=n;i>0;i--)
          for(j=0;j<1140;j++)
          ;
      }
      /*********************************************************************/ 

⌨️ 快捷键说明

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