请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册

扫一扫,访问微社区

搜索
查看: 160|回复: 2

12864显示数字乱码

[复制链接]

1

主题

3

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2019-6-8 10:00:53 | 显示全部楼层 |阅读模式
本帖最后由 阿兵_b56a2 于 2019-6-8 10:00 编辑

struct Cn16CharTypeDef                  // 汉字字模数据结构
{
        unsigned char  Index[1];            // 汉字内码索引,一个汉字占两个字节        
        unsigned char  Msk[16];             // 点阵码数据(16*16有32个数据)
};

struct Cn16CharTypeDef code CN16CHAR[]=
{
/*--  文字:  0  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
"0",0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

/*--  文字:  3  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
"3",0x00,0x30,0x48,0x88,0x88,0x08,0x30,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x18,0x00,
};
uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn)
{
        uchar j, x1, x2, wordNum;

        //--Y的坐标只能从0到7,大于则直接返回--//
        if(y > 7)
        {
                return 0;
        }

        //--X的坐标只能从0到128,大于则直接返回--//
        if(x > 128)
        {
                return 0;
        }
        y += 0xB0;           //求取Y坐标的值
        //--设置Y坐标--//
        LcdSt7565_WriteCmd(y);
        while ( *cn != '\0')         //在C语言中字符串结束以‘\0’结尾
        {        
        
                //--设置Y坐标--//
                LcdSt7565_WriteCmd(y);

                x1 = (x >> 4) & 0x0F;   //由于X坐标要两句命令,分高低4位,所以这里先取出高4位
                x2 = x & 0x0F;          //去低四位
                //--设置X坐标--//
                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                LcdSt7565_WriteCmd(0x04 + x2);        //低4位

                for (wordNum=0; wordNum<50; wordNum++)
                {
                    //--查询要写的字在字库中的位置--//
                        if (CN16CHAR[wordNum].Index[0] == *cn)
                             
                        {
                                for (j=0; j<16; j++) //写一个字
                                {               
                                        if (j == 8)         //由于16X16用到两个Y坐标,当大于等于16时,切换坐标
                                        {
                                                //--设置Y坐标--//
                                                   LcdSt7565_WriteCmd(y + 1);
                        
                                                //--设置X坐标--//
                                                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                                                LcdSt7565_WriteCmd(0x04 + x2);        //低4位
                                        }
                                        LcdSt7565_WriteData(CN16CHAR[wordNum].Msk[j]);
                                }
                                x += 8;
                        }//if查到字结束               
                } //for查字结束        
                cn += 1;
        }        //while结束
        return 1;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

3

主题

91

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
发表于 2019-6-12 11:02:18 | 显示全部楼层
取出来8*16  用0x00给他补齐成16*16的, 就不会乱码了
回复 支持 反对

使用道具 举报

1

主题

3

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2019-6-13 20:12:14 | 显示全部楼层
你QQ多少, 加个好友呗
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|51开发板专区 STM32开发板专区 PLC工控专区 PLC学习机专区 ( 粤ICP备18101765号 )

GMT+8, 2019-6-25 20:49 , Processed in 0.178867 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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