【ESK32-360测评】+ OLED屏驱动
本帖最后由 jinglixixi 于 2020-8-8 00:07 编辑<p>ESK32-360开发板是一款外设资源十分丰富的开发板,因此要想找出一个空余的引脚是很困难的。手头有一个0.91' OLED 显示屏,打算在开发板上实现其驱动显示,在无奈之下,只好采用借鸡生蛋了,就是用LED1、LED2的GPIO口来驱动0.91' OLED 屏。</p>
<p>LED的接口电路如图1所示,可用LED1来接SCLK,用LED2来接SDIN。</p>
<p></p>
<p>图1 LED接口电路</p>
<p> </p>
<p>使LED1、LED2输出高低电平的定义语句为:</p>
<p>#define OLED_SCLK_Clr() GPIO_WriteOutBits(HTCFG_LED0, HTCFG_OUTPUT_LED0_GPIO_PIN, RESET);</p>
<p>#define OLED_SCLK_Set() GPIO_WriteOutBits(HTCFG_LED0, HTCFG_OUTPUT_LED0_GPIO_PIN, SET);</p>
<p>#define OLED_SDIN_Clr() GPIO_WriteOutBits(HTCFG_LED1, HTCFG_OUTPUT_LED1_GPIO_PIN, RESET);</p>
<p>#define OLED_SDIN_Set() GPIO_WriteOutBits(HTCFG_LED1, HTCFG_OUTPUT_LED1_GPIO_PIN, SET);</p>
<p>实现图2所示内容的主程序如下:</p>
<pre>
<code class="language-cpp">int main(void)
{
FlagStatus TmpStatus = RESET;
CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
HTCFG_OUTPUT_LED0_CLK(CKCUClock) = 1;
HTCFG_OUTPUT_LED1_CLK(CKCUClock) = 1;
HTCFG_OUTPUT_LED2_CLK(CKCUClock) = 1;
HTCFG_INPUT_WAKE_CLK(CKCUClock) = 1;
HTCFG_INPUT_KEY1_CLK(CKCUClock) = 1;
HTCFG_INPUT_KEY2_CLK(CKCUClock) = 1;
CKCUClock.Bit.AFIO = 1;
CKCUClock.Bit.BKP = 1;
CKCU_PeripClockConfig(CKCUClock, ENABLE);
if (PWRCU_CheckReadyAccessed() != PWRCU_OK)
{
while (1);
}
AFIO_GPxConfig(HTCFG_INPUT_WAKE_ID, HTCFG_INPUT_WAKE_AFIO_PIN, AFIO_MODE_1);
AFIO_GPxConfig(HTCFG_INPUT_KEY1_ID, HTCFG_INPUT_KEY1_AFIO_PIN, AFIO_MODE_DEFAULT);
AFIO_GPxConfig(HTCFG_INPUT_KEY2_ID, HTCFG_INPUT_KEY2_AFIO_PIN, AFIO_MODE_DEFAULT);
GPIO_DirectionConfig(HTCFG_WAKE, HTCFG_INPUT_WAKE_GPIO_PIN, GPIO_DIR_IN);
GPIO_DirectionConfig(HTCFG_KEY1, HTCFG_INPUT_KEY1_GPIO_PIN, GPIO_DIR_IN);
GPIO_DirectionConfig(HTCFG_KEY2, HTCFG_INPUT_KEY2_GPIO_PIN, GPIO_DIR_IN);
GPIO_PullResistorConfig(HTCFG_WAKE, HTCFG_INPUT_WAKE_GPIO_PIN, GPIO_PR_DOWN);
GPIO_PullResistorConfig(HTCFG_KEY1, HTCFG_INPUT_KEY1_GPIO_PIN, GPIO_PR_UP);
GPIO_PullResistorConfig(HTCFG_KEY2, HTCFG_INPUT_KEY2_GPIO_PIN, GPIO_PR_UP);
GPIO_InputConfig(HTCFG_WAKE, HTCFG_INPUT_WAKE_GPIO_PIN, ENABLE);
GPIO_InputConfig(HTCFG_KEY1, HTCFG_INPUT_KEY1_GPIO_PIN, ENABLE);
GPIO_InputConfig(HTCFG_KEY2, HTCFG_INPUT_KEY2_GPIO_PIN, ENABLE);
AFIO_GPxConfig(HTCFG_OUTPUT_LED0_ID, HTCFG_OUTPUT_LED0_AFIO_PIN, AFIO_MODE_DEFAULT);
AFIO_GPxConfig(HTCFG_OUTPUT_LED1_ID, HTCFG_OUTPUT_LED1_AFIO_PIN, AFIO_MODE_DEFAULT);
AFIO_GPxConfig(HTCFG_OUTPUT_LED2_ID, HTCFG_OUTPUT_LED2_AFIO_PIN, AFIO_MODE_DEFAULT);
GPIO_DirectionConfig(HTCFG_LED0, HTCFG_OUTPUT_LED0_GPIO_PIN, GPIO_DIR_OUT);
GPIO_DirectionConfig(HTCFG_LED1, HTCFG_OUTPUT_LED1_GPIO_PIN, GPIO_DIR_OUT);
GPIO_DirectionConfig(HTCFG_LED2, HTCFG_OUTPUT_LED2_GPIO_PIN, GPIO_DIR_OUT);
OLED_Init();
OLED_Clear();
OLED_ShowString(16,0, "HT32F1654",16);
OLED_ShowString(16,2, "OLED TEST",16);
while(1);
}
</code></pre>
<p></p>
<p>图2 OLED屏显示效果</p>
<p> </p>
<p>在添加汉字库和显示函数的情况下,其显示效果如图3所示。</p>
<p></p>
<p>图3 OLED屏菜单效果</p>
<p>产生显示效果的语句为:</p>
<p>OLED_Clear();</p>
<p>OLED_ShowCHinese(0,0,0); //澎湖湾</p>
<p>OLED_ShowCHinese(18,0,1); </p>
<p>OLED_ShowCHinese(36,0,2);</p>
<p>OLED_ShowString(0,2, "Player NO",16); </p>
<p> </p>
<p>对应的显示函数为:</p>
<pre>
<code class="language-cpp">void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk,OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk,OLED_DATA);
adder+=1;
}
}</code></pre>
<p> </p>
页:
[1]