找回密码
 立即注册

只需一步,快速开始

搜索

复旦微电子FM33LG0xx开发板——OLED屏的显示驱动及其电子时钟

0
回复
1436
查看
[复制链接]

177

主题

354

帖子

3121

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3121
QQ
2023-1-4 08:52:03 显示全部楼层 |阅读模式
【复旦微电子FM33LG0xx开发板免费试用】+OLED屏的显示驱动及其电子时钟 - 复旦微MCU爱好者天地 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com)


FM33LG0xx开发板在引脚资源的使用上是很有特点的,它既不是按走线的方便来提供引脚资源,也不是以Arduino接口的方式来提供引脚资源,而是按接口的类型,这就为使用通过了极大的方便。
由于该开发板在外设的配置上比较简单,因此有必要为它配上一个显示屏来观察输出信息。这里为它配置的是一款0.96寸的双色显示屏,它使用的是板上的I2C接口。
图1 显示效果
图2 I2C接口

该接口所使用的引脚为:
SCL---PA11
SDA---PA12
为便于以GPIO口来模拟I2C驱动,相关引脚输出高低电平的定义为:
  1. #define
  2. SCL_high FL_GPIO_SetOutputPin(GPIOA,
  3. FL_GPIO_PIN_11)

  4. #define
  5. SCL_low FL_GPIO_ResetOutputPin(GPIOA,
  6. FL_GPIO_PIN_11)

  7. #define
  8. SDA_high FL_GPIO_SetOutputPin(GPIOA, FL_GPIO_PIN_12)

  9. #define
  10. SDA_low FL_GPIO_ResetOutputPin(GPIOA,
  11. FL_GPIO_PIN_12)
复制代码

以模拟方式发送字节数据的函数为:
  1. void Write_IIC_Byte(unsigned char IIC_Byte)
  2. {
  3.     unsigned char i;
  4.     unsigned char m,da;
  5.     da=IIC_Byte;
  6.     SCL_low;
  7.     for(i=0;i<8;i++)
  8.     {
  9.         m=da;
  10.         m=m&0x80;
  11.         if(m==0x80)
  12.         {
  13.             SDA_high;
  14.         }
  15.         else   
  16.         SDA_low;
  17.         da=da<<1;
  18.         SCL_high;
  19.         SCL_low;
  20.      }
  21. }
复制代码
为实现图1的显示效果,其主程序为:
  1. int main(void)
  2. {
  3.     MF_Clock_Init();
  4.     MF_SystemClock_Config();
  5.     FL_Init();
  6.     MF_Config_Init();
  7.     UserInit();
  8.     key_int();
  9.     led_int();
  10.     oled_app();
  11.     OLED_Init();
  12.     OLED_Clear();
  13.     OLED_ShowString(20,0,"FM33LG0XX",16);
  14.     OLED_ShowCHinese(20,2,0);
  15.     OLED_ShowCHinese(36,2,1);
  16.     OLED_ShowCHinese(52,2,2);
  17.     OLED_ShowCHinese(68,2,3);
  18.     OLED_ShowCHinese(84,2,4);
  19.     OLED_ShowCHinese(100,2,5);
  20.     OLED_ShowString(20,6,"jinglixixi",16);
  21.     while(1);
  22. }
复制代码
有了OLED屏的显示功能,后面再遇到显示问题时就方便许多。
在FM33LG0xx开发板的内部,配有一个低功耗实时时钟日历(RTCC),并带有数字调教功能,其调校精度为+/-0.476ppm,将它与OLED屏的显示功能相结合,即可轻松地实现RTC电子时钟的功能。
图3 计时效果
图4 RTC后备电源
由于在例程中提供了标准的RTC读取函数,故稍加修改即可完成RTC的读取及显示功能,修改后的读取函数为:
  1. uint8_t RTC_GetRTCA(FL_RTCA_InitTypeDef *InitStructer)
  2. {
  3.     uint8_t n, i;
  4.     uint8_t Result = 1;
  5.     uint32_t u,ut;
  6.     FL_RTCA_InitTypeDef TempTime1;
  7.     FL_RTCA_GetTime(RTCA, &TempTime1);
  8.     u=((uint32_t *)(&TempTime1))[4];
  9.     OLED_ShowNumH(20,5,u,2,16);
  10.     u=((uint32_t *)(&TempTime1))[5];
  11.     OLED_ShowNumH(44,5,u,2,16);
  12.     u=((uint32_t *)(&TempTime1))[6];
  13.     OLED_ShowNumH(68,5,u,2,16);
  14.     return Result;
  15. }
复制代码
实现RTC计时功能的测试函数如下,它含有RTC的初始值设置及循环读取功能:
  1. void Test_RTCA(void)
  2. {
  3.     FL_RTCA_InitTypeDef      InitTime;
  4.     FL_RTCA_InitTypeDef      GetTime;
  5.     RTCA_Init();
  6.     InitTime.year   = 0x22;
  7.     InitTime.month  = 0x12;
  8.     InitTime.day    = 0x12;
  9.     InitTime.week   = 0x01;
  10.     InitTime.hour   = 0x08;
  11.     InitTime.minute = 0x30;
  12.     InitTime.second = 0x00;
  13.     RTC_SetRTCA(&InitTime);
  14.     FL_DelayMs(1000);
  15.     while(1)
  16.     {
  17.          RTC_GetRTCA(&GetTime);
  18.          FL_DelayMs(1000);
  19.     }
  20. }
复制代码
实现图3计时显示效果的主程序为:
  1. int main(void)
  2. {
  3.     MF_Clock_Init();
  4.     MF_SystemClock_Config();
  5.     FL_Init();
  6.     MF_Config_Init();
  7.     UserInit();
  8.     CDIF->CR= 0x02;
  9.     oled_app();
  10.     OLED_Init();
  11.     OLED_Clear();
  12.     OLED_ShowString(20,0,"FM33LG0XX",16);
  13.     OLED_ShowCHinese(20,2,0);
  14.     OLED_ShowCHinese(36,2,1);
  15.     OLED_ShowCHinese(52,2,2);
  16.     OLED_ShowCHinese(68,2,3);
  17.     OLED_ShowCHinese(84,2,4);
  18.     OLED_ShowCHinese(100,2,5);
  19.     OLED_ShowString(20,6,"jinglixixi",16);
  20.     FL_DelayMs(1000);
  21.     OLED_ShowString(20,6,"      ",16);
  22.     OLED_ShowString(20,5,"  :   :  ",16);
  23.     Test_RTCA();
  24.     while(1)
  25.     {
  26.         LED0_TOG();
  27.         FL_DelayMs(1000);
  28.     }
  29. }
复制代码










回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

返回顶部