[文章]【HarmonyOS开发板试用】IOT板子点亮OLED

阅读量0
0
0
`

今天我们来点亮一下板载oled。

首先开启I2C的功能。
修改文件:vendorhisihi3861hi3861uildconfigusr_config.mk
  1. CONFIG_I2C_SUPPORT=y
复制代码


然后配置IO复用
修改文件:vendorhisihi3861hi3861appwifiiot_appinitapp_io_init.c
  1.     /* I2C MUX: */
  2. #ifdef CONFIG_I2C_SUPPORT
  3.     /* I2C IO复用也可以选择3/4; 9/10,根据产品设计选择 */
  4.     hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_13_I2C0_SDA);
  5.     hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_14_I2C0_SCL);
  6. #endif
复制代码

i2c写函数
  1. hi_u32 my_i2c_write(hi_i2c_idx id, hi_u16 device_addr, hi_u32 send_len)
  2. {
  3.     hi_u32 status;
  4.     hi_i2c_data es8311_i2c_data = { 0 };

  5.     es8311_i2c_data.send_buf = g_send_data;
  6.     es8311_i2c_data.send_len = send_len;
  7.     status = hi_i2c_write(id, device_addr, &es8311_i2c_data);
  8.     if (status != HI_ERR_SUCCESS) {
  9.         printf("===== Error: I2C write status = 0x%x! =====
  10. ", status);
  11.         return status;
  12.     }

  13.     return HI_ERR_SUCCESS;
  14. }
复制代码

oled初始化函数
  1. void led_init(void)
  2. {
  3.     OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
  4.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
  5.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
  6.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  7.         OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
  8.         OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness
  9.         OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  10.         OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  11.         OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
  12.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  13.         OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
  14.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  15.         OLED_WR_Byte(0x00,OLED_CMD);//-not offset
  16.         OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
  17.         OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
  18.         OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
  19.         OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  20.         OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
  21.         OLED_WR_Byte(0x12,OLED_CMD);
  22.         OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
  23.         OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
  24.         OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
  25.         OLED_WR_Byte(0x02,OLED_CMD);//
  26.         OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
  27.         OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
  28.         OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
  29.         OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
  30.         OLED_WR_Byte(0xAF,OLED_CMD);
  31.         OLED_Clear();

  32. }
复制代码

任务函数
  1. void my_oled_demo(void)
  2. {
  3.     //初始化
  4.     hi_i2c_init(HI_I2C_IDX_0, 100000); /* baudrate: 100000 */
  5.     led_init();
  6.     OLED_ShowString(0,16,"hello HarmonyOS",16);
  7.     OLED_Refresh();
  8. }
复制代码

最后附上效果图


`
IMG_20210310_224819.jpg

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友