微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > LCD显示一个字符程序求答疑

LCD显示一个字符程序求答疑

时间:10-02 整理:3721RD 点击:
我的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)是怎么扫描预先定义的字符串字库的?

可以跟踪调试程序,观察变量,分析结果,一步一步走就能知道怎么工作的,加油

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top