网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

复旦微电子 FM33LG0xx系列开发板—OLED以及电子时钟

时间:2023-01-13 14:17

人气:

作者:admin

标签: 微电子  开发板  OLED 

导读:复旦微电子推出的FM33LG0xx开发板免费试用活动,小伙伴们积极参与,并基于FM33LG0xx开发板进行开发,如下是参与者的开发过程和心得。FM33LG0xx系列开发板示意图FM33LG0xx开发板在引脚资源...

复旦微电子推出的FM33LG0xx开发板免费试用活动,小伙伴们积极参与,并基于FM33LG0xx开发板进行开发,如下是参与者的开发过程和心得。

FM33LG0xx系列开发板示意图

bc3bd8e4-9197-11ed-ad0d-dac502259ad0.jpgFM33LG0xx开发板在引脚资源的使用上是很有特点的,它既不是按走线的方便来提供引脚资源,也不是以Arduino接口的方式来提供引脚资源,而是按接口的类型,这就为使用者提供了极大的方便。由于该开发板在外设的配置上比较简单,因此有必要为它配上一个显示屏来观察输出信息。这里为它配置的是一款0.96寸的双色显示屏,它使用的是板上的I2C接口
bc483d64-9197-11ed-ad0d-dac502259ad0.png

图 1.显示效果

bc567212-9197-11ed-ad0d-dac502259ad0.png

图 2.I2C接口电路原理

该接口所使用的引脚为:

SCL---PA11

SDA---PA12

为便于以GPIO口来模拟I2C驱动,相关引脚输出高低电平的定义为:


#defineSCL_high FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_11)
#defineSCL_low FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_11)
#defineSDA_high FL_GPIO_SetOutputPin(GPIOA, FL_GPIO_PIN_12)
#defineSDA_low FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_12)

以模拟方式发送字节数据的函数为:

void Write_IIC_Byte(unsigned char IIC_Byte){ unsigned char i; unsigned char m,da; da=IIC_Byte; SCL_low; for(i=0;i<8;i++) { m=da; m=m&0x80; if(m==0x80) { SDA_high; } else SDA_low; da=da<<1; SCL_high; SCL_low; }}

为实现图1的显示效果,其主程序为:

int main(void){ MF_Clock_Init(); MF_SystemClock_Config(); FL_Init(); MF_Config_Init(); UserInit(); key_int(); led_int(); oled_app(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,"FM33LG0XX",16); OLED_ShowCHinese(20,2,0); OLED_ShowCHinese(36,2,1); OLED_ShowCHinese(52,2,2); OLED_ShowCHinese(68,2,3); OLED_ShowCHinese(84,2,4); OLED_ShowCHinese(100,2,5); OLED_ShowString(20,6,"jinglixixi",16); while(1);}

有了OLED屏的显示功能,后面再遇到显示问题时就方便许多。在FM33LG0xx开发板的内部,配有一个低功耗实时时钟日历(RTCC),并带有数字调校功能,其调校精度为+/-0.476ppm,将它与OLED屏的显示功能相结合,即可轻松地实现RTC电子时钟的功能。

bc6362c4-9197-11ed-ad0d-dac502259ad0.png

图 3.计时效果

bc74af98-9197-11ed-ad0d-dac502259ad0.png

图 4.RTC后备电源

由于在例程中提供了标准的RTC读取函数,故稍加修改即可完成RTC的读取及显示功能,修改后的读取函数为:

uint8_t RTC_GetRTCA(FL_RTCA_InitTypeDef *InitStructer){ uint8_t n, i; uint8_t Result = 1; uint32_t u,ut; FL_RTCA_InitTypeDef TempTime1; FL_RTCA_GetTime(RTCA, &TempTime1); u=((uint32_t *)(&TempTime1))[4]; OLED_ShowNumH(20,5,u,2,16); u=((uint32_t *)(&TempTime1))[5]; OLED_ShowNumH(44,5,u,2,16); u=((uint32_t *)(&TempTime1))[6]; OLED_ShowNumH(68,5,u,2,16); return Result;}

实现RTC计时功能的测试函数如下,它含有RTC的初始值设置及循环读取功能:

uint8_t RTC_GetRTCA(FL_RTCA_InitTypeDef *InitStructer){ uint8_t n, i; uint8_t Result = 1; uint32_t u,ut; FL_RTCA_InitTypeDef TempTime1; FL_RTCA_GetTime(RTCA, &TempTime1); u=((uint32_t *)(&TempTime1))[4]; OLED_ShowNumH(20,5,u,2,16); u=((uint32_t *)(&TempTime1))[5]; OLED_ShowNumH(44,5,u,2,16); u=((uint32_t *)(&TempTime1))[6]; OLED_ShowNumH(68,5,u,2,16); return Result;}

实现图3计时显示效果的主程序为:

int main(void){ MF_Clock_Init(); MF_SystemClock_Config(); FL_Init(); MF_Config_Init(); UserInit(); CDIF->CR= 0x02; oled_app(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,"FM33LG0XX",16); OLED_ShowCHinese(20,2,0); OLED_ShowCHinese(36,2,1); OLED_ShowCHinese(52,2,2); OLED_ShowCHinese(68,2,3); OLED_ShowCHinese(84,2,4); OLED_ShowCHinese(100,2,5); OLED_ShowString(20,6,"jinglixixi",16); FL_DelayMs(1000); OLED_ShowString(20,6," ",16); OLED_ShowString(20,5," : : ",16); Test_RTCA(); while(1) { LED0_TOG(); FL_DelayMs(1000); }}

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信