找回密码
 立即注册
查看: 142|回复: 29

8H8K64U使用LCM驱动ILI9341异常 | 可以了,TFT模块有个电阻调整后

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-06-12 22:59:24
已绑定手机

1

主题

10

回帖

37

积分

新手上路

积分
37
发表于 6 天前 | 显示全部楼层 |阅读模式
8H8K64U使用LCM驱动ILI9341异常

参考例程重写了一份屏幕驱动,后面调试发现读取id都回复异常,以下为抓取波形和源码:

void Delay50ms(void)        //@40.000MHz
{
        unsigned char data i, j, k;

        _nop_();
        _nop_();
        i = 11;
        j = 38;
        k = 92;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void LCD_GPIO_Init(void)                //LCD引脚初始化
{
  P2M0 = 0xff; P2M1 = 0x00;
        P3M0 |= 0xf0; P3M1 &= 0x0f;
        P5M0 = 0x10; P5M1 = 0x00;
}

void LCD_LCM_Init(void)                //LCD外设初始化
{
        LCMIFCFG = 0x90;        //使能LCM中断,数据端口P2,8位数据宽度,8080模式
        LCMIFCFG2 = 0x3f;                //RD=P3.7,WR=P3.6
        LCMIFSTA = 0x00;                //状态寄存器清零
}

void LCD_Reset(void)                //lcd复位
{
        Delay50ms();                //等待
        LCD_RESET = 0;                //开始复位
        Delay50ms();                //等待
        LCD_RESET = 1;                //复位
        Delay50ms();                //等待复位
}

void LCD_WR_REG(u8 Reg)                 //lcd写命令
{
        LCMIFDATL = Reg;                //装填待写入指令
        LCD_CS = 0;                //片选拉低
        LCD_RS = 0;                //写命令
        LCMIFCR = 0x84;                //允许lcm接口功能,写命令
        while(!LCD_CS);                //等待数据发送完毕
}

void LCD_WR_DATA(u8 Data)                //lcd写8bit数据
{
        LCMIFDATL = Data;                //装填待写入数据
        LCD_CS = 0;                //片选拉低
        LCD_RS = 1;                //写数据
        LCMIFCR = 0x85;                //允许lcm接口功能,写数据
        while(!LCD_CS);                //等待数据发送完毕
}

u8 LCD_RD_DATA(void)                //lcd读8bit数据
{
        u8 dat;
        LCD_CS = 0;
        LCD_RS = 1;                //读数据
        LCMIFCR = 0x87;                //允许lcm接口功能,读数据
        while(!LCD_CS);                //等待数据接收完毕
        dat = LCMIFDATL;
        return dat;
}

void LCD_WR_DATA16(u16 Data)                //lcd写16bit数据
{
        LCD_WR_DATA((u8)(Data >> 8));                //lcd写高8位数据
        LCD_WR_DATA((u8)Data);                //lcd写低8位数据
}

void LCD_ILI9341_Init(void)
{
        LCD_WR_REG(0xCF);  
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0xD9);         //0xC1
        LCD_WR_DATA(0X30);
        LCD_WR_REG(0xED);  
        LCD_WR_DATA(0x64);
        LCD_WR_DATA(0x03);
        LCD_WR_DATA(0X12);
        LCD_WR_DATA(0X81);
        LCD_WR_REG(0xE8);  
        LCD_WR_DATA(0x85);
        LCD_WR_DATA(0x10);
        LCD_WR_DATA(0x7A);
        LCD_WR_REG(0xCB);  
        LCD_WR_DATA(0x39);
        LCD_WR_DATA(0x2C);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x34);
        LCD_WR_DATA(0x02);
        LCD_WR_REG(0xF7);  
        LCD_WR_DATA(0x20);
        LCD_WR_REG(0xEA);  
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x00);
        LCD_WR_REG(0xC0);    //Power control
        LCD_WR_DATA(0x1B);   //VRH[5:0]
        LCD_WR_REG(0xC1);    //Power control
        LCD_WR_DATA(0x12);   //SAP[2:0];BT[3:0] 0x01
        LCD_WR_REG(0xC5);    //VCM control
        LCD_WR_DATA(0x08);          //30
        LCD_WR_DATA(0x26);          //30
        LCD_WR_REG(0xC7);    //VCM control2
        LCD_WR_DATA(0XB7);
        LCD_WR_REG(0x36);    // Memory Access Control
        LCD_WR_DATA(0x08);
        LCD_WR_REG(0x3A);   
        LCD_WR_DATA(0x55);
        LCD_WR_REG(0xB1);   
        LCD_WR_DATA(0x00);   
        LCD_WR_DATA(0x1A);
        LCD_WR_REG(0xB6);    // Display Function Control
        LCD_WR_DATA(0x0A);
        LCD_WR_DATA(0xA2);
        LCD_WR_REG(0xF2);    // 3Gamma Function Disable
        LCD_WR_DATA(0x00);
        LCD_WR_REG(0x26);    //Gamma curve selected
        LCD_WR_DATA(0x01);
        LCD_WR_REG(0xE0);    //Set Gamma
        LCD_WR_DATA(0x0F);
        LCD_WR_DATA(0x1D);
        LCD_WR_DATA(0x1A);
        LCD_WR_DATA(0x0A);
        LCD_WR_DATA(0x0D);
        LCD_WR_DATA(0x07);
        LCD_WR_DATA(0x49);
        LCD_WR_DATA(0X66);
        LCD_WR_DATA(0x3B);
        LCD_WR_DATA(0x07);
        LCD_WR_DATA(0x11);
        LCD_WR_DATA(0x01);
        LCD_WR_DATA(0x09);
        LCD_WR_DATA(0x05);
        LCD_WR_DATA(0x04);                  
        LCD_WR_REG(0XE1);    //Set Gamma
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x18);
        LCD_WR_DATA(0x1D);
        LCD_WR_DATA(0x02);
        LCD_WR_DATA(0x0F);
        LCD_WR_DATA(0x04);
        LCD_WR_DATA(0x36);
        LCD_WR_DATA(0x13);
        LCD_WR_DATA(0x4C);
        LCD_WR_DATA(0x07);
        LCD_WR_DATA(0x13);
        LCD_WR_DATA(0x0F);
        LCD_WR_DATA(0x2E);
        LCD_WR_DATA(0x2F);
        LCD_WR_DATA(0x05);
        LCD_WR_REG(0x36);   // MADCTL
        LCD_WR_DATA(0x08);   // 竖屏 + BGR}
        LCD_WR_REG(0x2A);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0xef);
        LCD_WR_REG(0x2B);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x01);
        LCD_WR_DATA(0x3f);         
        LCD_WR_REG(0x11);         //Exit Sleep
        Delay50ms();Delay50ms();Delay50ms();
        LCD_WR_REG(0x29);         //display on        
}

