这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 国产MCU» 灵动微MM32G0001A6T驱动IIC-OLED

共1条 1/1 1 跳转至

灵动微MM32G0001A6T驱动IIC-OLED

专家
2024-01-13 17:32:57 打赏

前面我介绍了MM32G0001A6T的ADC功能,为了后续测试ADC功能、显示测试结果,先准备下显示方面的处理。对于SOP8封装的MM32G0001A6T单片机,2和4是电源引脚,1和5是烧录用引脚,不敢碰,所以可供使用的引脚有8、7、6、3。为了驱动OLED显示,准备使用6和3引脚,使用软件模拟方式驱动IIC的OLED。

驱动OLED需要的资源有点大,MM32G0001A6T有16KFlash,2KRAM,问题应该不大。程序主要处理代码如下:


#define _MAIN_C_ #include "platform.h" #include "main.h" void GPIO_Configure(uint16_t PINn) { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = PINn; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_WriteBit(GPIOA, PINn, Bit_SET); } void GPIO_IO_Toggle(GPIO_TypeDef *GPIOn, uint16_t PINn) { if (Bit_RESET == GPIO_ReadOutputDataBit(GPIOn, PINn)) { GPIO_SetBits(GPIOn, PINn); } else { GPIO_ResetBits(GPIOn, PINn); } } void GPIO_LED_Toggle_Sample(uint16_t PINn) { GPIO_Configure(PINn); while (1) { GPIO_IO_Toggle(GPIOA, PINn); PLATFORM_DelayMS(500); } } int main(void) { // 初始化四通滴答器 PLATFORM_Init(); // 初始化OLED用接口 OLED_Init(); // 清除屏幕 OLED_Clear(0); // 测试:显示信息 GUI_ShowString(0, 0, (uint8_t*)"Start test ...", 8, 1); GUI_ShowString(0, 8, (uint8_t*)"Start test ...", 16, 1); while (1) { //GPIO_LED_Toggle_Sample(GPIO_Pin_3); PLATFORM_DelayMS(500); } }

程序中使用了USART2的TX作为串口输出用,主要是为了打印调试信息。这里没有使用USART1,是因为考虑到ADC测试,以及USART1占用了下载口,为了避免出现无法再次下载,必须避开SWCLK和SWDIO两个引脚。

显示效果:

1.png

串口输出信息:

2.png代码打包(不包括库及驱动文件,你可以自行去灵动微官网下载):

oled.zip




关键词: 菜鸟学单片机 MM32G0001A6T OLED

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]