找回密码
 立即注册
查看: 161|回复: 9

一个LCM外设读取问题|时序问题,已解决

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-06-28 13:49:44
已绑定手机

72

主题

2016

回帖

4540

积分

荣誉版主

无情的代码机器

积分
4540
发表于 2025-6-11 14:34:45 | 显示全部楼层 |阅读模式
使用Ai8051U实验箱+37.1 37.2例程测试

仅修改main函数和读取颜色测试函数对比:
1.IO读取是准确的
截图202506111431259073.jpg
2.LCM读取有差异
截图202506111431438184.jpg

为方便验证读取结果,代码修改内容:
截图202506111432086504.jpg
截图202506111432413391.jpg

Ai8051U-32Bit.zip (7.67 MB, 下载次数: 6)
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:248
  • 最近打卡:2025-06-28 00:00:35
已绑定手机

9

主题

107

回帖

1271

积分

金牌会员

积分
1271
发表于 2025-6-13 12:01:33 | 显示全部楼层
用这个试试看

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;
}

点评

不行,直接乱套了  发表于 2025-6-13 12:58
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-06-28 13:49:44
已绑定手机

72

主题

2016

回帖

4540

积分

荣誉版主

无情的代码机器

积分
4540
发表于 2025-6-13 12:57:53 | 显示全部楼层
不行,直接乱套了
截图202506131257497270.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:248
  • 最近打卡:2025-06-28 00:00:35
已绑定手机

9

主题

107

回帖

1271

积分

金牌会员

积分
1271
发表于 2025-6-13 13:35:18 | 显示全部楼层
工程打包了,我这是没问题的。
IMG_20250613_133023.jpg

STC8051U实验箱彩屏-读取颜色测试.rar

110.25 KB, 下载次数: 5

点评

666,再改个LCMIFCFG2 = 0x2F;和LCD_Read_ID就好了,看来是个时序问题。 原来的Lcd_RD_DATA_16Bit只需要屏蔽一次r = LCD_RD_DATA();就效果一样了 [attachimg]103946[/attachimg] [attachimg]103947[/attachimg] [a  详情 回复 发表于 2025-6-13 14:00
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-06-28 13:49:44
已绑定手机

72

主题

2016

回帖

4540

积分

荣誉版主

无情的代码机器

积分
4540
发表于 2025-6-13 14:00:34 | 显示全部楼层
C_w*** 发表于 2025-6-13 13:35
工程打包了,我这是没问题的。

666,再改个LCMIFCFG2 = 0x2F;和LCD_Read_ID就好了,看来是个时序问题。
原来的Lcd_RD_DATA_16Bit只需要屏蔽一次r = LCD_RD_DATA();就效果一样了


截图202506131359203624.jpg
截图202506131359389269.jpg
截图202506131359492966.jpg
截图202506131359595881.jpg

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:248
  • 最近打卡:2025-06-28 00:00:35
已绑定手机

9

主题

107

回帖

1271

积分

金牌会员

积分
1271
发表于 2025-6-13 14:41:04 | 显示全部楼层
erci*** 发表于 2025-6-13 14:00
666,再改个LCMIFCFG2 = 0x2F;和LCD_Read_ID就好了,看来是个时序问题。
原来的Lcd_RD_DATA_16Bit只需要 ...

使用 “LCD_SetCursor(x,y);//设置光标位置 ”这个语句,在设置完坐标后会写入(0x2C)写数据。
而读数据是2E,所以我根据手册,为了严谨些就直接操作了,没有调用这个函数。

点评

好吧,没注意看,谢了  发表于 2025-6-13 15:39
手册能上传下不,我也学习下,昨天在立创上找没找到  详情 回复 发表于 2025-6-13 15:11
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-06-28 13:49:44
已绑定手机

72

主题

2016

回帖

4540

积分

荣誉版主

无情的代码机器

积分
4540
发表于 2025-6-13 15:11:03 | 显示全部楼层
C_w*** 发表于 2025-6-13 14:41
使用 “LCD_SetCursor(x,y);//设置光标位置 ”这个语句,在设置完坐标后会写入(0x2C)写数据。
而读数据 ...

手册能上传下不,我也学习下,昨天在立创上找没找到

点评

例程包自身就带啊  发表于 2025-6-13 15:32
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-29 07:42 , Processed in 0.340344 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表