358|0

446

帖子

0

资源

一粒金砂(高级)

【ESK32-360测评】+ OLED屏驱动

本帖最后由 jinglixixi 于 2020-8-8 00:07 编辑

ESK32-360开发板是一款外设资源十分丰富的开发板,因此要想找出一个空余的引脚是很困难的。手头有一个0.91' OLED 显示屏,打算在开发板上实现其驱动显示,在无奈之下,只好采用借鸡生蛋了,就是用LED1、LED2的GPIO口来驱动0.91' OLED 屏。

LED的接口电路如图1所示,可用LED1来接SCLK,用LED2来接SDIN。

image-20200807234432-1.png

图1  LED接口电路

 

使LED1、LED2输出高低电平的定义语句为:

#define OLED_SCLK_Clr() GPIO_WriteOutBits(HTCFG_LED0, HTCFG_OUTPUT_LED0_GPIO_PIN, RESET);

#define OLED_SCLK_Set() GPIO_WriteOutBits(HTCFG_LED0, HTCFG_OUTPUT_LED0_GPIO_PIN, SET);

#define OLED_SDIN_Clr() GPIO_WriteOutBits(HTCFG_LED1, HTCFG_OUTPUT_LED1_GPIO_PIN, RESET);

#define OLED_SDIN_Set() GPIO_WriteOutBits(HTCFG_LED1, HTCFG_OUTPUT_LED1_GPIO_PIN, SET);

实现图2所示内容的主程序如下:

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

}

image-20200807234432-2.png

图2  OLED屏显示效果

 

在添加汉字库和显示函数的情况下,其显示效果如图3所示。

image-20200807234433-3.png

图3  OLED屏菜单效果

产生显示效果的语句为:

OLED_Clear();

OLED_ShowCHinese(0,0,0);  //澎湖湾

OLED_ShowCHinese(18,0,1); 

OLED_ShowCHinese(36,0,2);

OLED_ShowString(0,2, "Player NO",16);        

 

对应的显示函数为:

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[2*no][t],OLED_DATA);
                                     adder+=1;
        }       
        OLED_Set_Pos(x,y+1);    
        for(t=0;t<16;t++)
        {       
                                     OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
                                     adder+=1;
        }                                        
}

 


回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/7 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表