打印
[方案相关]

HC32L136开发板测评+OLED驱动及应用

[复制链接]
1696|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奋斗多日,开发板的串口程序下载终于搞定了,再看时间已是凌晨4点了!

在HC32L136开发板上配有一个笔段式的液晶屏,但无奈的是厂家却没提供一个能直接调用的显示函数。
在没解决该显示屏的显示函数前,先以轻车熟路的OLED屏来实现显示的问题。
由于手头的OLED屏是一款I2C接口的单色显示屏,故另其与MCU的连接关系为:
PA11:SCL
PA12:SDA
使这2个引脚输出高低电平的语句定义为:
#define OLED_SCLK_Set()   Gpio_SetIO(GpioPortA, GpioPin11)
#define OLED_SCLK_Clr()   Gpio_ClrIO(GpioPortA, GpioPin11);
#define OLED_SDIN_Set()   Gpio_SetIO(GpioPortA, GpioPin12)
#define OLED_SDIN_Clr()   Gpio_ClrIO(GpioPortA, GpioPin12);
分配2个引脚为输出功能的函数为:
void App_OledInit(void)
{
stc_gpio_cfg_t stcGpioCfg;
///< 打开GPIO外设时钟门控
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
stcGpioCfg.enDir = GpioDirOut;
///< 端口上下拉配置->下拉
stcGpioCfg.enPu = GpioPuDisable;
stcGpioCfg.enPd = GpioPdEnable;
///< GPIO IO OLED端口初始化
Gpio_Init(GpioPortA, GpioPin11, &stcGpioCfg);
Gpio_Init(GpioPortA, GpioPin12, &stcGpioCfg);
}

实现图1显示效果的主程序为:
int32_t main(void)
{
stc_rtc_time_t readtime;
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  //GPIO外设时钟打开
Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE);    //RTC模块时钟打开
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
RTC_Cfg();                                             //配置RTC
EnableNvic(RTC_IRQn, IrqLevel3, TRUE);  //使能RTC中断向量
Rtc_Cmd(TRUE);                                    //使能RTC开始计数
App_OledInit();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"HC32L136 TEST",16);
OLED_ShowString(0,2,"OLED DISPLAY",16);
while (1);
}

                              
图1  OLED屏显示效果
实现RTC时间设置的函数为:
void RTC_Cfg(void)
{
stc_rtc_initstruct_t RtcInitStruct;
RtcInitStruct.rtcAmpm = RtcPm;        //12小时制
RtcInitStruct.rtcClksrc = RtcClkRcl;       //内部低速时钟
RtcInitStruct.rtcPrdsel.rtcPrdsel = RtcPrds;  //周期中断类型PRDS
RtcInitStruct.rtcPrdsel.rtcPrds = Rtc1S;      //周期中断事件间隔
RtcInitStruct.rtcTime.u8Second = 0x55;
RtcInitStruct.rtcTime.u8Minute = 0x55;
RtcInitStruct.rtcTime.u8Hour   = 0x10;
RtcInitStruct.rtcTime.u8Day    = 0x06;
RtcInitStruct.rtcTime.u8DayOfWeek = 0x04;
RtcInitStruct.rtcTime.u8Month  = 0x10;
RtcInitStruct.rtcTime.u8Year   = 0x20;
RtcInitStruct.rtcCompen = RtcCompenEnable;
RtcInitStruct.rtcCompValue = 0;//补偿值根据实际情况进行补偿
Rtc_Init(&RtcInitStruct);
Rtc_AlmIeCmd(TRUE);                  //使能闹钟中断
}

实现图3  RTC计时效果的主程序为:
int32_t main(void)
{
stc_rtc_time_t readtime;
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);   //GPIO外设时钟打开
Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE);     //RTC模块时钟打开
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
RTC_Cfg();                                                           //配置RTC
EnableNvic(RTC_IRQn, IrqLevel3, TRUE);                //使能RTC中断向量
Rtc_Cmd(TRUE);                                                  //使能RTC开始计数
App_OledInit();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"HC32L136 TEST",16);
OLED_ShowString(0,2,"OLED  &  RTC",16);      
delay1ms(2000);
OLED_Clear();
OLED_ShowString(0,0,"20  -  -",16);
OLED_ShowString(0,2,"    :  :",16);  
while (1)
{
if(flag == 1)
{
flag = 0;
Rtc_ReadDateTime(&readtime);
second = readtime.u8Second;
minute = readtime.u8Minute;
hour   = readtime.u8Hour;
day    = readtime.u8Day;
week   = readtime.u8DayOfWeek;
month  = readtime.u8Month;
year   = readtime.u8Year;
OLED_ShowNum(16,0,year/16*10+year%16,2,16);
OLED_ShowNum(40,0,month/16*10+month%16,2,16);
OLED_ShowNum(64,0,day/16*10+day%16,2,16);
OLED_ShowNum(16,2,hour/16*10+hour%16,2,16);
OLED_ShowNum(40,2,minute/16*10+minute%16,2,16);
OLED_ShowNum(64,2,second/16*10+second%16,2,16);
}
}
}

图2  RTC起始界面

图3  RTC计时效果



使用特权

评论回复
沙发
rickluo| | 2020-10-7 08:55 | 只看该作者
多谢楼主测试我们的开发板,非常感谢!

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2020-10-7 15:41 | 只看该作者
rickluo 发表于 2020-10-7 08:55
多谢楼主测试我们的开发板,非常感谢!

期待有新的开发板推出活动,一贯地给与支持!!!

使用特权

评论回复
地板
rickluo| | 2020-10-7 22:32 | 只看该作者
jinglixixi 发表于 2020-10-7 15:41
期待有新的开发板推出活动,一贯地给与支持!!!

AT32F421 节后会弄!

使用特权

评论回复
5
jinglixixi|  楼主 | 2020-10-8 08:26 | 只看该作者
rickluo 发表于 2020-10-7 22:32
AT32F421 节后会弄!

大家值得期待,望大家积极参与!

使用特权

评论回复
6
baiyunping333| | 2023-12-31 22:45 | 只看该作者
能共享下代码,我折腾好几天,还是没点亮oled

使用特权

评论回复
7
jinglixixi|  楼主 | 2023-12-31 23:21 | 只看该作者
baiyunping333 发表于 2023-12-31 22:45
能共享下代码,我折腾好几天,还是没点亮oled

https://pan.baidu.com/s/1jZKWGmQdRcsto-OdbnPmbg                       提取码:386h

使用特权

评论回复
8
baiyunping333| | 2024-1-1 00:26 | 只看该作者
jinglixixi 发表于 2023-12-31 23:21
https://pan.baidu.com/s/1jZKWGmQdRcsto-OdbnPmbg                       提取码 ...

太感谢了

使用特权

评论回复
9
baiyunping333| | 2024-1-1 00:33 | 只看该作者
jinglixixi 发表于 2023-12-31 23:21
https://pan.baidu.com/s/1jZKWGmQdRcsto-OdbnPmbg                       提取码 ...

压缩包没有hc32L30X,有hc32L13X的例子吗,文章就中的代码

使用特权

评论回复
10
baiyunping333| | 2024-1-1 00:34 | 只看该作者
能分享下文章中HC32L13X的代码吗

使用特权

评论回复
11
baiyunping333| | 2024-1-9 02:06 | 只看该作者
能贴一下i2c通信部分吗,找了很多教程都没点亮

使用特权

评论回复
12
baiyunping333| | 2024-1-9 22:07 | 只看该作者
大哥,能分享一下针对HC32L136的完整代码吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