野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11239|回复: 4

《STM32库开发实战指南》22章,为什么要不停地开辟显示区域

[复制链接]
发表于 2015-3-30 16:51:12 | 显示全部楼层 |阅读模式
程序如下(加蓝色部分):程序在一开头己经开辟了一个8*16的显示区域,为什么下面每一行还要开辟显示区域?
/******************************************************
* 函数名::LCD_Char_O
* 描述:在指定位置悬浮显示指定字符。
*输入  :            X
           Y
           acsii
           Color
  void LCD_Char_O(u16 x, u16 y, u8 acsii,u16 Color)
{      
#define MAX_CHAR_POSX (320-8)
#define MAX_CHAR_POSY (240-16)
    u8 temp, t, pos;     
    if(x > MAX_CHAR_POSX || y > MAX_CHAR_POSY)
        return;

    LCD_open_windows(x,y,8,16);

    for (pos=0;pos<16;pos++)
    {
        temp=ascii_8x16[((acsii-0x20)*16)+pos];

        for(t=0; t<8; t++)
        {

            if(temp & 0x80)
            {
                           if(t==0)                                                                           /*è&#231;1&#251;ê&#199;ò&#187;DD&#198;eμ&#227;--&#212;ò&#214;&#216;D&#194;&#191;a&#198;&#244;ò&#187;&#184;&#246;&#190;&#216;D&#206;*/
                                {
                                        LCD_open_windows(x,y+pos,8,16-pos);
                                        LCD_WR_Data(Color);
                                }
                                else
                                {
                                        LCD_WR_Data(Color);        
                                }
            }
                        else         
            {
                                if(t==7)                                                                        
                                {
                                                LCD_open_windows(x,y+pos+1,8,16-pos-1);                 
                                }
                                else
                                {
                                                LCD_open_windows(x+t+1,y+pos,8-t,1);

            }

            temp <<= 1;        

        }        
    }
#undef MAX_CHAR_POSX
#undef MAX_CHAR_POSY   
}
回复

使用道具 举报

发表于 2015-3-31 09:00:32 | 显示全部楼层
一行一行地开辟窗口,ili9341执行比较快
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 22:38:52 | 显示全部楼层
本帖最后由 地球依然在转 于 2015-4-1 11:28 编辑
flyleaf 发表于 2015-3-31 09:00
一行一行地开辟窗口,ili9341执行比较快

可是一开头不是己经开辟了一个矩形了吗?
LCD_open_windows(x,y,8,16);
下面每一行,每一个点,还要重新开辟窗口,为什么要重复开辟了?

LCD_open_windows(x,y,8,16); 这里是一开头开辟矩形窗口,这里己包含整个显示空间了。
下面相当于每一个点都要开辟一个矩形的窗口,
LCD_open_windows(x,y+pos,8,16-pos);这是每行开头开辟矩形窗口,
LCD_open_windows(x,y+pos+1,8,16-pos-1);  这是每行结束开辟矩形窗口               
LCD_open_windows(x+t+1,y+pos,8-t,1);这是每行的中间开辟矩形窗口   




回复 支持 反对

使用道具 举报

发表于 2015-4-4 16:31:32 | 显示全部楼层
不懂,是为了换行?
回复 支持 反对

使用道具 举报

发表于 2015-4-4 16:44:52 | 显示全部楼层
经过前人测试,开辟窗口再写数据比直接写更快
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-3-29 07:22 , Processed in 0.026722 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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