9341实现距离屏幕左上角sx,sy的开窗口设置

2019-07-20 20:55发布

本帖最后由 郭小渣 于 2016-3-12 16:31 编辑

现在有个问题:int main(void)
{
         u8 x=0;
        u8 lcd_id[12];                                //存放LCD ID字符串
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);      //初始化延时函数
        uart_init(115200);                //初始化串口波特率为115200
        
        LED_Init();                                          //初始化LED
         LCD_Init();           //初始化LCD FSMC接口
        LCD_Set_Window(60,80,120,160);//LCD设置成160*120的显示窗口,开辟窗口以后不停丢数据。//求解:只能将起点设置在左上角,才能实现设置的大小
        POINT_COLOR=RED;      //画笔颜 {MOD}:红 {MOD}
        sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。                                         
          while(1)
        {                 
                switch(x)
                {
                        case 0CD_Clear(WHITE);break;
                        case 1CD_Clear(BLACK);break;
                        case 2CD_Clear(BLUE);break;
                        case 3CD_Clear(RED);break;
                        case 4CD_Clear(MAGENTA);break;
                        case 5CD_Clear(GREEN);break;
                        case 6CD_Clear(CYAN);break;
                        case 7CD_Clear(YELLOW);break;
                        case 8CD_Clear(BRRED);break;
                        case 9CD_Clear(GRAY);break;
                        case 10:LCD_Clear(LGRAY);break;
                        case 11:LCD_Clear(BROWN);break;
                }
                POINT_COLOR=RED;        
                LCD_ShowString(30,40,210,24,24,"STM32F4");        
                                            
          x++;
                if(x==12)x=0;
                LED0=!LED0;         
                delay_ms(1000);        
        }
}

如程序,LCD_Set_Window(60,80,120,160)需要实现的是320*240分辨率的LCD在正中间开一个120*160的窗口


但是实际上只有在LCD_Set_Window(0,0,120,160)才可以设置,也即左上角必须作为原点。


但是根据9341(确定型号为9341)datasheet,设置0x2a,0x2b即可设置窗口。

根据单步运行结果,发现LCD_Set_Window函数中,

                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(sx>>8);
                LCD_WR_DATA(sx&0XFF);         
                LCD_WR_DATA(width>>8);
                LCD_WR_DATA(width&0XFF);  
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(sy>>8);
                LCD_WR_DATA(sy&0XFF);
                LCD_WR_DATA(height>>8);
                LCD_WR_DATA(height&0XFF);


所有的数据和指令都是正确的。字符均能正常显示。

同时,比较奇怪的是,如果设置成LCD_Set_Window(60,80,60,80),同样是在左上角开120*160的窗口。如果设置成LCD_Set_Window(60,80,120,160),那么就变成180*240窗口。同时均以左上角为原点。
按照我的理解,也就是LCD_Set_Window(A,B,C,D),只能设置在左上角(A+C)*(B+D)分辨率的窗口。


但是这完全跟datasheet不符,特来求助,谢谢。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。