基于51单片机的lcd1602滚动显示长英文代码
时间: 2023-07-28 14:07:05 浏览: 54
以下是基于51单片机的LCD1602滚动显示长英文代码的示例:
```c
#include <reg51.h>
#include <intrins.h>
#define LCD_RS P2_0 // LCD1602的RS引脚
#define LCD_RW P2_1 // LCD1602的RW引脚
#define LCD_E P2_2 // LCD1602的E引脚
#define LCD_DATA P0 // LCD1602的数据总线
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void LCD_WriteCmd(unsigned char cmd);
void LCD_WriteData(unsigned char dat);
void LCD_Init(void);
void LCD_Clear(void);
void LCD_ShowString(unsigned char x,unsigned char y,unsigned char *str);
void main(void)
{
unsigned char str[] = "This is a long English sentence that will be scrolled on the LCD1602. ";
unsigned char i, j, k;
LCD_Init(); // 初始化LCD1602
LCD_Clear(); // 清屏
while(1) {
for(i = 0; i < sizeof(str) - 16; i++) { // 从0开始滚动
LCD_ShowString(0, 0, &str[i]); // 在第一行显示滚动的字符串
for(j = 0; j < 10; j++) { // 控制滚动速度
for(k = 0; k < 100; k++) {
DelayMs(1);
}
}
}
}
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--) {
DelayUs2x(245);
DelayUs2x(245);
}
}
void LCD_WriteCmd(unsigned char cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = cmd;
LCD_E = 1;
_nop_();
LCD_E = 0;
}
void LCD_WriteData(unsigned char dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = dat;
LCD_E = 1;
_nop_();
LCD_E = 0;
}
void LCD_Init(void)
{
LCD_WriteCmd(0x38); // 8位数据接口,2行显示,5x7点阵字符
LCD_WriteCmd(0x0c); // 显示开,光标关,不闪烁
LCD_WriteCmd(0x06); // 光标右移,字符不动
LCD_WriteCmd(0x01); // 清屏
}
void LCD_Clear(void)
{
LCD_WriteCmd(0x01); // 清屏
}
void LCD_ShowString(unsigned char x,unsigned char y,unsigned char *str)
{
unsigned char i = 0;
if(x > 15 || y > 1) {
return;
}
LCD_WriteCmd(0x80 + y * 0x40 + x); // 设置光标位置
while(str[i] != '\0') {
LCD_WriteData(str[i++]); // 逐个显示字符
}
}
```
在这个示例代码中,我们使用了基于51单片机的LCD1602驱动程序,通过控制LCD1602的光标位置和显示内容来实现滚动显示。具体来说,我们定义了一个长的英文句子,并且将它逐个滚动显示在LCD1602的第一行。通过调整 `DelayMs()` 函数的参数可以控制滚动速度。