【CW32L052测评】+LCD 屏及其显示程序分析
[复制链接]
本帖最后由 jinglixixi 于 2023-7-17 09:53 编辑
W32L052R8T6 StartKit 评估板带有一个 4x16 段码的 8 位 8 字型 LCD 显示屏,并配有小数点。用户可用来显示各种数字和英文字符。
从资料看,LCD屏有 3 种驱动方式,即:内部驱动模式、外部电容驱动模式、外部电阻驱动模式,不同模式的设置可通过相应的短接来实现。
表1 外部电容驱动模式的设置
图1 外部电容设置电路
表2 外部电阻驱动模式的设置
图2 外部电阻设置电路
当从开发板的实际设置看,LCD屏似乎并没在某种方式下。
为了解和掌握LCD屏的使用,可通过例程来入手。
LCD屏的引脚连接关系如图3所示,为了解和掌握LCD屏的使用,可通过例程来入手。
图3 引脚连接关系
对LCD屏的配置函数为:
void LCD_Configuration(void)
{
LCD_InitTypeDef LCD_InitStruct = {0};
LCD_InitStruct.LCD_Bias = LCD_Bias_1_3;
LCD_InitStruct.LCD_ClockSource = LCD_CLOCK_SOURCE_LSI;
LCD_InitStruct.LCD_Duty = LCD_Duty_1_4;
LCD_InitStruct.LCD_ScanFreq = LCD_SCAN_FREQ_256HZ;
LCD_InitStruct.LCD_VoltageSource = LCD_VoltageSource_Internal;
LCD_Init(&LCD_InitStruct);
LCD_COMConfig(LCD_COM0 | LCD_COM1 | LCD_COM2 | LCD_COM3, ENABLE);
LCD_SEG0to23Config(LCD_SEG0|LCD_SEG1|LCD_SEG2|LCD_SEG3|LCD_SEG4|LCD_SEG5|LCD_SEG6|LCD_SEG7,ENABLE);
LCD_Cmd(ENABLE);
}
其显示的测试程序为:
LCD_Write(LCD_RAMRegister_0, 0x050f050f);
LCD_Write(LCD_RAMRegister_1, 0x07000700);
LCD_Write(LCD_RAMRegister_2, 0x000f0f0f);
LCD_Write(LCD_RAMRegister_3, 0x070b0f00);
LCD_Write(LCD_RAMRegister_4, 0x070b070b);
编译下载后,其显示效果如图4所示。
图4 测试效果
通过对程序的观察,可以发现尽管所显示的内容是两两一组的,但显示程序中所发送的数据且不是对称的,这主要反映在最后3条语句上。也就是说,是这3条语句控制了LCD屏的后4位显示。
经测试,对于前2条语句的数据是按一个字来控制显示内容的,其中高16位数据在低位显示,而低16位数据是在高位显示。
以语句LCD_Write(LCD_RAMRegister_0, 0x050f050f)为例,数据0x050f0000负责显示个位的“6”,而数据0x050f负责显示十位的“6”。
如果继续分析的话可以发现,数据0x 050f所对应的段码顺序为:
D27 D26 D25 D24 D19 D18 D17 D16
D11 D10 D9 D8 D3 D2 D1 D0
dp c b a d e g f
以显示“12345678”为例,其测试程序如下:
LCD_Write(LCD_RAMRegister_0, 0x0600070d);
LCD_Write(LCD_RAMRegister_1, 0x070a030e);
LCD_Write(LCD_RAMRegister_2, 0x0b0603);
LCD_Write(LCD_RAMRegister_3, 0x50f0500);
LCD_Write(LCD_RAMRegister_4, 0x700);
这样,就可以依此设计出符合自己需要的显示函数。
图5 显示效果
在RTC的配合下,则可得到图6所示的计时效果。
图6 RTC计时效果
|