LI9341液晶屏 ,我自己写了显示汉字和图片的两个函数,单独使用都没问题,两个函数同时使用就白屏。

2019-10-12 14:42发布

显示汉字程序段
void LCD_Char_O2(u16 x, u16 y,u16 Color)
{      
#define MAX_CHAR_POSX (320-16)
#define MAX_CHAR_POSY (240-16)
    u8 temp, t, pos,i;   
    u16 Num;       
          u8 X=x ,Y=y;
    if(x > MAX_CHAR_POSX || y > MAX_CHAR_POSY)
        return;
           Set_direction(0);    //横屏扫描
    LCD_open_windows(x,y,16,16);     
                for(i=0;i<4;i++)  
                {               
    for (pos=0;pos<32;pos+=2)//一个汉字32个字节
    {                                
                        temp=ucsFNT1616[i][pos];
                        Num=temp<<8|ucsFNT1616[i][pos+1];//合并
                        for(t=0; t<16; t++)       
                        {               
               
                                if(Num&0x8000>>t)
                                {
                               
                                        LCD_ColorPoint(X++,Y,Color);
                                }
                                else
                                {
                                        LCD_ColorPoint(X++,Y,BLACK);
                                }
                        }
                        X=x;               
                        LCD_open_windows(X,Y++,1,1);
                }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
仲晓龙
2019-10-12 20:05
显示图片程序段
void DrawPicture(u16 StartX, u16 StartY,u16 EndX,u16 EndY,unsigned char *pic)
{      
        u32 i,t,j,k=0;
        u8 x,y;
        u16 temp,Num;
        Set_direction(0);    //横屏扫描
        LCD_open_windows(StartX,StartY,EndX-StartX,EndY-StartY);
        //LCD_Point(StartX,StartY);//设置坐标
        t=(EndY-StartY)*(EndX-StartX);
        x=StartX;
        y=StartY;       
        for(i=0;i<t/2;i++)
        {       
               
                temp=*pic;
       
          Num=temp<<8|(*pic+1);//合并
                pic+=2;       

               
                if(((i/(EndX-StartX))>0)&&(i%(EndX-StartX))==0)//一行结束 列号+1    /*图片取模50*50的16位真彩 {MOD} ,那么一行100个数据,两个数据一个颜 {MOD},一行是50个颜 {MOD}*/
                {       
                        LCD_ColorPoint(x,y++,Num);
                        x=StartX;//回到开头
                       
           }
                else
                {
                        LCD_ColorPoint(x++,y,Num);        //没结束 行号+1
                }
        }
}

一周热门 更多>