STM8L LCD配置与com使用问题
void LCD_GPIO_Config(void) { //SEG GPIO Init GPIO_Init(GPIOE, GPIO_Pin_0|GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Fast);//SEG1,2 GPIO_Init(GPIOE, GPIO_Pin_2|GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Fast);//SEG3,4 GPIO_Init(GPIOE, GPIO_Pin_4|GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Fast);//SEG5,6 GPIO_Init(GPIOD, GPIO_Pin_0|GPIO_Pin_2,GPIO_Mode_Out_PP_Low_Fast);//SEG7,8 GPIO_Init(GPIOD, GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Fast);//SEG9 GPIO_Init(GPIOB, GPIO_Pin_0|GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Fast);//SEG10,11 //COM GPIO Init // GPIO_Init(GPIOF, GPIO_Pin_4|GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Fast);//COM4,5 // GPIO_Init(GPIOF, GPIO_Pin_6|GPIO_Pin_7,GPIO_Mode_Out_PP_Low_Fast);//COM6,7 GPIO_Init(GPIOA, GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6,GPIO_Mode_Out_PP_Low_Fast);//COM1,2 GPIO_Init(GPIOD, GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Fast);//COM3,4 } void lib_LCD_Config(void) { /* The LCD is configured as follow: - clock source = LSE (32.768 KHz) - Voltage source = Internal - Prescaler = 2 - Divider = 18 (16 + 2) - Mode = 1/4 Duty, 1/3 Bias - LCD frequency = (clock source * Duty) / (Prescaler * Divider) = 228 Hz ==> Frame frequency = 57 Hz */ /* Enable LCD clock */ CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE); /* Initialize the LCD */ LCD_Init(LCD_Prescaler_2, LCD_Divider_18, LCD_Duty_1_4, LCD_Bias_1_3, LCD_VoltageSource_Internal); /* Mask register*/ LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xFE); LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0x0F); LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x00); LCD_PortMaskConfig(LCD_PortMaskRegister_3, 0x00); // LCD_ContrastConfig(LCD_Contrast_3V0); LCD_ContrastConfig(LCD_Contrast_Level_7); LCD_DeadTimeConfig(LCD_DeadTime_0); LCD_PulseOnDurationConfig(LCD_PulseOnDuration_1); LCD_Cmd(ENABLE); /*!< Enable LCD peripheral */ }
LCD的使用需要打开RTC,相关设置都在CLK中。
一些简单的初始化,没什么太大的疑点通过手册就能看个大概明白;
LCD_Init中:
- LCD_Prescaler_2时钟预分频,对输入源分频,保证屈辱频率;
- LCD_Divider_18,分频器,最小倍数16;
- LCD_Duty_4,四个控制位(com);
- LCD_Bias_3,偏置电压3V
- LCD_VoltageSource_Internal,LCD电源的输入源
LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xFE);选择打开的SEG位
使用com使用的问题:
PAGE_COM :
0:地址0x0C至0x021可访问LCD RAM的第一页,对应于COM0,1,2和3
1:地址0x0C至0x021可访问LCD RAM的第一页,对应COM4,5,6和7
Bit 1 DUTY8:1/8 dty使能(8个com)
0:通过LCD_CR1寄存器中的DUTY [1:0]位选择duty;
1:启用1/8;
这里指出在状态1下是油COM4567访问第一页LCD RAM的,但是
当设置LCD_CR4中的DUTY8位(激活8个COM)时,LCD RAM通过两个页面访问,每个页面由LCD_CR4寄存器中的PAGE_COM位激活:
当PAGE_COM = 0时,地址0x0C至0x21可访问第一页,对应COM0,1,2和3.请参阅PAGE_COM位说明。
当PAGE_COM = 1时,地址0x0C至0x21可访问第二页,对应COM4,5,6和7.请参阅PAGE_COM位说明。
综上所述和测试:
使用com0-3控制LCD_RAM第一页(可能包括第二页),DUTY8置0,PAGE_COM置0;
使用com4-7控制LCD_RAM第一页(可能包括第二页),DUTY8置1后启用8个com时且PAGE_COM置1;
测试时,只有在开通8个控制脚时,才可以使用com4-7,但是com0-3会同步输出信号会影响其他正在使用com0-3占用的io;所以PAGE_COM只能用来控制第二页LCD_RAM的使能。