文章一开始附上这两个函数 因为配置后显示的图片存在一点瑕疵:
/× 设定GRAM初始化屏幕显示区域×/
void Address_Set(u16 x, u16 y, u16 x_end, u16 y_end)
{
LCD_WriteReg(0x50, x); //水平起始坐标LCD_WriteReg(0x51, x_end); //水平终点
LCD_WriteReg(0x52, y); //同X 设置Y
LCD_WriteReg(0x53, y_end);
LCD_SetCursor(x, y); //
LCD_WriteRAM_Prepare();ClrCs;SetRs;}
/× 显示图片×/
void Disp_Color_Picture(u16 x, u16 y, u16 x_end, u16 y_end, u16 *p_picture)
{
u32 j;
u16 tmp_color;
u32 index;index = (x_end - x + 1)*(y_end - y + 1); //计算显示点的个数
Address_Set(x, y, x_end, y_end);
for(j = 0; j < index; j ++)
{
tmp_color = *p_picture ++;
LCD_WriteRAM(tmp_color);
}
}函数描述完毕,现在来描述出现的问题: 图片取模采用的是 ImageLcd 具体的设置 如下
然后 取模得到的数据 在附件里面 最后 到屏幕显示的 结果如下图 注意观察屏幕的白色区域 这里就是 问题所在 图片是完整的 但是为什么到了屏幕上就不能完全显示了呢
问题1:和取模得到的数据有关系
问题2:显示屏的初始化有问题
问题3:最上面那两个函数出问题
疑问排除中……
换一张图片显示 用相同的函数 结果如下 :
这样就是 全屏显示了 经比较 这个图片的字模与imageLcd采集的字模不一样 这个图片也不是使用IMAGELCD取模的
最后是LCD的初始化函数:
/****************************************************************************
* 名 称:void LCD_Setup()
* 功 能:初始化 LCD 控制器
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:LCD_Setup();
* 作 者:
****************************************************************************/
void LCD_Setup(void)
{
/* Configure the LCD pins config --------------------------------------------*/
LCD_Pins_Config();
delay(1); /* delay 50 ms */
LCD_WriteReg(0x0000,0x0001); //start internal osc 启动内部的振荡器
delay(1); /* delay 50 ms */
LCD_DB_AS_InPut();
delay(1); /* delay 50 ms */
/* 获取控制器型号 */
DeviceIdCode = LCD_ReadReg(0x0000);
DeviceIdCode = LCD_ReadReg(0x0000);
LCD_DB_AS_OutPut();
delay(1); /* delay 50 ms */ //start internal osc
if(DeviceIdCode == 0x8989)
{
// printf("\n\r This LCD is SSD1289 ")
}
if(DeviceIdCode == 0x9325)
{
// printf("\n\r This LCD is ili9325 ");
}
if(DeviceIdCode==0x9325||DeviceIdCode==0x9328)
{
LCD_WriteReg(0x00e3,0x3008);
LCD_WriteReg(0x00e7,0x0012);
LCD_WriteReg(0x00ef,0x1231); //Set the internal vcore voltage
// LCD_WriteReg(0x00e7,0x0010);
LCD_WriteReg(0x0000,0x0001); //start internal osc
LCD_WriteReg(0x0001,0x0100);
LCD_WriteReg(0x0002,0x0700); //power on sequence
LCD_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) ); //65K
LCD_WriteReg(0x0004,0x0000);
LCD_WriteReg(0x0008,0x0207);
LCD_WriteReg(0x0009,0x0000);
LCD_WriteReg(0x000a,0x0000); //display setting
LCD_WriteReg(0x000c,0x0001); //display setting
LCD_WriteReg(0x000d,0x0000); //0f3c
LCD_WriteReg(0x000f,0x0000);
//Power On sequence //
LCD_WriteReg(0x0010,0x0000);
LCD_WriteReg(0x0011,0x0007);
LCD_WriteReg(0x0012,0x0000);