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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 08:51:39
已绑定手机

67

主题

1923

回帖

4301

积分

荣誉版主

无情的代码机器

积分
4301
发表于 6 天前 | 显示全部楼层 |阅读模式
使用Ai8051U实验箱+37.1 37.2例程测试

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

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:237
  • 最近打卡:2025-06-17 00:44:23
已绑定手机

7

主题

97

回帖

1201

积分

金牌会员

积分
1201
发表于 4 天前 | 显示全部楼层
用这个试试看

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

点评

不行,直接乱套了  发表于 4 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 08:51:39
已绑定手机

67

主题

1923

回帖

4301

积分

荣誉版主

无情的代码机器

积分
4301
发表于 4 天前 | 显示全部楼层
不行,直接乱套了
截图202506131257497270.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:237
  • 最近打卡:2025-06-17 00:44:23
已绑定手机

7

主题

97

回帖

1201

积分

金牌会员

积分
1201
发表于 4 天前 | 显示全部楼层
工程打包了,我这是没问题的。
IMG_20250613_133023.jpg

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

110.25 KB, 下载次数: 1

点评

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 08:51:39
已绑定手机

67

主题

1923

回帖

4301

积分

荣誉版主

无情的代码机器

积分
4301
发表于 4 天前 | 显示全部楼层
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
  • 打卡总天数:237
  • 最近打卡:2025-06-17 00:44:23
已绑定手机

7

主题

97

回帖

1201

积分

金牌会员

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

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

点评

好吧,没注意看,谢了  发表于 4 天前
手册能上传下不,我也学习下,昨天在立创上找没找到  详情 回复 发表于 4 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:209
  • 最近打卡:2025-06-17 08:51:39
已绑定手机

67

主题

1923

回帖

4301

积分

荣誉版主

无情的代码机器

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

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

点评

例程包自身就带啊  发表于 4 天前
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 15:02 , Processed in 1.153225 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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