martinhu 发表于 2021-2-19 17:17

LCD模块辅助软件(试用)

#申请原创#@21小跑堂@21小跑堂@21小跑堂
近日,有人做了一款LCD模块的辅助配置软件,软件配置之后,可以自动生成LCD模块的代码,
用户调用生成的代码即可,欢迎大家试用,并提出自己的意见。
1      LCD模块辅助软件特点ŸLCD 模块设置图形化选择,易于理解LCD模块设置相关参数Ÿ针对段式LCD 液晶屏显示8字段和米字段选择设置Ÿ使用XML格式配置文件方便保存和修改,便于二次扩展Ÿ针对LCD段式液晶屏只需要设置相关SEG和COM 和RAM区域,即可生成相应代码Ÿ生成代码易于阅读和理解,包含了演示代码Ÿ真正实现一键生成LCD相关代码,便于前期评估和开发Ÿ该软件适合现有华大所有带LCD显示的MCU,便于添加后续带有LCD/LED 显示MCU。2      LCD模块辅助软件功能介绍针对华大LCD模块,开发了LCD模块辅助软件。软件如图所示。图 1 LCD模块辅助软件该软件分为五大区域。1.       华大LCD模块配置区域该区域主要配置LCD 的时钟、LCD模式需要的COM 数、LCD模式需要的SEG 数、LCD驱动方式选择、内部电阻驱动方式对比度调整、LCD偏置设置、LCD电荷泵时钟选择、LCD 扫描频率设置。通过该区域设置基本可以完成LCD模块的初始化。2.       LCD模块驱动电路区域该区域通过LCD模块设置,可以显示外部驱动电路的实际接法,以及对该种驱动电路进行说明。方便用户对该种驱动方式进行了解,选择适合的驱动方式。                                           针对外部电阻驱动方式,可以通过MCU的电源电压,Rx 和R 电阻来计算出LCD的电压以及该种电路消耗的电流。用户可以方便调整Rx 和R 电阻大小。3.       8字和米字配置设置区域               该区域主要针对段式LCD屏主要显示数字常出现8字和米字配置为主进行了取点设置,并设置LCD屏出现数字个数,用于代码生成使用。4.       LCD模块RAM区域显示该区域主要根据用户的LCD屏来填充相应的显示部分。显示8字和米字的段时按照数字在前段点在后原则设置。例如2号F段 填充2F ,不能设置为F2。特殊字段比如小数点等,例如2号数字小数点 P ,可以设置为P2。字段数段时,数字在前段在后。特殊字段时,段在前数字在后。      COM 和SEG 依据原理图来通过下拉选项选择。5.       LCD模块操作软件。当已有设置好的配置文件,可以通过读出XML按钮,读出相关配置。当设置好后,需要保存相关配置文件,可以点击保存XML按钮。当设置好后,需要生成代码,点击生成代码按钮,即可生成相应代码。3      LCD模块辅助软件XML配置文件介绍                   以STK 中的LCD为例,相关配置文件如下:                   <?xmlversion="1.0" encoding="utf-8"?><Config><字8配置>True</字8配置><米字配置>False</米字配置><LCD模块COM选择>3</LCD模块COM选择><LCD模块SEG设置>8</LCD模块SEG设置><LCD驱动方式选择>1</LCD驱动方式选择><内部电阻驱动对比度调节>0</内部电阻驱动对比度调节><LCD偏置bias设置>0</LCD偏置bias设置><LCD电荷泵时钟频率设置>0</LCD电荷泵时钟频率设置><LCD扫描频率设置>1</LCD扫描频率设置><VDD电压mV>3300</VDD电压mV><RX电阻Ω>30000</RX电阻Ω><R电阻Ω>100000</R电阻Ω><COM配置表>COM0,COM1,COM2,COM3,</COM配置表><SEG配置表>SEG0,SEG1,SEG2,SEG3,SEG4,SEG5,SEG6,SEG7,</SEG配置表><点阵表>1F,1A,2F,2A,3F,3A,4F,4A,1G,1B,2G,2B,3G,3B,4G,4B,1E,1C,2E,2C,3E,3C,4E,4C,P1,1D,P2,2D,P3,3D,P4,4D,</点阵表><数字个数>4</数字个数><字配置表>0,1,2,3,4,5,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,</字配置表><LCD模块时钟选择>1</LCD模块时钟选择></Config>         通过XML配置文件,可以看出是将相关配置以XML文件方式保存下来,便于下次加载和修改。4      LCD模块辅助软件生成文件介绍            通过该软件生成.c文件。该文件有以下几部分组成://HDSC MCU LCD模块中SEG和IO 与 段式LCD屏的引脚对应关系图//COM 对应关系//COM0 ========== COM0//COM1 ========== COM1//COM2 ========== COM2//COM3 ========== COM3//SEG 对应关系//SEG0 ========== SEG0//SEG1 ========== SEG1//SEG2 ========== SEG2//SEG3 ========== SEG3//SEG4 ========== SEG4//SEG5 ========== SEG5//SEG6 ========== SEG6//SEG7 ========== SEG7//点阵符号宏定义#define    Fill_1F   LCDSEG0 |= 0x1#define    Fill_1A   LCDSEG1 |= 0x1#define    Fill_2F   LCDSEG2 |= 0x1#define    Fill_2A   LCDSEG3 |= 0x1#define    Fill_3F   LCDSEG4 |= 0x1#define    Fill_3A   LCDSEG5 |= 0x1#define    Fill_4F   LCDSEG6 |= 0x1#define    Fill_4A   LCDSEG7 |= 0x1#define    Fill_1G   LCDSEG0 |= 0x2#define   Fill_1B      LCDSEG1 |= 0x2#define    Fill_2G   LCDSEG2 |= 0x2#define    Fill_2B   LCDSEG3 |= 0x2#define    Fill_3G   LCDSEG4 |= 0x2#define    Fill_3B   LCDSEG5 |= 0x2#define    Fill_4G   LCDSEG6 |= 0x2#define    Fill_4B   LCDSEG7 |= 0x2#define    Fill_1E   LCDSEG0 |= 0x4#define    Fill_1C   LCDSEG1 |= 0x4#define    Fill_2E   LCDSEG2 |= 0x4#define    Fill_2C   LCDSEG3 |= 0x4#define    Fill_3E   LCDSEG4 |= 0x4#define    Fill_3C   LCDSEG5 |= 0x4#define    Fill_4E   LCDSEG6 |= 0x4#define    Fill_4C   LCDSEG7 |= 0x4#define    Fill_P1   LCDSEG0 |= 0x8#define    Fill_1D   LCDSEG1 |= 0x8#define    Fill_P2   LCDSEG2 |= 0x8#define    Fill_2D   LCDSEG3 |= 0x8#define    Fill_P3   LCDSEG4 |= 0x8#define    Fill_3D   LCDSEG5 |= 0x8#define    Fill_P4   LCDSEG6 |= 0x8#define    Fill_4D   LCDSEG7 |= 0x8///*============================================*//////* Function:      voidInitial_LCDDriver(void) ///* Description:   HDSC LCD 初始化代码               ///*============================================*///void Initial_LCDDriver(void)… …该部分包括LCD时钟初始化、LCD模块初始化配置、LCD相关IO配置。/*******************************************************************************功能描述: 显示全屏和清除显示*******************************************************************************/void Disp_Full_Clear(uint8_t temp)该部分实现LCD 显示全显和清除显示。
//===============================================//数字显示函数//===============================================void LCD_Digit_1(uint8_t V_Data)… …该部分实现LCD 数字从1~n 显示 0~9 数字。如果选择米字显示LCD 数字从1~n 显示 0~9 数字 以及A~Z 字母。void Disp_OneDigit(uint8_tV_DataNum,uint8_tV_Data)该函数实现选择第几个字,以及显示的内容。///*****************************************************************************//////*Function:Disp_DigitS                                                            ///*Description:底层数字转换                                                            ///*****************************************************************************///void Disp_DigitS(uint8_t*P_Data,uint8_t   V_StartNum,uint8_t   V_Num)该函数实现大部分显示8个字时,开始的位到结束的位置。8个数字由指针P_Data获得。///***************************************************************************//////*Function:Test_DisplayLCD 显示测试程序///*************************************************************************///void Test_Display(void)该函数是测试使用,进行LCD初始化、全显示、依次显示每一个数字从0~9或者0~36、显示所有数字从0~9或者0~36、全清除、显示特殊字段直到显示特殊字段显示完成。
5      LCD模块辅助软件注意事项5.1          LCD模块时钟选择该软件默认只能选择内部RCL的时钟,建议使用RCL时钟给LCD模块。LCD模块选择RCL时钟具有较好的ESD性能,以及节省外部XTL时钟,减少BOM成本。5.2          LCD模块RAM显示   根据软件固定设置选择了模式0方式。5.3          LCD模块配置 LCD模块配置中,没有使用DMA显示、以及LCD显示中断配置。该功能极少使用,该软件并不支持。如果有需求需要进行增加修改初始化配置函数。 5.4          华大带有LCD模块系列支持该模块以HC32F/L176和HC32F/L196 为主进行配置,由于配置关系使用直接操作寄存器,HC32F/L072 同样无缝支持。HC32L136 系列由于寄存器名字不一致操作导致和生成的.c文件有冲突,冲突处在Initial_LCDDriver 函数内。请修改头文件中LCD部分的配置。1.    修改时钟寄存器:    M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = 1;      //打开GPIO模块时钟            M0P_SYSCTRL->PERI_CLKEN0_f.LCD =1;      //打开LCD模块时钟    改为:      M0P_SYSCTRL->PERI_CLKEN_f.GPIO = 1;      //打开GPIO模块时钟            M0P_SYSCTRL->PERI_CLKEN_f.LCD =1;      //打开LCD模块时钟2.    HC32L/F 136.h 头文件修改:主要包括:SEGIO0、SEGIO1、CR0 三个寄存器定义以及内部的位定义。    union    {      __IO uint32_t SEGIO0;      stc_lcd_segio0_field_tSEGIO0_f;    };    union    {      __IO uint32_t SEGIO1;      stc_lcd_segio1_field_tSEGIO1_f;};改为    union    {      __IO uint32_t POEN0;      stc_lcd_poen0_field_tPOEN0_f;    };    union    {      __IO uint32_t POEN1;      stc_lcd_poen1_field_tPOEN1_f;    };typedef struct{    __IO uint32_t SEG0                      : 1;    __IO uint32_t SEG1                      : 1;    __IO uint32_t SEG2                      : 1;    __IO uint32_t SEG3                      : 1;    __IO uint32_t SEG4                      : 1;    __IO uint32_t SEG5                      : 1;    __IO uint32_t SEG6                      : 1;    __IO uint32_t SEG7                      : 1;    __IO uint32_t SEG8                      : 1;    __IO uint32_t SEG9                      : 1;    __IO uint32_t SEG10                     : 1;    __IO uint32_t SEG11                     : 1;    __IO uint32_t SEG12                     : 1;    __IO uint32_t SEG13                     : 1;    __IO uint32_t SEG14                     : 1;    __IO uint32_t SEG15                     : 1;    __IO uint32_t SEG16                     : 1;    __IO uint32_t SEG17                     : 1;    __IO uint32_t SEG18                     : 1;    __IO uint32_t SEG19                     : 1;    __IO uint32_t SEG20                     : 1;    __IO uint32_t SEG21                     : 1;    __IO uint32_t SEG22                     : 1;    __IO uint32_t SEG23                     : 1;    __IO uint32_t SEG24                     : 1;    __IO uint32_t SEG25                     : 1;    __IO uint32_t SEG26                     : 1;    __IO uint32_t SEG27                     : 1;    __IO uint32_t SEG28                     : 1;    __IO uint32_t SEG29                     : 1;    __IO uint32_t SEG30                     : 1;    __IO uint32_t SEG31                     : 1;} stc_lcd_segio0_field_t;
typedef struct{    __IO uint32_t SEG32                     : 1;    __IO uint32_t SEG33                     : 1;    __IO uint32_t SEG34                     : 1;    __IO uint32_t SEG35                     : 1;    __IO uint32_t SEG36COM7               : 1;    __IO uint32_t SEG37COM6               : 1;    __IO uint32_t SEG38COM5               : 1;    __IO uint32_t SEG39COM4               : 1;    __IO uint32_t COM0                      : 1;    __IO uint32_t COM1                      : 1;    __IO uint32_t COM2                      : 1;    __IO uint32_t COM3                      : 1;    __IO uint32_t MUX                     : 1;} stc_lcd_segio1_field_t;改为:typedef struct{    __IO uint32_t S0                        : 1;    __IO uint32_t S1                        : 1;    __IO uint32_t S2                        : 1;    __IO uint32_t S3                        : 1;    __IO uint32_t S4                        : 1;    __IO uint32_t S5                        : 1;    __IO uint32_t S6                        : 1;    __IO uint32_t S7                        : 1;    __IO uint32_t S8                        : 1;    __IO uint32_t S9                        : 1;    __IO uint32_t S10                     : 1;    __IO uint32_t S11                     : 1;    __IO uint32_t S12                     : 1;    __IO uint32_t S13                     : 1;    __IO uint32_t S14                     : 1;    __IO uint32_t S15                     : 1;    __IO uint32_t S16                     : 1;    __IO uint32_t S17                     : 1;    __IO uint32_t S18                     : 1;    __IO uint32_t S19                     : 1;    __IO uint32_t S20                     : 1;    __IO uint32_t S21                     : 1;    __IO uint32_t S22                     : 1;    __IO uint32_t S23                     : 1;    __IO uint32_t S24                     : 1;    __IO uint32_t S25                     : 1;    __IO uint32_t S26                     : 1;    __IO uint32_t S27                     : 1;    __IO uint32_t S28                     : 1;    __IO uint32_t S29                     : 1;    __IO uint32_t S30                     : 1;    __IO uint32_t S31                     : 1;} stc_lcd_poen0_field_t;
typedef struct{    __IO uint32_t S32                     : 1;    __IO uint32_t S33                     : 1;    __IO uint32_t S34                     : 1;    __IO uint32_t S35                     : 1;    __IO uint32_t S36C7                     : 1;    __IO uint32_t S37C6                     : 1;    __IO uint32_t S38C5                     : 1;    __IO uint32_t S39C4                     : 1;    __IO uint32_t C0                        : 1;    __IO uint32_t C1                        : 1;    __IO uint32_t C2                        : 1;    __IO uint32_t C3                        : 1;    __IO uint32_t MUX                     : 1;} stc_lcd_poen1_field_t;
typedef struct{    __IO uint32_t EN                        : 1;    __IO uint32_t SCANCLK                   : 2;    __IO uint32_t CPCLK                     : 2;    __IO uint32_t BIASMODE                  : 1;    __IO uint32_t DUTY                      : 3;    __IO uint32_t BIASSRC                   : 3;    __IO uint32_t CONTRAST                  : 4;} stc_lcd_cr0_field_t;改为:typedef struct{    __IO uint32_t EN                        : 1;    __IO uint32_t LCDCLK                  : 2;    __IO uint32_t CPCLK                     : 2;    __IO uint32_t BIAS                      : 1;    __IO uint32_t DUTY                      : 3;    __IO uint32_t BSEL                      : 3;    __IO uint32_t CONTRAST                  : 4;    uint32_t RESERVED16                     :15;    __IO uint32_t RSV                     : 1;} stc_lcd_cr0_field_t;




