新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2020-3-30
- 在线时间
- 5 小时
|
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)
{}
}
|
|