51单片机lcd1602垂直滚动代码
时间: 2023-07-23 08:03:29 浏览: 96
51单片机LCD1602滚动显示
5星 · 资源好评率100%
以下是51单片机LCD1602垂直滚动代码:
```c
#include <reg51.h>
#include <intrins.h>
#define LCD1602_DB P0
sbit LCD1602_RS = P2^6;
sbit LCD1602_RW = P2^5;
sbit LCD1602_EN = P2^7;
void delay(unsigned int n)
{
unsigned int i;
while (n--)
{
for (i = 0; i < 125; ++i)
;
}
}
void lcd1602_write_cmd(unsigned char cmd)
{
LCD1602_RS = 0; // 选择指令寄存器
LCD1602_RW = 0; // 写操作
LCD1602_EN = 1;
LCD1602_DB = cmd;
_nop_();
_nop_();
LCD1602_EN = 0;
delay(5);
}
void lcd1602_write_data(unsigned char dat)
{
LCD1602_RS = 1; // 选择数据寄存器
LCD1602_RW = 0; // 写操作
LCD1602_EN = 1;
LCD1602_DB = dat;
_nop_();
_nop_();
LCD1602_EN = 0;
delay(5);
}
void lcd1602_init()
{
lcd1602_write_cmd(0x38); // 8位数据总线,2行显示,5x8点阵字符
lcd1602_write_cmd(0x0c); // 开显示,无光标,不闪烁
lcd1602_write_cmd(0x06); // 光标右移,字符不移动
lcd1602_write_cmd(0x01); // 清屏
}
void lcd1602_display_string(unsigned char x, unsigned char y, unsigned char *str)
{
unsigned char i;
if (x < 16)
{
if (y == 0)
{
lcd1602_write_cmd(0x80 + x); // 第一行
}
else
{
lcd1602_write_cmd(0x80 + 0x40 + x); // 第二行
}
}
while (*str != '\0')
{
lcd1602_write_data(*str++);
}
}
void lcd1602_scroll_string(unsigned char x, unsigned char y, unsigned char *str)
{
unsigned char i, j;
while (*str != '\0')
{
if (x < 16)
{
if (y == 0)
{
lcd1602_write_cmd(0x80 + x); // 第一行
}
else
{
lcd1602_write_cmd(0x80 + 0x40 + x); // 第二行
}
}
for (i = 0; i < 16 && *str != '\0'; ++i)
{
lcd1602_write_data(*str++);
}
if (*str != '\0')
{
for (j = 0; j < 16; ++j)
{
lcd1602_write_cmd(0x18); // 屏幕向上滚动
delay(100);
}
}
}
}
void main()
{
unsigned char str[] = "Hello, World! This is a scroll demo.";
lcd1602_init();
lcd1602_scroll_string(0, 0, str);
while (1)
;
}
```
这个代码使用了51单片机控制LCD1602显示屏,并实现了垂直滚动字幕的功能。在主函数中,调用了`lcd1602_scroll_string`函数来滚动字符串。该函数会先显示屏上显示一行,然后将第二行向上滚动,并在第二行显示下一个字符串。当第二行滚到底部时,将屏幕向上滚动一行,以此类推。
阅读全文