void LCD_Clear(u16 color)
{
        u16 i, j;
        LCD_WR_REG(0x2A);
        LCD_WR_DATA(0x00); LCD_WR_DATA(0x00);       // X start
        LCD_WR_DATA(0x00); LCD_WR_DATA(0xEF);       // X end (239)

        LCD_WR_REG(0x2B);
        LCD_WR_DATA(0x00); LCD_WR_DATA(0x00);       // Y start
        LCD_WR_DATA(0x01); LCD_WR_DATA(0x3F);       // Y end (319)

        LCD_WR_REG(0x2C);                            // Memory Write

        for (i = 0; i < 320; i++)
        {
                for (j = 0; j < 240; j++)
                {
                        LCD_WR_DATA16(color);
                }
        }
}

void LCD_Init()
{
        LCD_GPIO_Init();
        LCD_LCM_Init();
        LCD_Reset();
        LCD_ILI9341_Init();
}

void Uart1_Init(void)        //115200bps@40.000MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TL1 = 0xA9;                        //设置定时初始值
        TH1 = 0xFF;                        //设置定时初始值
        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
}

void Init()
{
        P_SW2 = 0x80;                //使能访问控制寄存器
        EA = 1;                //开启总中断
        LCD_Init();
        Uart1_Init();
}

void LCD_ReadReg(u16 LCD_Reg,u8 *Rval,int n)
{
        LCD_WR_REG(LCD_Reg);
        while(n--)
        {               
                *(Rval++) = LCD_RD_DATA();
        }
}

u16 LCD_Read_ID(void)
{
        u8 val[4] = {0};
        LCD_ReadReg(0xD3,val,4);
        return (val[2]<<8)|val[3];
}

