在上一个贴的基础上增加OLED功能,使用I2C硬件驱动,参考官方的示例\AT32M412_416_Firmware_Library_V2.0.1\project\at_start_m412\examples\i2c\communication_poll
添加OLED驱动库函数,完成i2c发送函数映射
- i2c_handle_type hi2cx;
- uint8_t tx_buf[2] = {0x00, 0x00};
- // OLED 写数据
- void OLED_WriteData(u8 dat) {
- tx_buf[0] = 0x40;
- tx_buf[1] = dat;
- i2c_master_transmit(&hi2cx, 0x78, tx_buf, 2, 0xFFFFFFF);
- }
- // OLED 写命令
- void OLED_WriteCMD(u8 cmd) {
- tx_buf[0] = 0x00;
- tx_buf[1] = cmd;
- i2c_master_transmit(&hi2cx, 0x78, tx_buf, 2, 0xFFFFFFF);
- }
在主函数中实现简单的显示操作
- void disp_static(void)
- {
- u8 i;
-
- for(i=0; i<5; i++) WriteHZ16((u8)(i*16+24), 0,i); //在第1行,显示汉字“科学小火箭”
- for(i=5; i<7; i++) WriteHZ16((u8)((i-5)*16),2,i); //在第2行,显示汉字“设置”
- for(i=9; i<11; i++) WriteHZ16((u8)((i-7)*16),2,i); //在第2行,显示汉字“温度”
-
- WriteHZ16((u8)(7*16),2,13); //在第2行末尾,显示“℃”
- WriteHZ16((u8)(7*16),4,13); //在第3行末尾,显示“℃”
-
- for(i=7; i<11; i++) WriteHZ16((u8)((i-7)*16),4,i); //在第3行,显示汉字“当前温度”
-
- WriteHZ16(0,6,11); //在第4行,显示汉字“第”
- WriteHZ16(48,6,12); //在第4行,显示汉字“天”
- }
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] main function.
- * @param none
- * @retval none
- */
- int main(void)
- {
- system_clock_config();
- at32_board_init();
- button_exint_init();
-
- hi2cx.i2cx = I2Cx_PORT;
- i2c_config(&hi2cx);
-
- uart_print_init(115200);
- printf("at32 mcu initialize ok.\r\n");
- Initialize_OLED();
- disp_static();
- while(1)
- {
- at32_led_toggle(LED2);
- delay_ms(g_speed * DELAY);
- at32_led_toggle(LED3);
- delay_ms(g_speed * DELAY);
- at32_led_toggle(LED4);
- delay_ms(g_speed * DELAY);
- }
- }
下一步,增加ADC检测功能,实现NTC温度检测
敬请期待
|