【复旦微电子FM33LG0xx开发板免费试用】+OLED屏的显示驱动及其电子时钟 - 复旦微MCU爱好者天地 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com)
FM33LG0xx开发板在引脚资源的使用上是很有特点的,它既不是按走线的方便来提供引脚资源,也不是以Arduino接口的方式来提供引脚资源,而是按接口的类型,这就为使用通过了极大的方便。 由于该开发板在外设的配置上比较简单,因此有必要为它配上一个显示屏来观察输出信息。这里为它配置的是一款0.96寸的双色显示屏,它使用的是板上的I2C接口。 图1 显示效果 图2 I2C接口
该接口所使用的引脚为: SCL---PA11 SDA---PA12 为便于以GPIO口来模拟I2C驱动,相关引脚输出高低电平的定义为: - #define
- SCL_high FL_GPIO_SetOutputPin(GPIOA,
- FL_GPIO_PIN_11)
- #define
- SCL_low FL_GPIO_ResetOutputPin(GPIOA,
- FL_GPIO_PIN_11)
- #define
- SDA_high FL_GPIO_SetOutputPin(GPIOA, FL_GPIO_PIN_12)
- #define
- SDA_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电子时钟的功能。 图3 计时效果 图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的初始值设置及循环读取功能: - void Test_RTCA(void)
- {
- FL_RTCA_InitTypeDef InitTime;
- FL_RTCA_InitTypeDef GetTime;
- RTCA_Init();
- InitTime.year = 0x22;
- InitTime.month = 0x12;
- InitTime.day = 0x12;
- InitTime.week = 0x01;
- InitTime.hour = 0x08;
- InitTime.minute = 0x30;
- InitTime.second = 0x00;
- RTC_SetRTCA(&InitTime);
- FL_DelayMs(1000);
- while(1)
- {
- RTC_GetRTCA(&GetTime);
- FL_DelayMs(1000);
- }
- }
复制代码实现图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);
- }
- }
复制代码
|