【GD32F310G-START评测】评测2: GD32F301驱动诺基亚5110LCD
<p>前端时间工作给耽搁了,现在才将测评报告发出来,实在是抱歉~</p><p>本次分享下用GD21F301驱动手头的一块闲置的LCD: NOKIA 5110,驱动这个LCD也是为了测评ADC模块做准备(将 ADC 采样结果显示到LCD).</p>
<p>网络上大家分享的这款LCD的驱动很多,但是GD32的很少, 所以我将51单片的驱动程序进行了移植</p>
<p> </p>
<p><span style="font-size:20px;"><strong>GPIO口分配</strong></span></p>
<p> </p>
<p></p>
<p>这里全部使用GPIOA口,由于开发板上的LED占用了PA1, 所以选择从PA2开始</p>
<p>GPIO配置成:</p>
<ul>
<li>输出模式</li>
<li>悬浮输出(无上拉下拉)</li>
<li>50MHz速度即可</li>
</ul>
<p>配置代码:</p>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre style="background:#555; padding:10px; color:#ddd !important;">
<code class="hljs language-cpp">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;
}</code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></div>
<p>配置完成后,将驱动文件中的 51引脚相关代码,替换成 GD32 GPIO的操作即可,我这里进行了宏定义</p>
<p> </p>
<pre>
<code class="language-cpp">#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);</code></pre>
<p>最终的驱动效果图</p>
<p></p>
<p> </p>
<p>由于我的 LCD 年代久远,所以屏幕有些轻微老化,看起来会有些拉丝的感觉,我试了给它供电从3.3v换到5v并没有改善这种情况,大家如果用的是比较新的 LCD, 应该没有问题。</p>
<p><strong>全部的代码,我上传到了 github, 大家有兴趣的可以下载使用</strong></p>
<pre>
<code>https://github.com/jwkongkong/GD32-NOKIA-5110</code></pre>
<p>希望这些驱动代码可以给大家平时的调试中带来便利,谢谢啦~</p>
<p><em>下期将分享ADC电压采集,从外部的压力传感器,通过放大滤波电路,输送到 GD32F301 的ADC输入口,并且将ADC 采样结果值显示到LCD上.</em></p>
<p> </p>
<p> </p>
这个LCD是有情怀的人才有的啦,估计五年前比较流行! <p>写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.</p>
lugl4313820 发表于 2022-6-18 11:58
这个LCD是有情怀的人才有的啦,估计五年前比较流行!
<p>是的,哈哈,放了好久,有点儿老化了</p>
qwe123z 发表于 2022-6-19 16:13
写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.
<p>谢谢鼓励~ 再接再厉</p>
qwe123z 发表于 2022-6-19 16:13
写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.
<p>可以多想一点词嘛,这样对作者尊重。注意一回复礼仪,希望下次回帖让人耳目一新!</p>
<p>谢谢分享,期待后续!</p>
页:
[1]