[经验分享] 【GD32F310G-START评测】评测2: GD32F301驱动诺基亚5110LCD

cjwmusic   2022-6-18 02:09 楼主

前端时间工作给耽搁了,现在才将测评报告发出来,实在是抱歉~

本次分享下用GD21F301驱动手头的一块闲置的LCD: NOKIA 5110,驱动这个LCD也是为了测评ADC模块做准备(将 ADC 采样结果显示到LCD).

网络上大家分享的这款LCD的驱动很多,但是GD32的很少, 所以我将51单片的驱动程序进行了移植

 

GPIO口分配

 

Untitled.png

这里全部使用GPIOA口,由于开发板上的LED占用了PA1, 所以选择从PA2开始

GPIO配置成:

  • 输出模式
  • 悬浮输出(无上拉下拉)
  • 50MHz速度即可

配置代码:

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);

最终的驱动效果图

Untitled (1).png

 

由于我的 LCD 年代久远,所以屏幕有些轻微老化,看起来会有些拉丝的感觉,我试了给它供电从3.3v换到5v并没有改善这种情况,大家如果用的是比较新的 LCD, 应该没有问题。

全部的代码,我上传到了 github, 大家有兴趣的可以下载使用

https://github.com/jwkongkong/GD32-NOKIA-5110

希望这些驱动代码可以给大家平时的调试中带来便利,谢谢啦~

下期将分享ADC电压采集,从外部的压力传感器,通过放大滤波电路,输送到 GD32F301 的ADC输入口,并且将ADC 采样结果值显示到LCD上.

 

 

回复评论 (6)

这个LCD是有情怀的人才有的啦,估计五年前比较流行!
点赞  2022-6-18 11:58

写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.

点赞  2022-6-19 16:13
引用: lugl4313820 发表于 2022-6-18 11:58 这个LCD是有情怀的人才有的啦,估计五年前比较流行!

是的,哈哈,放了好久,有点儿老化了

点赞  2022-6-21 04:10
引用: qwe123z 发表于 2022-6-19 16:13 写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.

谢谢鼓励~  再接再厉

点赞  2022-6-21 04:11
引用: qwe123z 发表于 2022-6-19 16:13 写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.

可以多想一点词嘛,这样对作者尊重。注意一回复礼仪,希望下次回帖让人耳目一新!

点赞  2022-6-21 07:38

谢谢分享,期待后续!

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-6-22 19:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复