打印
[应用相关]

LCD显示一个字符程序

[复制链接]
1881|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Varus|  楼主 | 2018-6-26 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我的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<size;pos++)
                        {
                                      if(size==12)
                   temp=asc2_1206[num][pos];//调用1206字体
                          else
                                     temp=asc2_1608[num][pos];   //调用1608字体
                          for(t=0;t<size/2;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<size;pos++)
                      {
                                   if(size==12)
                                     temp=asc2_1206[num][pos];//调用1206字体
                           else
                                   temp=asc2_1608[num][pos];   //调用1608字体
                         for(t=0;t<size/2;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)是怎么扫描预先定义的字符串字库的??
沙发
Snow7| | 2018-6-26 22:24 | 只看该作者
可以跟踪调试程序,观察变量,分析结果,一步一步走就能知道怎么工作的

使用特权

评论回复
板凳
android2| | 2018-6-26 22:30 | 只看该作者
第一个num应该是w的acall码值减去空格的acall码值,也就是77(小写的wacall码值是77)-32=45,这个是偏移量,32是空格的acall码值,从32依次往上加,就是一些字符的acall码值

使用特权

评论回复
地板
kingkits| | 2018-6-27 08:52 | 只看该作者
字库为了节省空间,把20H之前的符号都省略了,ASCII字库的起始字符就是20H(空格),所以,在显示时,就得计算和20H的偏移量,好定位相应的字模

使用特权

评论回复
5
玛尼玛尼哄| | 2018-6-27 11:53 | 只看该作者
能显示一个就能显示一堆。

使用特权

评论回复
6
天灵灵地灵灵| | 2018-6-27 15:06 | 只看该作者
看原型啊,你编译后定位到原型,看看里面怎么解释的。

使用特权

评论回复
7
天灵灵地灵灵| | 2018-6-27 15:48 | 只看该作者
不懂,这种应该是没有字库的,然后需要自己按照点阵数组描绘。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

703

帖子

1

粉丝