求大神解决关于STM8L052R8段式液晶不能显示问题
大神们,为什么我初始化过后液晶屏不能显示段点啊,是哪里有问题啊!时钟选择LSI有问题吗?求大神帮忙解决下,项目急,谢谢了!如果方便可以加我qq1358843903,红包都不是问题。
/*************************************************************************
*开发环境:IAR for stm8 v6.5.3
*硬件平台:STM8L-DISCOVERY
*功能说明:
*作 者:
*************************************************************************/
#include <LCD.h>
/*****************************************************************************
*名 称:void LCD_Config(void)
*功 能:
*入口参数:无
*出口参数:无
*说 明:
******************************************************************************/
void lcd_init(void)
{
/*******打开LCD/RTC时钟*************/
CLK_PCKENR2_PCKEN22=1; //打开RTC时钟,LCD刷新频率与此时钟有关外围时钟使能
CLK_PCKENR2_PCKEN23=1; //打开LCD时钟,读写LCD寄存器用到此时钟外围时钟使能
/****库 CLK->CRTCR = (uint8_t)((uint8_t)CLK_RTCCLKSource | (uint8_t)CLK_RTCCLKDiv);******/
CLK_CRTCR_RTCSEL0=0; // LSI (这个时钟源必须在16.384 kHz到500 kHz)
CLK_CRTCR_RTCSEL1=1;
CLK_CRTCR_RTCSEL2=0;
CLK_CRTCR_RTCSEL3=0;
CLK_CRTCR_RTCDIV0=0;
CLK_CRTCR_RTCDIV1=0;
CLK_CRTCR_RTCDIV2=0;
LCD_FRQ_PS0=0; // 2^PS
LCD_FRQ_PS1=0;
LCD_FRQ_PS2=1;
LCD_FRQ_PS3=0;
LCD_FRQ_DIV0=1; //DIV+16
LCD_FRQ_DIV1=1; //分频值为15+16=31
LCD_FRQ_DIV2=1;
LCD_FRQ_DIV3=1;
LCD_CR1_DUTY0=1; //选择比例1/4 duty
LCD_CR1_DUTY1=1;
LCD_CR1_B2=0; //1/3 偏率
/**********打开引脚的SEG功能********/
LCD_PM0=0xFF;
LCD_PM1=0x3F;
/**********打开引脚的SEG功能4个COM口,13个SEG口********/
LCD_CR2_CC0=0;//对比度
LCD_CR2_CC1=0;
LCD_CR2_CC2=1;
/*
000: VLCD0??2.6V
001: VLCD1 2.7V
010: VLCD2 2.8V
011: VLCD3 2.9V
100: VLCD4 3.0V
101: VLCD5 3.1V
110: VLCD6 3.2V
111: VLCD7
*/
LCD_CR3_DEAD0=0;//no dead time
LCD_CR3_DEAD1=0;
LCD_CR3_DEAD2=0;
/******脉冲持续时间****************/
LCD_CR2_PON0=1; //1个时钟PS pulses
LCD_CR2_PON1=0;
LCD_CR2_PON2=0;
LCD_CR2_VSEL=0; //确定LCD电压源(neibu部电压)
LCD_CR3_LCDEN=1; //使能LCD
}
/*点亮LCD所有区域*/
void ShowLcdAll(void)
{
LCD_RAM0 = 0xff;
LCD_RAM1 = 0xff;
LCD_RAM2 = 0xff;
LCD_RAM3 = 0xff;
LCD_RAM4 = 0xff;
LCD_RAM5 = 0xff;
LCD_RAM7 = 0xff;
LCD_RAM8 = 0xff;
LCD_RAM10 = 0xff;
LCD_RAM11 = 0xff;
LCD_RAM12 = 0xff;
}
STM8有LCD驱动相关的库函数的,直接用库来做比较省事点,看看我的初始化函数
//使用RTC的32768HZ时钟源
void LCD_Setup (void)
{
//函数配置OK
LCD_DeInit();
//使用RTC的32768HZ时钟源,32768/4/16=512 512/8=64HZ刷新率,阳光照射时还是能看出闪烁
//LCD_Init(LCD_Prescaler_4, LCD_Divider_16, LCD_Duty_1_8, LCD_Bias_1_4, LCD_VoltageSource_Internal);
//使用RTC的32768HZ时钟源,32768/2/16=1024 1024/8=128HZ刷新率
LCD_Init(LCD_Prescaler_2, LCD_Divider_16, LCD_Duty_1_8, LCD_Bias_1_4, LCD_VoltageSource_Internal);
LCD_PM0 = 0xFF; //引脚配置为LCD用SEG0-SEG10
LCD_PM1 = 0x07;
LCD_HighDriveCmd(DISABLE);
LCD_PulseOnDurationConfig(LCD_PulseOnDuration_7); //延时时间
LCD_DeadTimeConfig(LCD_DeadTime_0); //死区时间
LCD_BlinkConfig(LCD_BlinkMode_Off, LCD_BlinkFrequency_Div8);//闪烁模式
LCD_ContrastConfig(LCD_Contrast_3V0); //内部升压器调节的电压
LCD_Cmd(ENABLE);
//LCD_Cmd(DISABLE); //LCD禁能
}
官方有现成例程可以参考:
检查硬件,电路,看看是不是时钟线的干扰问题
页:
[1]