前端时间工作给耽搁了,现在才将测评报告发出来,实在是抱歉~
本次分享下用GD21F301驱动手头的一块闲置的LCD: NOKIA 5110,驱动这个LCD也是为了测评ADC模块做准备(将 ADC 采样结果显示到LCD).
网络上大家分享的这款LCD的驱动很多,但是GD32的很少, 所以我将51单片的驱动程序进行了移植
GPIO口分配
这里全部使用GPIOA口,由于开发板上的LED占用了PA1, 所以选择从PA2开始
GPIO配置成:
配置代码:
void LCD_GPIO_INIT(void) {
/* enable the LCD clock */
rcu_periph_clock_enable(LCD_CLOCK);
// RST
gpio_mode_set(LCD_RST_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LCD_RST_GPIO_PIN);
gpio_output_options_set(LCD_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LCD_RST_GPIO_PIN);
GPIO_BC(LCD_RST_GPIO_PORT) = LCD_RST_GPIO_PIN;
// CE
gpio_mode_set(LCD_CE_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LCD_CE_GPIO_PIN);
gpio_output_options_set(LCD_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LCD_CE_GPIO_PIN);
GPIO_BC(LCD_CE_GPIO_PORT) = LCD_CE_GPIO_PIN;
// DC
gpio_mode_set(LCD_DC_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LCD_DC_GPIO_PIN);
gpio_output_options_set(LCD_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LCD_DC_GPIO_PIN);
GPIO_BC(LCD_DC_GPIO_PORT) = LCD_DC_GPIO_PIN;
// DIN
gpio_mode_set(LCD_DIN_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LCD_DIN_GPIO_PIN);
gpio_output_options_set(LCD_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LCD_DIN_GPIO_PIN);
GPIO_BC(LCD_DIN_GPIO_PORT) = LCD_DIN_GPIO_PIN;
// CLK
gpio_mode_set(LCD_CLK_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LCD_CLK_GPIO_PIN);
gpio_output_options_set(LCD_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LCD_CLK_GPIO_PIN);
GPIO_BC(LCD_CLK_GPIO_PORT) = LCD_CLK_GPIO_PIN;
}
配置完成后,将驱动文件中的 51引脚相关代码,替换成 GD32 GPIO的操作即可,我这里进行了宏定义
#define LCD_CE_H gpio_bit_set(LCD_CE_GPIO_PORT, LCD_CE_GPIO_PIN);
#define LCD_CE_L gpio_bit_reset(LCD_CE_GPIO_PORT, LCD_CE_GPIO_PIN);
#define LCD_RST_H gpio_bit_set(LCD_RST_GPIO_PORT, LCD_RST_GPIO_PIN);
#define LCD_RST_L gpio_bit_reset(LCD_RST_GPIO_PORT, LCD_RST_GPIO_PIN);
#define LCD_DC_H gpio_bit_set(LCD_DC_GPIO_PORT, LCD_DC_GPIO_PIN);
#define LCD_DC_L gpio_bit_reset(LCD_DC_GPIO_PORT, LCD_DC_GPIO_PIN);
#define LCD_DIN_H gpio_bit_set(LCD_DIN_GPIO_PORT, LCD_DIN_GPIO_PIN);
#define LCD_DIN_L gpio_bit_reset(LCD_DIN_GPIO_PORT, LCD_DIN_GPIO_PIN);
#define LCD_CLK_H gpio_bit_set(LCD_CLK_GPIO_PORT, LCD_CLK_GPIO_PIN);
#define LCD_CLK_L gpio_bit_reset(LCD_CLK_GPIO_PORT, LCD_CLK_GPIO_PIN);
最终的驱动效果图
由于我的 LCD 年代久远,所以屏幕有些轻微老化,看起来会有些拉丝的感觉,我试了给它供电从3.3v换到5v并没有改善这种情况,大家如果用的是比较新的 LCD, 应该没有问题。
全部的代码,我上传到了 github, 大家有兴趣的可以下载使用
https://github.com/jwkongkong/GD32-NOKIA-5110
希望这些驱动代码可以给大家平时的调试中带来便利,谢谢啦~
下期将分享ADC电压采集,从外部的压力传感器,通过放大滤波电路,输送到 GD32F301 的ADC输入口,并且将ADC 采样结果值显示到LCD上.
引用: lugl4313820 发表于 2022-6-18 11:58 这个LCD是有情怀的人才有的啦,估计五年前比较流行!
是的,哈哈,放了好久,有点儿老化了
引用: qwe123z 发表于 2022-6-19 16:13 写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.
谢谢鼓励~ 再接再厉
引用: qwe123z 发表于 2022-6-19 16:13 写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.
可以多想一点词嘛,这样对作者尊重。注意一回复礼仪,希望下次回帖让人耳目一新!