OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2206|回复: 4

求教下原子哥和大家们,关于ILI9341 并口/8位,设置y坐标不管用的问题

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-3-30
在线时间
5 小时
发表于 2023-9-14 15:25:21 | 显示全部楼层 |阅读模式
1金钱
最近遇到一个ILI9341,设置Y坐标不管用。最后一个画线函数,我在初始化中添加了两条直线GUI_HLine(0,100,240, 0xffff);,GUI_HLine(0,101,240, 0xffff);但是TFT屏幕只显示一条直线。而且还是从其实X,Y坐标为(0,0)开始,不管y坐标设置成多大,屏幕只显示一条直线。求大神们解惑,谢谢
void Display_Init(void)
{
        LCD_CS_LOW();
        LCD_RD_HIGH();
        LCD_RET_HIGH();
        Delay_ns(7);
        LCD_RET_LOW();
        Delay_ns(70);
        LCD_RET_HIGH();
        Delay_ns(700);
       
        LCD_WriteCMD(0xCB);  
        LCD_WriteDAT(0x39);
        LCD_WriteDAT(0x2C);
        LCD_WriteDAT(0x00);
        LCD_WriteDAT(0x34);
        LCD_WriteDAT(0x02);

        LCD_WriteCMD(0xCF);  
        LCD_WriteDAT(0x00);
        LCD_WriteDAT(0XC1);
        LCD_WriteDAT(0X30);
         
        LCD_WriteCMD(0xE8);  
        LCD_WriteDAT(0x85);
        LCD_WriteDAT(0x00);
        LCD_WriteDAT(0x78);
         
        LCD_WriteCMD(0xEA);  
        LCD_WriteDAT(0x00);
        LCD_WriteDAT(0x00);

        //LCD_WriteCMD(0x21);
         
        LCD_WriteCMD(0xED);  
        LCD_WriteDAT(0x64);
        LCD_WriteDAT(0x03);
        LCD_WriteDAT(0X12);
        LCD_WriteDAT(0X81);

        LCD_WriteCMD(0xF7);  
        LCD_WriteDAT(0x20);
         
        LCD_WriteCMD(0xC0);   
        LCD_WriteDAT(0x23);  
         
        LCD_WriteCMD(0xC1);   
        LCD_WriteDAT(0x10);  
         
        LCD_WriteCMD(0xC5);   
        LCD_WriteDAT(0x3e);
        LCD_WriteDAT(0x28);
         
        LCD_WriteCMD(0xC7);
        LCD_WriteDAT(0x86);
         
        LCD_WriteCMD(0x36);   
        LCD_WriteDAT(0x48);       
         
        LCD_WriteCMD(0x3A);   
        LCD_WriteDAT(0x55);

        LCD_WriteCMD(0xB1);   
        LCD_WriteDAT(0x00);  
        LCD_WriteDAT(0x1B);
         
        LCD_WriteCMD(0xB6);   
        LCD_WriteDAT(0x08);
        LCD_WriteDAT(0x82);
        LCD_WriteDAT(0x27);
         
        LCD_WriteCMD(0xF2);   
        LCD_WriteDAT(0x00);
         
        LCD_WriteCMD(0x26);   
        LCD_WriteDAT(0x01);
         
        LCD_WriteCMD(0xE0);   
        LCD_WriteDAT(0x0F);
        LCD_WriteDAT(0x31);
        LCD_WriteDAT(0x2B);
        LCD_WriteDAT(0x0C);
        LCD_WriteDAT(0x0E);
        LCD_WriteDAT(0x08);
        LCD_WriteDAT(0x4E);
        LCD_WriteDAT(0xF1);
        LCD_WriteDAT(0x37);
        LCD_WriteDAT(0x07);
        LCD_WriteDAT(0x10);
        LCD_WriteDAT(0x03);
        LCD_WriteDAT(0x0E);
        LCD_WriteDAT(0x09);
        LCD_WriteDAT(0x00);

        LCD_WriteCMD(0XE1);  
        LCD_WriteDAT(0x00);
        LCD_WriteDAT(0x0E);
        LCD_WriteDAT(0x14);
        LCD_WriteDAT(0x03);
        LCD_WriteDAT(0x11);
        LCD_WriteDAT(0x07);
        LCD_WriteDAT(0x31);
        LCD_WriteDAT(0xC1);
        LCD_WriteDAT(0x48);
        LCD_WriteDAT(0x08);
        LCD_WriteDAT(0x0F);
        LCD_WriteDAT(0x0C);
        LCD_WriteDAT(0x31);
        LCD_WriteDAT(0x36);
        LCD_WriteDAT(0x0F);
         
        LCD_WriteCMD(0x11);
        Delay_ns(100);                                       
        LCD_WriteCMD(0x29);
//        LCD_WriteCMD(0x2c);
        LCD_Display_Dir(0);
       
}

