STM32
直播中

张林锋

7年用户 210经验值
私信 关注
[问答]

请问这段程序里的红色字体该怎么理解?

//在指定位置显示一个字符
//x:0~234
//y:0~308
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode)
{      
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 304
u8 temp;
u8 pos,t;      
if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;     
//设置窗口         
LCD_WriteReg(R80,x);           //水平方向GRAM起始地址
LCD_WriteReg(R81,x+(size/2-1));//水平方向GRAM结束地址
LCD_WriteReg(R82,y);           //垂直方向GRAM起始地址
LCD_WriteReg(R83,y+size-1);    //垂直方向GRAM结束地址
LCD_SetCursor(x,y);            //设置光标位置  
LCD_WriteRAM_Prepare();        //开始写入GRAM   
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
  {
  for(pos=0;pos    {
   if(size==12)temp=asc2_1206[num][pos];//调用1206字体      (对应1206字体库中相应字符的那12个字节)
   else temp=asc2_1608[num][pos];   //调用1608字体
   for(t=0;t     {                 
    if(temp&0x01)                                                                 (每个字节中如果位为1则显示此点的颜色,那这样t<6岂不是只判断temp中的6个位?对这点不是很理解)
     {
     LCD_WR_DATA(POINT_COLOR);
     }else LCD_WR_DATA(BACK_COLOR);         
     temp>>=1;
    }
   }
  }
else//叠加方式
  {
  for(pos=0;pos    {
   if(size==12)temp=asc2_1206[num][pos];//调用1206字体
   else temp=asc2_1608[num][pos];   //调用1608字体
   for(t=0;t     {                 
    if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点     
    temp>>=1;
    }
   }
  }     
//恢复窗体大小  
LCD_WriteReg(R80, 0x0000); //水平方向GRAM起始地址
LCD_WriteReg(R81, (LCD_W-1)); //水平方向GRAM结束地址
LCD_WriteReg(R82, 0x0000); //垂直方向GRAM起始地址
LCD_WriteReg(R83, (LCD_H-1)); //垂直方向GRAM结束地址
程序中红色字体部分是有疑惑的程序,括号中蓝色的字体部分是我自己的理解以及不明白的地方,希望原子哥能指点一下。

回帖(2)

王凤英

2019-9-6 08:35:14
1206字体的汉字大小为:12*12点.字符大小为:6*12点.
6个点的宽度足够显示一个字母了.
举报

郭燕

2019-9-6 08:52:03
明白了,谢谢
举报

更多回帖

发帖
×
20
完善资料,
赚取积分