这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » LCD写一个字符程序

共6条 1/1 1 跳转至

LCD写一个字符程序

菜鸟
2014-04-08 22:16:17     打赏

我的LCD驱动芯片是SSD1289,这个不重要,关键现在看原子的写一个字符的程序有点不懂,请大虾指点:

程序如下:

//显示一个点
void LCD_DrawPoint(u16 x,u16 y)
{
 LCD_SetCursor(x,y);//设置光标位置 
 LCD_WR_REG(0x22);//开始写入GRAM
 LCD_WR_DATA(POINT_COLOR); 
}
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{ 
    u8 temp;
    u8 pos,t;
    u16 x0=x;
    u16 colortemp=POINT_COLOR;      
    if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;     
     //设置窗口     
     num=num-' ';//得到偏移后的值
     if(!mode) //非叠加方式
     {
         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) POINT_COLOR=colortemp;
                else      POINT_COLOR=BACK_COLOR;
                LCD_DrawPoint(x,y); 
                temp>>=1; 
                x++;
          }
          x=x0;
          y++;
      } 
   }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; 
         }
     }
 }
    POINT_COLOR=colortemp;              
}
void LCD_ShowString(u16 x,u16 y,const u8 *p)
{         
    while(*p!='\0')
    {       
        if(x>MAX_CHAR_POSX)
        {
            x=0;
             y+=16;
         }
        if(y>MAX_CHAR_POSY)
        {
            y=x=0;
           LCD_Clear(WHITE);
         }
        LCD_ShowChar(x,y,*p,16,0);
        x+=8;
        p++;
    }  
}

 

以上是显示一个字符串的完整程序,假设我现在调用LCD_ShowString(30,30,“we”);就用来显示 字符串we,那么到最终会调用 LCD_ShowChar(30,u16 y,30,16,0);就是这个函数我不太懂,首先显示 'w’是,该函数里的num是多少??为什么要减去' ' (空格字符)??这个显示一个字符的函数 LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)是怎么扫描预先定义的字符串字库的??


院士
2014-04-08 23:02:07     打赏
2楼

这个和生成的字库有关。

因为是显示字库,估计去掉了ansi前面的控制符。因此,会首先减去一个空格的偏移量。


高工
2014-04-10 01:06:25     打赏
3楼
楼主可以查看一下原子代码里lcd文件夹里有一个.h文件是装的字符的模,这些字符不是包含了所有asc_ii码中的字符。你看看字库是从哪个字符开始的,大概就明白为什么要减‘ ’了。而且字符的取模方式不同,显示函数的写法也不同,所以函数的写法取决于取模方式。

高工
2014-04-13 22:58:43     打赏
4楼

楼上正解

原子的代码h文件包含不少关键变量


菜鸟
2014-04-14 08:46:48     打赏
5楼

楼主,请问怎么添加截图到提问里面去的?(第一次提问额)


菜鸟
2014-04-14 09:15:42     打赏
6楼
自动生成的

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]