[AT32M412] 【AT-START-M412测评】+点亮SSD1306的OLED屏

[复制链接]
 楼主| 发表于 2025-6-15 20:49 | 显示全部楼层 |阅读模式
90745684ec0534eb5a.png
上一个贴的基础上增加OLED功能,使用I2C硬件驱动,参考官方的示例\AT32M412_416_Firmware_Library_V2.0.1\project\at_start_m412\examples\i2c\communication_poll
添加OLED驱动库函数,完成i2c发送函数映射
  1. i2c_handle_type hi2cx;

  2. uint8_t tx_buf[2] = {0x00, 0x00};
  3. // OLED 写数据
  4. void OLED_WriteData(u8 dat) {
  5.   tx_buf[0] = 0x40;
  6.   tx_buf[1] = dat;
  7.   i2c_master_transmit(&hi2cx, 0x78, tx_buf, 2, 0xFFFFFFF);
  8. }

  9. // OLED 写命令
  10. void OLED_WriteCMD(u8 cmd) {
  11.   tx_buf[0] = 0x00;
  12.   tx_buf[1] = cmd;
  13.   i2c_master_transmit(&hi2cx, 0x78, tx_buf, 2, 0xFFFFFFF);

  14. }
在主函数中实现简单的显示操作
  1. void disp_static(void)
  2. {
  3.                 u8 i;
  4.        
  5.                 for(i=0; i<5; i++)        WriteHZ16((u8)(i*16+24), 0,i);                //在第1行,显示汉字“科学小火箭”
  6.                 for(i=5; i<7; i++)        WriteHZ16((u8)((i-5)*16),2,i);                //在第2行,显示汉字“设置”
  7.                 for(i=9; i<11; i++)        WriteHZ16((u8)((i-7)*16),2,i);                //在第2行,显示汉字“温度”
  8.                
  9.                 WriteHZ16((u8)(7*16),2,13);                                       //在第2行末尾,显示“℃”
  10.                 WriteHZ16((u8)(7*16),4,13);                                       //在第3行末尾,显示“℃”
  11.        
  12.                 for(i=7; i<11; i++)        WriteHZ16((u8)((i-7)*16),4,i);                //在第3行,显示汉字“当前温度”
  13.                
  14.                 WriteHZ16(0,6,11);                                                //在第4行,显示汉字“第”
  15.                 WriteHZ16(48,6,12);                                               //在第4行,显示汉字“天”
  16. }


  17. /**
  18.   * [url=home.php?mod=space&uid=247401]@brief[/url]  main function.
  19.   * @param  none
  20.   * @retval none
  21.   */
  22. int main(void)
  23. {
  24.   system_clock_config();

  25.   at32_board_init();
  26.   button_exint_init();
  27.   
  28.   hi2cx.i2cx = I2Cx_PORT;
  29.   i2c_config(&hi2cx);
  30.   
  31.   uart_print_init(115200);
  32.   printf("at32 mcu initialize ok.\r\n");
  33.   Initialize_OLED();
  34.   disp_static();
  35.   while(1)
  36.   {
  37.     at32_led_toggle(LED2);
  38.     delay_ms(g_speed * DELAY);
  39.     at32_led_toggle(LED3);
  40.     delay_ms(g_speed * DELAY);
  41.     at32_led_toggle(LED4);
  42.     delay_ms(g_speed * DELAY);
  43.   }
  44. }
79392684ec1333d5be.jpg
下一步,增加ADC检测功能,实现NTC温度检测
敬请期待

发表于 2025-6-15 23:21 | 显示全部楼层
显示模块是不是也可以移植标准的图形库文件,流程应该不算繁琐
 楼主| 发表于 2025-6-16 11:16 | 显示全部楼层
szt1993 发表于 2025-6-15 23:21
显示模块是不是也可以移植标准的图形库文件,流程应该不算繁琐

是的,可以。
发表于 2025-6-16 17:01 | 显示全部楼层
楼主是I2C驱动的吗,是移植的标准图形库吗?有用到什么开源的UI吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2045

主题

16347

帖子

222

粉丝
快速回复 返回顶部 返回列表