51单片机lcd1602上下滚动代码
时间: 2023-10-07 15:05:47 浏览: 19
下面是51单片机LCD1602上下滚动代码,可以参考:
```c
#include<reg52.h>
#include<intrins.h>
#define LCD_data P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
void delay_ms(unsigned int x);
void Write_com(unsigned char com);
void Write_data(unsigned char date);
void Init_LCD();
void Display(unsigned char row, unsigned char column, unsigned char *string);
void main()
{
unsigned char string1[]="I Love MCU";
unsigned char string2[]="www.51mcu.net";
unsigned char i,j;
Init_LCD();
while(1)
{
for(i=0;i<16;i++)
{
Display(1,i,string1); //第一行显示字符串1
delay_ms(300);
Write_com(0x01); //清屏
}
for(i=0;i<16;i++)
{
Display(2,i,string2); //第二行显示字符串2
delay_ms(300);
Write_com(0x01); //清屏
}
//字符串1上下滚动
for(i=0;i<15;i++)
{
for(j=0;j<16;j++)
{
Display(1,j,string1+i); //第一行显示字符串1
delay_ms(300);
Write_com(0x01); //清屏
}
}
//字符串2上下滚动
for(i=0;i<15;i++)
{
for(j=0;j<16;j++)
{
Display(2,j,string2+i); //第二行显示字符串2
delay_ms(300);
Write_com(0x01); //清屏
}
}
}
}
//延时函数
void delay_ms(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<125;j++);
}
//写命令到LCD
void Write_com(unsigned char com)
{
RS=0;
RW=0;
LCD_data=com;
EN=1;
_nop_();
EN=0;
}
//写数据到LCD
void Write_data(unsigned char date)
{
RS=1;
RW=0;
LCD_data=date;
EN=1;
_nop_();
EN=0;
}
//初始化LCD
void Init_LCD()
{
Write_com(0x38); //8位数据,双行,5*7点阵
Write_com(0x0c); //显示开,无光标,不闪烁
Write_com(0x06); //写入后地址加1,不移动屏幕
Write_com(0x01); //清屏
}
//显示字符串
void Display(unsigned char row, unsigned char column, unsigned char *string)
{
unsigned char i=0;
if(row==1)
Write_com(0x80+column); //第一行
else
Write_com(0xc0+column); //第二行
while(string[i]!='\0')
{
Write_data(string[i]);
i++;
}
}
```
具体实现上下滚动的部分是在 for 循环中,通过改变字符串的指针实现的。
阅读全文