void Delay5ms(void)        //@40.000MHz
{
        unsigned char data i, j, k;

        _nop_();
        i = 2;
        j = 4;
        k = 185;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void Delay1000ms(void)        //@40.000MHz
{
        unsigned char data i, j, k;

        _nop_();
        i = 203;
        j = 236;
        k = 131;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void main()
{
        Init();
        LCD_Clear(0x5555);
        while(1)
        {
                u16 dat = LCD_Read_ID();
                SBUF = (u8)dat >> 8;
                Delay5ms();
                SBUF = (u8)dat;
                Delay1000ms();
        }
}

void LCM_Interrupt(void) interrupt 59
{
        LCMIFSTA = 0x00;
        LCD_CS = 1;
}


截图202506102108319584.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-06-12 22:59:24
已绑定手机

1

主题

10

回帖

37

积分

新手上路

积分
37
发表于 6 天前 | 显示全部楼层
以及原理图,也并不确定硬件是否有问题
截图202506102115446123.jpg
截图202506102116013153.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:99
  • 最近打卡:2025-06-16 09:28:47

733

主题

1万

回帖

1万

积分

管理员

积分
16627
发表于 6 天前 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1910

回帖

4291

积分

荣誉版主

无情的代码机器

积分
4291
发表于 6 天前 | 显示全部楼层
Ai8051U实验箱ILI9341的例程(8bit),对比看看,和楼上这个电路图部分引脚不一样:
37.2-2.4寸ILI9341驱动TFT显示屏实验程序-带触摸功能,硬件I8080接口程序.zip (3.59 MB, 下载次数: 2)

截图202506102135425582.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:99
  • 最近打卡:2025-06-16 09:28:47

733

主题

1万

回帖

1万

积分

管理员

积分
16627
发表于 6 天前 | 显示全部楼层
本坛搜索 关键字 ILI9341
截图202506102137508891.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-06-12 22:59:24
已绑定手机

1

主题

10

回帖

37

积分

新手上路

积分
37
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-6-10 21:35
Ai8051U实验箱ILI9341的例程(8bit),对比看看,和楼上这个电路图部分引脚不一样:

我的程序本身就是对照着stc8h8k64的试验箱例程写的,ai8051的也对比过,甚至吧8h8k64的例程修改引脚定义下载测试过,逻辑分析仪都能采集到单片机发出的对应的数据,但屏就是没反应。我对比ai8051和tc8h8k64初始化有个区别是并口初始化时一个是准双向一个是推挽,我都测试了,都不行,我甚至还写了一个软件的,都不行,以及信号很怪,后面我再补一张准双向接收的时序

点评

这个屏的出厂参数是否支持2.8V? 工程打包上传下,明天测下看看  详情 回复 发表于 6 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-06-12 22:59:24
已绑定手机

1

主题

10

回帖

37

积分

新手上路

积分
37
发表于 6 天前 | 显示全部楼层
准双向时的接收波形
截图202506102154267534.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1910

回帖

4291

积分

荣誉版主

无情的代码机器

积分
4291
发表于 6 天前 | 显示全部楼层
kutw*** 发表于 2025-6-10 21:54
我的程序本身就是对照着stc8h8k64的试验箱例程写的,ai8051的也对比过,甚至吧8h8k64的例程修改引脚定义 ...

这个屏的出厂参数是否支持2.8V?
工程打包上传下,明天测下看看
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-06-12 22:59:24
已绑定手机

1

主题

10

回帖

37

积分

新手上路

积分
37
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-6-10 21:59
这个屏的出厂参数是否支持2.8V?
工程打包上传下,明天测下看看

问卖家要的手册看着是支持的,我一会上传打包,感谢
截图202506102201496971.jpg
截图202506102202079563.jpg

点评

你这个2.8V贴着下限呀....有个压降什么的不凉了,示波器测下电源稳不稳  详情 回复 发表于 6 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1910

回帖

4291

积分

荣誉版主

无情的代码机器

积分
4291
发表于 6 天前 | 显示全部楼层
kutw*** 发表于 2025-6-10 22:03
问卖家要的手册看着是支持的,我一会上传打包,感谢

你这个2.8V贴着下限呀....有个压降什么的不凉了,示波器测下电源稳不稳
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 11:14 , Processed in 0.872069 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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