在TFTLCD实验中,为什么驱动芯片不一样,快速画点,设置LCD显示方向等函数也不一样 我感觉除了初始化函数 还有一些命令不一样...

2019-08-14 01:07发布

void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color){          
        if(lcddev.id==0X9341||lcddev.id==0X5310)
        {
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                           
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                           
        }else if(lcddev.id==0X5510)
        {
                LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(x>>8);  
                LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(x&0XFF);          
                LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(y>>8);  
                LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(y&0XFF);
        }else if(lcddev.id==0X1963)
        {
                if(lcddev.dir==0)x=lcddev.width-1-x;
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                
                LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                
                LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                
        }else if(lcddev.id==0X6804)
        {                    
                if(lcddev.dir==1)x=lcddev.width-1-x;//横屏时处理
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                         
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                
        }else
        {
                if(lcddev.dir==1)x=lcddev.width-1-x;//横屏其实就是调转x,y坐标
                LCD_WriteReg(lcddev.setxcmd,x);
                LCD_WriteReg(lcddev.setycmd,y);
        }                         
        LCD->LCD_REG=lcddev.wramcmd;
        LCD->LCD_RAM=color;
}         
//SSD1963 背光设置
//pwm:背光等级,0~100.越大越亮.
void LCD_SSD_BackLightSet(u8 pwm)
{       
        LCD_WR_REG(0xBE);        //配置PWM输出
        LCD_WR_DATA(0x05);        //1设置PWM频率
        LCD_WR_DATA(pwm*2.55);//2设置PWM占空比
        LCD_WR_DATA(0x01);        //3设置C
        LCD_WR_DATA(0xFF);        //4设置D
        LCD_WR_DATA(0x00);        //5设置E
        LCD_WR_DATA(0x00);        //6设置F
}

//设置LCD显示方向
//dir:0,竖屏;1,横屏
void LCD_Display_Dir(u8 dir)
{
        if(dir==0)                        //竖屏
        {
                lcddev.dir=0;        //竖屏
                lcddev.width=240;
                lcddev.height=320;
                if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310)
                {
                        lcddev.wramcmd=0X2C;
                         lcddev.setxcmd=0X2A;
                        lcddev.setycmd=0X2B;           
                        if(lcddev.id==0X6804||lcddev.id==0X5310)
                        {
                                lcddev.width=320;
                                lcddev.height=480;
                        }
                }else if(lcddev.id==0x5510)
                {
                        lcddev.wramcmd=0X2C00;
                         lcddev.setxcmd=0X2A00;
                        lcddev.setycmd=0X2B00;
                        lcddev.width=480;
                        lcddev.height=800;
                }else if(lcddev.id==0X1963)
                {
                        lcddev.wramcmd=0X2C;        //设置写入GRAM的指令
                        lcddev.setxcmd=0X2B;        //设置写X坐标指令
                        lcddev.setycmd=0X2A;        //设置写Y坐标指令
                        lcddev.width=480;                //设置宽度480
                        lcddev.height=800;                //设置高度800  
                }else
                {
                        lcddev.wramcmd=0X22;
                         lcddev.setxcmd=0X20;
                        lcddev.setycmd=0X21;  
                }
        }else                                 //横屏
        {                                         
                lcddev.dir=1;        //横屏
                lcddev.width=320;
                lcddev.height=240;
                if(lcddev.id==0X9341||lcddev.id==0X5310)
                {
                        lcddev.wramcmd=0X2C;
                         lcddev.setxcmd=0X2A;
                        lcddev.setycmd=0X2B;           
                }else if(lcddev.id==0X6804)         
                {
                        lcddev.wramcmd=0X2C;
                         lcddev.setxcmd=0X2B;
                        lcddev.setycmd=0X2A;
                }else if(lcddev.id==0x5510)
                {
                        lcddev.wramcmd=0X2C00;
                         lcddev.setxcmd=0X2A00;
                        lcddev.setycmd=0X2B00;
                        lcddev.width=800;
                        lcddev.height=480;
                }else if(lcddev.id==0X1963)
                {
                        lcddev.wramcmd=0X2C;        //设置写入GRAM的指令
                        lcddev.setxcmd=0X2A;        //设置写X坐标指令
                        lcddev.setycmd=0X2B;        //设置写Y坐标指令
                        lcddev.width=800;                //设置宽度800
                        lcddev.height=480;                //设置高度480  
                }else
                {
                        lcddev.wramcmd=0X22;
                         lcddev.setxcmd=0X21;
                        lcddev.setycmd=0X20;  
                }
                if(lcddev.id==0X6804||lcddev.id==0X5310)
                {          
                        lcddev.width=480;
                        lcddev.height=320;                        
                }
        }
        LCD_Scan_Dir(DFT_SCAN_DIR);        //默认扫描方向
}         
//设置窗口,并自动设置画点坐标到窗口左上角(sx,sy).
//sx,sy:窗口起始坐标(左上角)
//width,height:窗口宽度和高度,必须大于0!!
//窗体大小:width*height.
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height)
{   
        u8 hsareg,heareg,vsareg,veareg;
        u16 hsaval,heaval,vsaval,veaval;
        u16 twidth,theight;
        twidth=sx+width-1;
        theight=sy+height-1;
        if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X6804||(lcddev.dir==1&&lcddev.id==0X1963))
        {
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(sx>>8);
                LCD_WR_DATA(sx&0XFF);         
                LCD_WR_DATA(twidth>>8);
                LCD_WR_DATA(twidth&0XFF);  
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(sy>>8);
                LCD_WR_DATA(sy&0XFF);
                LCD_WR_DATA(theight>>8);
                LCD_WR_DATA(theight&0XFF);
        }else if(lcddev.id==0X1963)////
//////////////////////////////////////////////////////////////////////////







在TFTLCD实验中,为什么驱动芯片不一样,快速画点,设置LCD显示方向等函数也不一样 我感觉除了初始化函数 还有一些命令不一样、、、、、其它的应该一样啊

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
xiezhoujian
2019-08-14 07:33
不同的厂家的驱动IC,寄存器名一般是不同的,除了一些通用寄存器,如:
0x10进入睡眠,0x11退出睡眠
0x28,display off 0x29,display on
0x35, TE ON,34 te off这些通用寄存是相似的
0x2c 写GRAM,TFT的显示原理都是一样的,电压控制液晶翻转,通过控制翻角度实现不同亮度的光射出来,没必要纠结这些初始化
有技术问题,可直接加我QQ
有需要3.97寸液晶屏(CPT3.97+OTM8009A)的朋友,可以联系我支持MCU-8/16/24BIT,可用于STM32的FSMC接口,目前数量有2500PCS,提供液晶屏的所有技术支持(初始化,CAD图纸,平台上的调试)
淘宝链接图片:https://item.taobao.com/item.htm?id=558608137119
QQ:1263857188

一周热门 更多>