华大HC32L136开发板——按键控制笔段式段码LCD显示
HC32L136入门
本文基于华大HC32L136_DDL_Rev1.9.2Lite的官方库,在lcd_mode例程的基础上加入gpio_input实现按键控制;
以下推荐两篇供入门参考的大佬博客:
华大HC32L136开发板准备工作: 国产超低功耗华大单片机HC32L136开发板上手入门.
笔段式段码LCD显示原理介绍: 华大单片机HC32L136笔段式段码LCD显示.(仅供参考LCD原理)
代码实现
笔段式段码LCD真值表
/*
*LCD屏一共四个数字显示单元,LCD每个数字显示由两个字节的各低四位控制,
* 例如显示一个数字3则 lcd_data = {0x00000000,0x00000f02};
* 数字0-9 数据码:
* 0-------0x0f05
* 1-------0x0600
* 2-------0x0b06
* 3-------0x0f02
* 4-------0x0603
* 5-------0x0d03
* 6-------0x0d07
* 7-------0x0700
* 8-------0x0f07
* 9-------0x0f03
* .-------0x0008
* :-------0x0008
*/
static uint32_t lcd_data[12] = {
0x0f050f05, 0x06000600, 0x0b060b06, 0x0f020f02, 0x06030603,0x0d030d03,
0x0d070d07, 0x07000700, 0x0f070f07, 0x0f030f03,0x00080008, 0x00080008};
main函数
int32_t main(void)
{
int i=0;
Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE); ///< 使能RCL时钟
Sysctrl_SetRCLTrim(SysctrlRclFreq32768); ///< 配置内部低速时钟频率为32.768kHz
Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE); ///< 开启LCD时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); ///< 开启GPIO时钟
///< 按键端口初始化————gpio_input例程
App_UserKeyInit();
///< LED端口初始化————gpio_input例程
App_LedInit();
App_PortCfg(); ///< LCD端口配置————lcd_mode例程
App_LcdCfg(); ///< LCD模块配置————lcd_mode例程
Lcd_ClearDisp(); ///< 清屏————lcd_mode例程LCD官方库
while(1)
{
if(i>9) i=0;
///< 检测USER按键是否按下(低电平)
if(FALSE == Gpio_GetInputIO(STK_USER_PORT, STK_USER_PIN))
{
///< LED点亮
Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);
delay1ms(100);//消抖
if(FALSE == Gpio_GetInputIO(STK_USER_PORT, STK_USER_PIN))
{
i++;
}
while(!Gpio_GetInputIO(STK_USER_PORT, STK_USER_PIN));//松手检测
}
else
{
///< LED关闭
Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);
}
Lcd_WriteRam(0,lcd_data[i]); ///< 赋值寄存器LCDRAM0————lcd_mode例程LCD官方库
Lcd_WriteRam(1,lcd_data[i]); ///< 赋值寄存器LCDRAM1————lcd_mode例程LCD官方库
}
}
实物展示
我采用的是J-LINK / J-TRACE Cortex——SW的调试方式,连好接线后,编译下载程序到开发板。
功能 : 初始复位显示0000,当按下USER按键后LED点亮且LCD数字自增1,数字达到9999后再从0000循环。
效果如图示:
大四实习的第一个小功能实现,初识国产单片机;华大加油!国产加油!