LCD1602滚动显示程序

2019-11-28 14:20发布

<p>**************************************LCD1602头文件*********************************/&nbsp;</p><p>#IFndef _LCD1602_H_<br> #define _LCD1602_H_<br> //输入方式设置<br> #define LCD_AC_AUTO_INCREMENT&nbsp; &nbsp;&nbsp;&nbsp;0x06&nbsp; &nbsp;//数据读、写操作后,AC自动增一<br> #define LCD_AC_AUTO_DECREASE&nbsp; &nbsp;&nbsp; &nbsp;0x04&nbsp; &nbsp;//数据读、写操作后,AC自动减一<br> #define LCD_MOVE_ENABLE&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;0x05&nbsp; &nbsp;//数据读、写操作,画面平移<br> #define LCD_MOVE_DISENABLE&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;0x04&nbsp; &nbsp;//数据读、写操作,画面不动<br> #define LCD_GO_HOME&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;0x02&nbsp; &nbsp;//AC=0,光标、画面回HOME位<br> <br> </p><p><br></p><p></p><p><br></p>
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
dfasda
1楼-- · 2019-11-28 20:10
 精彩回答 2  元偷偷看……
guanrui1202
2楼-- · 2019-11-29 01:10
/*************************以下是函数的申明部*************************/
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
#include &quot;LCD1602.h&quot;
/*******************主函数**********************************/
uchar string[]=&quot;     I LOVE YOU! &quot;;            //这里是要显示的字符
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==&#39;&#39;&#39;&#39;)
  {
   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  {
   LCD_send_command(LINE1_HEAD+x);
   for(;x   {
    LCD_send_data(*(Data++));
   }
   if(*Data!=&#39;&#39;&#39;&#39;)
   {
    x=0;
    y=LINE2;
   }
  }
}
if(y==LINE2)
{
  LCD_send_command(LINE2_HEAD+x);
  for(;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++)
    ;
}
/*********************************************************************/

一周热门 更多>