51单片机驱动LCD12864显示文字
时间: 2023-11-28 08:03:49 浏览: 95
要驱动LCD12864显示文字,可以使用51单片机的IO口和LCD12864的控制信号线,以及LCD12864的驱动芯片ST7920。以下是一个简单的示例代码,可以实现在LCD12864上显示一段文字:
```c
#include <reg51.h>
#define LCD12864_RS P0_0 // RS信号
#define LCD12864_RW P0_1 // RW信号
#define LCD12864_EN P0_2 // EN信号
#define LCD12864_CS1 P0_3 // CS1信号
#define LCD12864_CS2 P0_4 // CS2信号
void delay(int time)
{
int i, j;
for (i = 0; i < time; i++)
for (j = 0; j < 1275; j++);
}
void write_cmd(unsigned char cmd)
{
LCD12864_RS = 0;
LCD12864_RW = 0;
LCD12864_EN = 1;
P2 = cmd;
delay(1);
LCD12864_EN = 0;
}
void write_data(unsigned char dat)
{
LCD12864_RS = 1;
LCD12864_RW = 0;
LCD12864_EN = 1;
P2 = dat;
delay(1);
LCD12864_EN = 0;
}
void lcd_init()
{
write_cmd(0x30);
delay(5);
write_cmd(0x30);
delay(1);
write_cmd(0x30);
delay(1);
write_cmd(0x38);
write_cmd(0x08);
write_cmd(0x01);
write_cmd(0x06);
write_cmd(0x0c);
}
void lcd_clear()
{
write_cmd(0x30);
write_cmd(0x01);
}
void lcd_display_string(unsigned char x, unsigned char y, unsigned char *s)
{
unsigned char i;
if (y == 0)
{
write_cmd(0x80 + x);
}
else
{
write_cmd(0x80 + 0x40 + x);
}
for (i = 0; s[i] != '\0'; i++)
{
write_data(s[i]);
}
}
void main()
{
lcd_init();
lcd_clear();
lcd_display_string(0, 0, "Hello, world!");
while (1);
}
```
在这个示例代码中,通过P0口控制LCD12864的控制信号线,通过P2口发送命令和数据。在`lcd_init`函数中,首先发送三次0x30命令,然后发送0x38命令设置显示模式,0x08命令关闭显示,0x01命令清屏,0x06命令设置光标移动方向,0x0c命令开启显示。在`lcd_clear`函数中,发送0x01命令清屏。在`lcd_display_string`函数中,根据传入的参数x和y设置光标位置,然后循环发送字符串中的每个字符。最后在主函数中初始化LCD并显示一段文字。
阅读全文