一个LCM外设读取问题|时序问题,已解决
使用Ai8051U实验箱+37.1 37.2例程测试仅修改main函数和读取颜色测试函数对比:
1.IO读取是准确的
2.LCM读取有差异
为方便验证读取结果,代码修改内容:
用这个试试看
u16 LCD_RD_DATA(void)
{
u16 dat;
LCM_CS = 0;
LCMIFCR = 0x87; //Enable interface, Read data
while(!LCMIFSTA);
LCMIFSTA = 0x00;
LCM_CS = 1;
dat = LCMIFDATL;
return dat;
}
u16 LCD_RD_DATA_16Bit(void)
{
u16 r,g,b;
r = LCD_RD_DATA(); //dummy data
r = LCD_RD_DATA();
g = LCD_RD_DATA();
b = LCD_RD_DATA();
return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3);
}
u16 LCD_ReadPoint(u16 x,u16 y)
{
u16 color;
LCD_WR_REG(0x2A);
LCD_WR_DATA_16Bit(x);
LCD_WR_DATA_16Bit(x);
LCD_WR_REG(0x2B);
LCD_WR_DATA_16Bit(y);
LCD_WR_DATA_16Bit(y);
LCD_WR_REG(0x2E);
P2M0=0x00;
P2M1=0xff;
color = LCD_RD_DATA_16Bit();
P2M0=0xff;
P2M1=0x00;
return color;
} 不行,直接乱套了
工程打包了,我这是没问题的。 C_wolf 发表于 2025-6-13 13:35
工程打包了,我这是没问题的。
666,再改个LCMIFCFG2 = 0x2F;和LCD_Read_ID就好了,看来是个时序问题。
原来的Lcd_RD_DATA_16Bit只需要屏蔽一次r = LCD_RD_DATA();就效果一样了
ercircle 发表于 2025-6-13 14:00
666,再改个LCMIFCFG2 = 0x2F;和LCD_Read_ID就好了,看来是个时序问题。
原来的Lcd_RD_DATA_16Bit只需要 ...
使用 “LCD_SetCursor(x,y);//设置光标位置 ”这个语句,在设置完坐标后会写入(0x2C)写数据。
而读数据是2E,所以我根据手册,为了严谨些就直接操作了,没有调用这个函数。
C_wolf 发表于 2025-6-13 14:41
使用 “LCD_SetCursor(x,y);//设置光标位置 ”这个语句,在设置完坐标后会写入(0x2C)写数据。
而读数据 ...
手册能上传下不,我也学习下,昨天在立创上找没找到{:4_164:}
页:
[1]