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条回答
msq001
1楼-- · 2019-10-12 17:53
仲晓龙 发表于 2017-3-8 17:59
如若点阵信息太大会不会把这个两个地址占用掉 从而影响程序呢

不会。
仲晓龙
2楼-- · 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
                }
        }
}
仲晓龙
3楼-- · 2019-10-13 00:25
单步调试在LCD寄存器初始配置就死掉了
仲晓龙
4楼-- · 2019-10-13 04:48
 精彩回答 2  元偷偷看……
仲晓龙
5楼-- · 2019-10-13 05:40
如若点阵信息太大会不会把这个两个地址占用掉 从而影响程序呢
msq001
6楼-- · 2019-10-13 06:32
仲晓龙 发表于 2017-3-8 17:58
/* 选择BANK1-BORSRAM1 连接 TFT,地址范围为0X60000000~0X63FFFFFF
* FSMC_A16 接LCD的DC(寄存器/数据选 ...

你这个LCD_C地址怎么是这个?

一周热门 更多>