OpenEdv-开源电子网

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

关于ASIIC的字符的定义,自己改的有问题显示不出来自己定义的字符

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-4-2
在线时间
6 小时
发表于 2019-4-18 23:08:17 | 显示全部楼层 |阅读模式
在LCD.H文件中添加了自己加:
  void LCD_SeeNum(u16 x,u16 y,u32 num,u8 len,u16 jumbo,u8 mode);
  void LCD_SeeChar(u16 x,u16 y,u8 num,u16 jumbo,u8 mode);
在lcd.c中自己改的用来表示的320*320字符函数:
void LCD_SeeNum(u16 x,u16 y,u32 num,u8 len,u16 jumbo,u8 mode)
{  
        u8 t,temp;
        u8 enshow=0;                                                  
        for(t=0;t<len;t++)
        {
                temp=(num/LCD_Pow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                                if(mode&0X80)LCD_SeeChar(x+(jumbo/2)*t,y,'0',jumbo,mode&0X01);  
                                else LCD_SeeChar(x+(jumbo/2)*t,y,' ',jumbo,mode&0X01);  
                                continue;
                        }else enshow=1;
                          
                }
                 LCD_SeeChar(x+(jumbo/2)*t,y,temp+'0',jumbo,mode&0X01);
        }
}

void LCD_SeeChar(u16 x,u16 y,u8 num,u16 jumbo,u8 mode)
{         



    u8 temp,t1,t;
    unsigned char   sudunumber[num][t];

        u16 y0=y;
        u16 csize=6400;                //得到字体一个字符对应点阵集所占的字节数       
        num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
        for(t=0;t<csize;t++)
        {   
                temp= sudunumber[num][t];                  //调用320160字体
                 

                                                                                 //没有的字库
                for(t1=0;t1<8;t1++)
                {                            
                        if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
                        else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if(y>=lcddev.height)return;                //超区域了
                        if((y-y0)==jumbo)
                        {
                                y=y0;
                                x++;
                                if(x>=lcddev.width)return;        //超区域了
                                break;
                        }
                }           
        }                                            
}   

在定义 unsigned char   sudunumber[num][t];时报错..\HARDWARE\LCD\lcd.c(3107): error:  #28: expression must have a constant value
请帮忙解答
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-4-2
在线时间
6 小时
 楼主| 发表于 2019-4-18 23:26:46 | 显示全部楼层
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{                                                            
    u8 temp,t1,t;
        u16 y0=y;
        u8 csize=(size/8+((size%8)?1:0))*(size/2);                //得到字体一个字符对应点阵集所占的字节数       
        num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
        for(t=0;t<csize;t++)
        {   
                if(size==12)temp=asc2_1206[num][t];                  //调用1206字体
                else if(size==16)temp=asc2_1608[num][t];        //调用1608字体
                else if(size==24)temp=asc2_2412[num][t];        //调用2412字体
        else if(size==320)temp=asc2_320160[num][t];        //调用320160字体
                else return;                                                                //没有的字库
其中         else if(size==320)temp=asc2_320160[num][t];        //调用320160字体 有问题。麻烦解答一下这样添加是否正确?
回复 支持 反对

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2019-4-19 01:16:58 | 显示全部楼层
没有看你的逻辑,但是你涉及到动态数组了。我们一般申请一个数组是这样的:
回复 支持 反对

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2019-4-19 01:20:55 | 显示全部楼层
unsigned char   sudunumber[num][t]
这个定义你已经涉及到变长数组(VLA),这一个特性在C99才支持,也就是说你编译器要设置成C99标准来编译。
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-4-2
在线时间
6 小时
 楼主| 发表于 2019-4-20 00:17:52 | 显示全部楼层
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{         
                                               
    u8 temp,t1,t;
     
        u16 y0=y;
        u8 csize=(size/8+((size%8)?1:0))*(size/2);                //得到字体一个字符对应点阵集所占的字节数       
        num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
        for(t=0;t<csize;t++)
        {   
                if(size==12)temp=asc2_1206[num][t];                  //调用1206字体
                else if(size==16)temp=asc2_1608[num][t];        //调用1608字体
                else if(size==24)temp=asc2_2412[num][t];        //调用2412字体
     //   else if(size==254)temp=asc2_254127[num][t];        //调用320160字体
        else if(size==48)temp= asc2_4824[num][t];
                else return;                                                                //没有的字库
这个程序的size部分请讲解一下
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 00:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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