在 PIC 上试验 ST7920 128×64 图形 LCD





5.00/5 (2投票s)
在 PIC 上试验 ST7920 128×64 图形 LCD
这是一个单色 128×64 图形 LCD,使用 ST7920 控制器,我从 eBay 购买的。
该模块使用 20 针的标准 2.54mm 连接器,使其易于在面包板上进行原型开发。
通信模式
根据数据手册,支持以下通信模式:
- 8 位模式。数据或指令字节通过引脚 DB7-DB0 传输。
- 4 位模式。数据或指令字节分为两部分。较高的 4 位将通过 DB7-DB4 传输,然后是较低的 4 位。DB3-DB0 引脚将不使用,应连接到地。
- 串行模式。通过将 PSB 引脚拉低来实现。启用后,通信总共只需要 4 个引脚。串行模式仅支持写入数据。
不幸的是,我购买的板子的 PSB 引脚永久连接到 VCC。因此,只能进行并行通信。为了减少所需的输出引脚数量,我选择了 4 位模式,而不是 8 位模式。
LCD 支持图形和文本模式。
- 文本模式下最多 16 个字符 x 4 行。
- 图形模式下 128×64 分辨率。
初始化代码
以下代码执行 LCD 初始化,并配置文本模式下的 4 位通信。
void LCD_Init(void)
{
LCD_REST=1;
LCD_REST=0;
delay_ms(5);
LCD_REST=1;
delay_ms(50);
LCD_WriteCommand(0b00100000);
delay_ms(5);
LCD_WriteCommand(0b00100000);
delay_ms(5);
LCD_WriteCommand(0b00001100);
delay_ms(5);
LCD_WriteCommand(0x01);
delay_ms(5);
LCD_WriteCommand(0x06);
delay_ms(5);
LCD_WriteCommand(0b00000010);
delay_ms(5);
}
LCD 初始化后,以下函数将在 LCD 上显示一个 字符串
。
void LCD_TextDisplayString(unsigned char line, char* string)
{
unsigned char addr,i;
if(line==1)
addr=0x80; //The first line address
else if(line==2)
addr=0x90; //The second line address
else if(line==3)
addr=0x88; //The third line address
else if(line==4)
addr=0x98; //The fourth line address
LCD_WriteCommand(addr);
for(i=0;i<16;i++)
LCD_WriteData(*string++);
}
这是显示四行文本时的样子。
显示图形
尽管屏幕分辨率很大,但默认文本模式由于字体较粗,只能让我显示最多 64 个字符在屏幕上。我的下一个尝试是使用图形模式,以便我可以使用我的 自定义字体 并显示更多字符。以下代码显示了如何在 LCD 上启用和禁用图形模式。
void LCD_EnableGraphics(void)
{
LCD_WriteCommand(0x20);
delay_ms(1);
LCD_WriteCommand(0x24);
delay_ms(1);
LCD_WriteCommand(0x26);
delay_ms(1);
}
void LCD_DisableGraphics(void)
{
LCD_WriteCommand(0x20);
delay_ms(1);
}
与 Nokia 5110 LCD 类似,此 LCD 上的每个 8 个像素将在显示内存空间中消耗一个字节。有了这个知识,我能够快速使用我的自定义 5×7 位图字体并显示更多字符。下图显示了显示与 PIC24FJ64GA002 接口的各种传感器信息的显示屏。它可以显示最多 16×8=128 个字符。
我在该 LCD 上成功显示的各种图形。