【CH579M-R1】+驱动LCD5110显示屏
[复制链接]
经过一天时间的调试,LCD5110显示屏终于驱动成功,程序是从STM32移植过来的,调整时序时还借助了逻辑分析仪。调试过程中还犯了低级错误,忘记对LCD5110初始化了,时序已经调整的非常理想,但LDC就是无显示,百思不得其解,最后才发现问题。下图为调试过程:
这是用逻辑分析仪调整时序的截图:
下面是main.c代码:
int main()
{
UINT8 len,i,dir;
/* 配置串口1:先配置IO口模式,再配置串口 */
GPIOA_SetBits(GPIO_Pin_9);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // RXD-配置上拉输入
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
UART1_DefInit();
#if 1 // 测试串口发送字符串
UART1_SendString( TxBuff, sizeof(TxBuff) );
#endif
/* 配置LED和PWM */
GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA); // PA6 - PWM4(LED4)
GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeOut_PP_5mA); // PB6 - LED3
PWMX_CLKCfg( 4 );
PWMX_CycleCfg( PWMX_Cycle_64 );
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); // PB4 - LED_G
GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA); // PB7 - LED_Y
GPIOB_InverseBits(4);
LCD_init(); //LCD5110初始化
display_main(); //显示主界面
// 中断方式:接收数据后发送出去
UART1_ByteTrigCfg( UART_7BYTE_TRIG );
trigB = 7;
UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );
NVIC_EnableIRQ( UART1_IRQn );
#if 1 // 查询方式:接收数据后发送出去
while(1)
{
/* //串口测试
len = UART1_RecvString(RxBuff);
if( len )
{
UART1_SendString( RxBuff, len );
}
*/
//PWM测试
if(dir){
i--;
if(i == 0){
dir = 0;
GPIOB_InverseBits(GPIO_Pin_4);
}
}
else{
i++;
if(i == 64){
dir = 1;
GPIOB_InverseBits(GPIO_Pin_7);
}
}
PWMX_ACTOUT( CH_PWM4, i, Low_Level, ENABLE);
// PWMX_ACTOUT( CH_PWM7, 64-i, Low_Level, ENABLE);
mDelaymS(10);
//LED3闪烁测试
time++;
if(time > 50){
time = 0;
GPIOB_InverseBits(GPIO_Pin_6);
}
}
#endif
#if 0 // 中断方式:接收数据后发送出去
UART1_ByteTrigCfg( UART_7BYTE_TRIG );
trigB = 7;
UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );
NVIC_EnableIRQ( UART1_IRQn );
#endif
// while(1);
}
这是LCD显示状况:
|