高级会员

- 积分
- 830
- 金钱
- 830
- 注册时间
- 2020-7-1
- 在线时间
- 110 小时
|
本帖最后由 q879524825 于 2022-2-20 19:19 编辑
- //设置窗口,并自动设置画点坐标到窗口左上角(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)//1963竖屏特殊处理
- {
- sx=lcddev.width-width-sx;
- height=sy+height-1;
- LCD_WR_REG(lcddev.setxcmd);
- LCD_WR_DATA(sx>>8);
- LCD_WR_DATA(sx&0XFF);
- LCD_WR_DATA((sx+width-1)>>8);
- LCD_WR_DATA((sx+width-1)&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);
- }else if(lcddev.id==0X5510)
- {
- LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(sx>>8);
- LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(sx&0XFF);
- LCD_WR_REG(lcddev.setxcmd+2);LCD_WR_DATA(twidth>>8);
- LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA(twidth&0XFF);
- LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(sy>>8);
- LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(sy&0XFF);
- LCD_WR_REG(lcddev.setycmd+2);LCD_WR_DATA(theight>>8);
- LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA(theight&0XFF);
- }else //其他驱动IC
- {
- if(lcddev.dir==1)//横屏
- {
- //窗口值
- hsaval=sy;
- heaval=theight;
- vsaval=lcddev.width-twidth-1;
- veaval=lcddev.width-sx-1;
- }else
- {
- hsaval=sx;
- heaval=twidth;
- vsaval=sy;
- veaval=theight;
- }
- hsareg=0X50;heareg=0X51;//水平方向窗口寄存器
- vsareg=0X52;veareg=0X53;//垂直方向窗口寄存器
- //设置寄存器值
- LCD_WriteReg(hsareg,hsaval);
- LCD_WriteReg(heareg,heaval);
- LCD_WriteReg(vsareg,vsaval);
- LCD_WriteReg(veareg,veaval);
- LCD_SetCursor(sx,sy); //设置光标位置
- }
- }
复制代码 这个函数的具体作用是干什么的? 9341 对应的 配置 就是设置了一个窗口范围 。这时候再写GRAM 就是从这个窗口的 左上角开始写了吗? 还是怎么回事?
我想用DMA->FSMC刷屏,我不理解 这里该怎么 一块一块的 写入?
LCD例程里是逐个像素点进行写入的
而且 参考手册里 是有这个指令 进行局部区域的,这个函数也没有写入30H这个指令。。
|
|