OpenEdv-开源电子网

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

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

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-3-12
在线时间
7 小时
发表于 2016-3-12 16:25:28 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 郭小渣 于 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;      //画笔颜色:红色
        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不符,特来求助,谢谢。



最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-3-12 16:25:29 | 显示全部楼层
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-3-12
在线时间
7 小时
 楼主| 发表于 2016-3-16 08:53:39 | 显示全部楼层
我看了,然后根据函数介绍看,里面的设置和数据手册上的一样(9341)。sx,sy为距离左上角像素数。但是不知道为什么就是设置不了距离左上角的位置。
回复

使用道具 举报

灭了欧阳疯 该用户已被删除
发表于 2016-8-5 19:09:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 00:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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