martinhu 发表于 2022-7-4 11:12

本帖最后由 martinhu 于 2022-7-5 18:11 编辑

附件已更新,修改最后几个LCD_RAM 地址定义的问题

pw32 发表于 2021-2-19 17:20

欢迎大家试用,提出宝贵的意见。我们一直在努力!{:handshake:}{:handshake:}

fjhcpu 发表于 2021-2-19 19:56

pw32 发表于 2021-2-19 17:20
欢迎大家试用,提出宝贵的意见。我们一直在努力!

你们是官方的?

xyz549040622 发表于 2021-2-19 22:09

东西是不错,如果能够支持所有的外设那就更好了。

pw32 发表于 2021-2-20 09:21

fjhcpu 发表于 2021-2-19 19:56
你们是官方的?

是。

pw32 发表于 2021-2-20 09:23

xyz549040622 发表于 2021-2-19 22:09
东西是不错,如果能够支持所有的外设那就更好了。

实现前和我们专门做这个图形化界面同事沟通过,通过XML文件和大系统交互。类似的图形化界面软件框架还在持续开发中。

pw32 发表于 2021-2-20 09:26

该软件针对用户最方面的是:对于硬件工程师SEG管脚内部任意交换COM 管脚内部任意交换,极大方便了PCB layout。软件一键生成后,软件工程师只需要考虑写好业务逻辑层即可。

