本帖最后由 郭小渣 于 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 0

CD_Clear(WHITE);break;
case 1

CD_Clear(BLACK);break;
case 2

CD_Clear(BLUE);break;
case 3

CD_Clear(RED);break;
case 4

CD_Clear(MAGENTA);break;
case 5

CD_Clear(GREEN);break;
case 6

CD_Clear(CYAN);break;
case 7

CD_Clear(YELLOW);break;
case 8

CD_Clear(BRRED);break;
case 9

CD_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不符,特来求助,谢谢。
一周热门 更多>