本帖最后由 hu9jj 于 2019-10-14 14:52 编辑
调试了几天,终于成功驱动了LCD5110显示屏。下面是显示屏的特写,这个屏有点缺陷,有排横点没有显示。
下面是全貌:
首先是在MCC中配置引脚,将相应的驱动引脚设置成输出。LCD5110共需要5个引脚驱动,我选择了PE0~PE3加PF4(后改为PB3)。我将相应的代码复制过来后,开始编译没有通过:
经过反复调试排错后,编译总算通过了,但LCD屏幕没有任何显示,反复查找、测试都找不到问题所在,无奈之下只好动用逻辑分析仪:
通过观看时序,相应的引脚信号与要求相差甚远,5个引脚的时序几乎完全相同,说明相关的驱动代码有问题:
下面是放大后的时序:
为了方便测试引脚控制的代码,我将各引脚分别接上LED灯来测试:
我开始是用下列的宏定义,但只有PE0和PE1的宏定义能够控制相应的引脚,其他宏定义则不起作用,一直找不到原因:
/*****************************************
*
* 定义LCD相关的管脚功能
*
*****************************************/
#define LCD_RST_1 do { PORTF_OUTSET = 0x8; } while(0) //复位脚① PE3 0x8
#define LCD_RST_0 do { PORTF_OUTCLR = 0x8; } while(0) //复位脚①
#define LCD_CE_1 do { PORTE_OUTSET = 0x4; } while(0) //片选脚② PE2 0x4
#define LCD_CE_0 do { PORTE_OUTCLR = 0x4; } while(0)
#define LCD_DC_1 do { PORTE_OUTSET = 0x2; } while(0) //数据/命令选择脚③ PE1 0x2
#define LCD_DC_0 do { PORTE_OUTCLR = 0x2; } while(0)
#define LCD_DIN_1 do { PORTE_OUTSET = 0x1; } while(0) //数据输入④ PE0 0x1
#define LCD_DIN_0 do { PORTE_OUTCLR = 0x1; } while(0)
#define LCD_CLK_1 do { PORTE_OUTSET = 0x10; } while(0) //时钟信号脚⑤PF4 0x10
#define LCD_CLK_0 do { PORTE_OUTCLR = 0x10; } while(0)
经过测试,通过宏定义嵌套才解决了问题,代码如下:
#define LCD_RST_1 do { IO_PE3_SetHigh(); } while(0) //复位脚① PE3 0x8
#define LCD_RST_0 do { IO_PE3_SetLow(); } while(0) //复位脚①
#define LCD_CE_1 do { IO_PE2_SetHigh(); } while(0) //片选脚② PE2 0x4
#define LCD_CE_0 do { IO_PE2_SetLow(); } while(0)
#define LCD_DC_1 do { IO_PE1_SetHigh(); } while(0) //数据/命令选择脚③ PE1 0x2
#define LCD_DC_0 do { IO_PE1_SetLow(); } while(0)
#define LCD_DIN_1 do { IO_PE0_SetHigh(); } while(0) //数据输入④ PE0 0x1
#define LCD_DIN_0 do { IO_PE0_SetLow(); } while(0)
#define LCD_CLK_1 do { IO_PB3_SetHigh(); } while(0) //时钟信号脚⑤PF4 0x10
#define LCD_CLK_0 do { IO_PB3_SetLow(); } while(0)
/**************结束管脚定义******************/
|