fjhcpu 发表于 2021-2-20 10:34

期待官方把软件生态做的越来越好,其他用户可以顺滑的切换到华大的平台。。

HuangHongLun 发表于 2021-2-20 11:21

希望这样的软件可以越来越完善,最后像ST那样可以集成到一起

zcx11 发表于 2021-2-20 16:53

谢谢!

天意无罪 发表于 2021-2-20 17:36

不错,支持一下。

勇者无惧你和我 发表于 2021-2-22 11:55

这个软件太赞了,不错的一个小软件。

勇敢的大白菜 发表于 2021-2-22 12:11

感谢楼主分享,如果要是可以在智能一些就好了。

杨寅辉 发表于 2021-2-22 19:47

这个软件有点偏简单,如果所有的初始化都可以配置就很美了。

勇敢的大白菜 发表于 2021-2-24 09:02

这个软件真心的不错,很棒的。下载玩玩。

稳稳の幸福 发表于 2021-2-24 21:42

学习学习,还没用过这个功能

pw32 发表于 2021-3-12 16:51

欢迎大家试用!提出宝贵意见!

RobinQcp 发表于 2021-3-15 15:22

这个软件实用性非常不错。

ZYQFBW 发表于 2021-4-11 19:46

最好能提供一个基于华大官方的L136开发板的完整工程。。。看看是怎么配置的。

ZYQFBW 发表于 2021-4-11 20:05

这红圈位置为啥还要填数据?不是应该是空的吗?
页: [1] 2 3 4 5 6
查看完整版本: LCD模块辅助软件(试用)