void LCD_Display_Dir(uint8_t dir)
{
        lcddev.dir=0;       
        lcddev.width=240;
        lcddev.height=320;

        lcddev.wramcmd=0X2C;
        lcddev.setxcmd=0X2A;
        lcddev.setycmd=0X2B;  
//        DFT_SCAN_DIR=U2D_L2R;               
        LCD_Scan_Dir(dir);       
}



void LCD_Scan_Dir(uint8_t dir)
{
        uint16_t regval=0;
        uint8_t dirreg=0;

        switch(dir)
        {
                case L2R_U2D:
                        regval|=(0<<7)|(0<<6)|(0<<5);
                        break;
                case L2R_D2U:
                        regval|=(1<<7)|(0<<6)|(0<<5);
                        break;
                case R2L_U2D:
                        regval|=(0<<7)|(1<<6)|(0<<5);
                        break;
                case R2L_D2U:
                        regval|=(1<<7)|(1<<6)|(0<<5);
                        break;         
                case U2D_L2R:
                        regval|=(0<<7)|(0<<6)|(1<<5);
                        break;
                case U2D_R2L:
                        regval|=(0<<7)|(1<<6)|(1<<5);
                        break;
                case D2U_L2R:
                        regval|=(1<<7)|(0<<6)|(1<<5);
                        break;
                case D2U_R2L:
                        regval|=(1<<7)|(1<<6)|(1<<5);
                        break;         
        }
        dirreg=0X36;
        regval|=0x08;       
       
        LCD_WriteReg(dirreg,regval);
                       
        LCD_WriteCMD(lcddev.setxcmd);
        LCD_WriteDAT(0);
        LCD_WriteDAT(0);
        LCD_WriteDAT((lcddev.width-1)>>8);
        LCD_WriteDAT((lcddev.width-1)&0XFF);
        LCD_WriteCMD(lcddev.setycmd);
        LCD_WriteDAT(0);
        LCD_WriteDAT(0);
        LCD_WriteDAT((lcddev.height-1)>>8);
        LCD_WriteDAT((lcddev.height-1)&0XFF);         
}

void LCD_setwindow(unsigned char x0,unsigned int y0,unsigned char x1,unsigned int y1)
{
   LCD_WriteCMD(0x2A);
       
   LCD_WriteDAT(x0>>8);
   LCD_WriteDAT(x0&0xff);
   LCD_WriteDAT(x1>>8);
   LCD_WriteDAT(x1&0xff);
       
   LCD_WriteDAT(0x2B);
       
   LCD_WriteDAT(y0>>8);
   LCD_WriteDAT(y0&0xff);
   LCD_WriteDAT(y1>>8);
   LCD_WriteDAT(y1&0xff);
       
   LCD_WriteCMD(0x2C);
}


void GUI_HLine(uint8_t x, uint32_t y, uint8_t length, uint32_t color)
{
       
        LCD_setwindow(x,y,x+length-1,y);
        do
        {  
                LCD_WriteDAT_16U(color);
                length--;
        }while(length);
}



int32_t main(void)
{                       
Display_Init();
GUI_HLine(0,50,240, 0xffff);

GUI_HLine(0,51,240, 0xffff);

while(1)
{}

}

最佳答案

查看完整内容[请看2#楼]

你是不是开窗没设置好?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2023-9-14 15:25:22 | 显示全部楼层
你是不是开窗没设置好?
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-3-30
在线时间
5 小时
 楼主| 发表于 2023-9-15 10:35:39 | 显示全部楼层
自己给自己顶下
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-3-30
在线时间
5 小时
 楼主| 发表于 2023-9-18 11:00:39 | 显示全部楼层
正点原子 发表于 2023-9-16 00:18
你是不是开窗没设置好?

是的,原子哥。现在问题找到了,就是开窗的问题。还有个问题就是,在设置列、页顺序的原因
回复

使用道具 举报

1

主题

24

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1157
金钱
1157
注册时间
2019-3-13
在线时间
89 小时
发表于 2023-9-18 14:01:42 | 显示全部楼层
111111111111111111111111111111111111111
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 15:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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