前言
初接触这个屏幕还真有点无从下手,网上教程也不多。
参考的是这个教程https://www.cnblogs.com/IdeaMing/p/10985980.html
但是不太详细
一、LCD驱动初始化
void LCD_GLASS_Init(void){
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);//打开RTC时钟
CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);//打开LCD时钟
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);//设置RTC时钟源
LCD_Init( LCD_Prescaler_1,//
LCD_Divider_31, //
LCD_Duty_1_4, //使用的4个COM所以是1/4
LCD_Bias_1_3, //
LCD_VoltageSource_Internal);//内部电压源
//设置需要使用为LCD的IO口
LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xFF); //7-0
LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0xFF);//15-8
LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0xF0);//23-16,此处开启23-20
// LCD_PortMaskConfig(LCD_PortMaskRegister_3, 0x00);//
LCD_PortMaskConfig(LCD_PortMaskRegister_4, 0xF0);//
// LCD_PortMaskConfig(LCD_PortMaskRegister_5, 0x00);
/* To set contrast to mean value */
LCD_ContrastConfig(LCD_Contrast_Level_3);//设置对比度
LCD_DeadTimeConfig(LCD_DeadTime_0);//设置死区时间
LCD_PulseOnDurationConfig(LCD_PulseOnDuration_1);//设置停留时间
/* Enable LCD peripheral */
LCD_Cmd(ENABLE);//使能驱动
}
初始化就不多说了,下面简要说一下我曾遇到问题的函数
- LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xFF);
这个函数配置的时候要参考原理图,原理图上哪些是接的屏幕就配置哪些就行了。 - 如果屏幕不清晰就调对比度
二、LCD显示
显示
LCD初始化之后就可以使用下面的函数来让屏幕显示内容
//屏幕全亮
void LCD_GLASS_Check(void)
{
uint8_t counter = 0;
for (counter = 0; counter <= LCD_RAMRegister_21; counter++)
{
LCD->RAM[counter] = 0xff;
}
}
每一个寄存器控制8个段,此时就已经可以显示
三、真值表
但是想精准显示任意一个段你还需要知道屏幕和寄存器之间的对应关系。
-
首先获取屏幕的真值表信息,以数字1为例。
-
然后查看参考手册看对应关系。
page284有以下说明:
The LCD RAM bits S0[i] corresponds to SEG[i] of COM0
The LCD RAM bits S1[i] corresponds to SEG[i] of COM1
The LCD RAM bits S2[i] corresponds to SEG[i] of COM2
The LCD RAM bits S3[i] corresponds to SEG[i] of COM3
意思是S0[i]对应COM0的SEG[i]。
由下图可知LCD_RAM[i]和Sn[i]的对应关系。
- 查看原理图获取对应关系
可知COM1对应LCD_COM3,pin1对应LCD_SEG16
我们可以得出下图
使用
要想让1F亮,直接执行以下代码即可。
LCD->RAM[12] |= 0x10;
总结
1F对应COM1,PIN1
COM1对应LCD_COM3,PIN1对应LCD_SEG16
所以1F对应S3(16)
S3(16)对应LCD_RAM12的第4位(从0开始)。
其他的以此类推