OpenEdv-开源电子网

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

关于LCD驱动实验的LCD_Set_Window 函数的作用?

[复制链接]

16

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
830
金钱
830
注册时间
2020-7-1
在线时间
110 小时
发表于 2022-2-20 19:16:27 | 显示全部楼层 |阅读模式
本帖最后由 q879524825 于 2022-2-20 19:19 编辑
  1. //设置窗口,并自动设置画点坐标到窗口左上角(sx,sy).
  2. //sx,sy:窗口起始坐标(左上角)
  3. //width,height:窗口宽度和高度,必须大于0!!
  4. //窗体大小:width*height.
  5. void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height)
  6. {   
  7.         u8 hsareg,heareg,vsareg,veareg;
  8.         u16 hsaval,heaval,vsaval,veaval;
  9.         u16 twidth,theight;
  10.         twidth=sx+width-1;
  11.         theight=sy+height-1;
  12.         if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X6804||(lcddev.dir==1&&lcddev.id==0X1963))
  13.         {
  14.                 LCD_WR_REG(lcddev.setxcmd);
  15.                 LCD_WR_DATA(sx>>8);
  16.                 LCD_WR_DATA(sx&0XFF);         
  17.                 LCD_WR_DATA(twidth>>8);
  18.                 LCD_WR_DATA(twidth&0XFF);  
  19.                 LCD_WR_REG(lcddev.setycmd);
  20.                 LCD_WR_DATA(sy>>8);
  21.                 LCD_WR_DATA(sy&0XFF);
  22.                 LCD_WR_DATA(theight>>8);
  23.                 LCD_WR_DATA(theight&0XFF);
  24.         }else if(lcddev.id==0X1963)//1963竖屏特殊处理
  25.         {
  26.                 sx=lcddev.width-width-sx;
  27.                 height=sy+height-1;
  28.                 LCD_WR_REG(lcddev.setxcmd);
  29.                 LCD_WR_DATA(sx>>8);
  30.                 LCD_WR_DATA(sx&0XFF);         
  31.                 LCD_WR_DATA((sx+width-1)>>8);
  32.                 LCD_WR_DATA((sx+width-1)&0XFF);  
  33.                 LCD_WR_REG(lcddev.setycmd);
  34.                 LCD_WR_DATA(sy>>8);
  35.                 LCD_WR_DATA(sy&0XFF);
  36.                 LCD_WR_DATA(height>>8);
  37.                 LCD_WR_DATA(height&0XFF);                 
  38.         }else if(lcddev.id==0X5510)
  39.         {
  40.                 LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(sx>>8);  
  41.                 LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(sx&0XFF);         
  42.                 LCD_WR_REG(lcddev.setxcmd+2);LCD_WR_DATA(twidth>>8);   
  43.                 LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA(twidth&0XFF);   
  44.                 LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(sy>>8);   
  45.                 LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(sy&0XFF);  
  46.                 LCD_WR_REG(lcddev.setycmd+2);LCD_WR_DATA(theight>>8);   
  47.                 LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA(theight&0XFF);  
  48.         }else        //其他驱动IC
  49.         {
  50.                 if(lcddev.dir==1)//横屏
  51.                 {
  52.                         //窗口值
  53.                         hsaval=sy;                                
  54.                         heaval=theight;
  55.                         vsaval=lcddev.width-twidth-1;
  56.                         veaval=lcddev.width-sx-1;                                
  57.                 }else
  58.                 {
  59.                         hsaval=sx;                                
  60.                         heaval=twidth;
  61.                         vsaval=sy;
  62.                         veaval=theight;
  63.                 }
  64.                 hsareg=0X50;heareg=0X51;//水平方向窗口寄存器
  65.                 vsareg=0X52;veareg=0X53;//垂直方向窗口寄存器                                                                     
  66.                 //设置寄存器值
  67.                 LCD_WriteReg(hsareg,hsaval);
  68.                 LCD_WriteReg(heareg,heaval);
  69.                 LCD_WriteReg(vsareg,vsaval);
  70.                 LCD_WriteReg(veareg,veaval);               
  71.                 LCD_SetCursor(sx,sy);        //设置光标位置
  72.         }
  73. }
复制代码
这个函数的具体作用是干什么的? 9341 对应的 配置 就是设置了一个窗口范围 。这时候再写GRAM 就是从这个窗口的 左上角开始写了吗? 还是怎么回事?
我想用DMA->FSMC刷屏,我不理解 这里该怎么 一块一块的 写入?

LCD例程里是逐个像素点进行写入的

而且 参考手册里 是有这个指令 进行局部区域的,这个函数也没有写入30H这个指令。。
lcd.png


刚跨过大门,入眼是海洋
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1732
注册时间
2021-4-11
在线时间
320 小时
发表于 2022-2-21 10:05:56 | 显示全部楼层
设置一个窗口,窗口上面可以显示图片或者是摄像头的显示区域
回复 支持 反对

使用道具 举报

16

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
830
金钱
830
注册时间
2020-7-1
在线时间
110 小时
 楼主| 发表于 2022-2-21 14:32:37 | 显示全部楼层
huanan 发表于 2022-2-21 10:05
设置一个窗口,窗口上面可以显示图片或者是摄像头的显示区域

我要用LVGL 这个GUI ,想用DMA 加速刷屏, 是不是就设置一下窗口 然后直接DMA传入数据到这个窗口里
刚跨过大门,入眼是海洋
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 06:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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