OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2930|回复: 9

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

[复制链接]

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
发表于 2017-3-8 17:32:59 | 显示全部楼层 |阅读模式
10金钱
显示汉字程序段
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);
                }

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

156

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1553
金钱
1553
注册时间
2016-11-21
在线时间
411 小时
发表于 2017-3-8 17:33:00 | 显示全部楼层
仲晓龙 发表于 2017-3-8 17:59
如若点阵信息太大会不会把这个两个地址占用掉 从而影响程序呢

不会。
回复

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
 楼主| 发表于 2017-3-8 17:33:54 | 显示全部楼层
显示图片程序段
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位真彩色 ,那么一行100个数据,两个数据一个颜色,一行是50个颜色*/
                {       
                        LCD_ColorPoint(x,y++,Num);
                        x=StartX;//回到开头
                       
           }
                else
                {
                        LCD_ColorPoint(x++,y,Num);        //没结束 行号+1
                }
        }
}
回复

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
 楼主| 发表于 2017-3-8 17:35:09 | 显示全部楼层
单步调试在LCD寄存器初始配置就死掉了
回复

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
 楼主| 发表于 2017-3-8 17:58:34 | 显示全部楼层
/* 选择BANK1-BORSRAM1 连接 TFT,地址范围为0X60000000~0X63FFFFFF
* FSMC_A16 接LCD的DC(寄存器/数据选择)脚
* 16 bit => FSMC[24:0]对应HADDR[25:1]
* 寄存器基地址 = 0X60000000
* RAM基地址 = 0X60020000 = 0X60000000+2^16*2 = 0X60000000 + 0X20000 = 0X60020000
* 当选择不同的地址线时,地址要重新计算。
*/
#define Bank1_LCD_D    ((u32)0x60020000)       //Disp Data ADDR 数据
#define Bank1_LCD_C    ((u32)0x60000000)           //Disp Reg ADDR 指令
回复

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
 楼主| 发表于 2017-3-8 17:59:28 | 显示全部楼层
如若点阵信息太大会不会把这个两个地址占用掉 从而影响程序呢
回复

使用道具 举报

8

主题

156

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1553
金钱
1553
注册时间
2016-11-21
在线时间
411 小时
发表于 2017-3-8 18:05:11 | 显示全部楼层
仲晓龙 发表于 2017-3-8 17:58
/* 选择BANK1-BORSRAM1 连接 TFT,地址范围为0X60000000~0X63FFFFFF
* FSMC_A16 接LCD的DC(寄存器/数据选 ...

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

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
 楼主| 发表于 2017-3-8 18:27:12 | 显示全部楼层
msq001 发表于 2017-3-8 18:05
你这个LCD_C地址怎么是这个?

因为用了 FSMC_Bank1_NORSRAM1   手册上看的用这个地址。
回复

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
 楼主| 发表于 2017-3-8 18:29:29 | 显示全部楼层

现在就是这两个函数一起调用就会白屏,在配置LCD指令的时候就死掉了,导致白屏。所以我在想是不是指令都没写进去
回复

使用道具 举报

4

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2016-10-31
在线时间
66 小时
 楼主| 发表于 2017-3-8 18:47:10 | 显示全部楼层
我在初始化液晶之前配置了LCD指令,然后就好了  奇了怪了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 13:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表