EMC菜鸟 发表于 2022-7-1 09:46:48

点阵液晶连续显示几个汉字,怎么在一条语句内实现?

点阵液晶连续显示几个汉字,原先的做法是:
v_Buf=0x01;        //自定义的点阵字库编码
v_Buf=0x05;
v_Buf=0x12;
v_Buf=0x21;
DpyHanZi(4,v_Buf);                //显示4个v_Buf里的内容

但 KEIL C 里的 printf 是可以直接输出字符串的,比如:
printf("123456");

不知道上面的显示汉字的函数,能否也用类似的方式实现?
比如:DpyHanZi(4,"0x01,0x05,0x12,0x21");(这样写肯定不对,只是为了说明想要的结果)?

wye11083 发表于 2022-7-1 10:19:05

那个涉及到汉字编码问题了,比如"我"这个字,在计算机看起来只是一个数字而已。你要是想写成类似自定义字符串也没问题,这样写:
char psz[] = {0x0a,0x02,0x03,0x00};之类的。或者char * psz = "\x48\xa2";之类的,我记得好像是\xHH,你可以找找。

Doding 发表于 2022-7-1 10:20:05

匿名数组,需要勾选C99。
DpyHanZi(4, (char[]){0x01,0x05,0x12,0x21});

EMC菜鸟 发表于 2022-7-1 10:23:45

wye11083 发表于 2022-7-1 10:19
那个涉及到汉字编码问题了,比如"我"这个字,在计算机看起来只是一个数字而已。你要是想写成类似自定义字符 ...
(引用自2楼)

我不是这个意思,,,我的应用只需要几个汉字,所以是自己定义点阵、自己编码,比如:
code uchar C_LCD_WORD[]={
{0x00,0x20,0x20,0xA8,0x6C,0x2A,0x39,0x28,0xA8,0x2A,0x6C,0xA8,0x20,0x20,0x00,0x00,0x02,0x82,0x81,0x90,0x92,0x4A,0x49,0x45,0x24,0x22,0x10,0x08,0x01,0x02,0x02,0x00},/*"参",0*/
{0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00},/*"数",1*/
{0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00,0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00},/*"设",2*/
{0x00,0x17,0x15,0xD5,0x55,0x57,0x55,0x7D,0x55,0x57,0x55,0xD5,0x15,0x17,0x00,0x00,0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0x40,0x40,0x40,0x00},/*"置",3*/
};

我现在的问题是,我原来显示4个汉字需要5行代码:
v_Buf=0x01;
v_Buf=0x02;
v_Buf=0x03;
v_Buf=0x04;
DpyHanZi(4,v_Buf);

我现在需要缩减到一行代码:
比如:DpyHanZi(4,"0x01,0x02,0x03,0x04");                // 这一条语句该怎么写才正确?

EMC菜鸟 发表于 2022-7-1 10:30:27

Doding 发表于 2022-7-1 10:20
匿名数组,需要勾选C99。
DpyHanZi(4, (char[]){0x01,0x05,0x12,0x21});
(引用自3楼)

C51 是不是没戏了 ???

SUPER_CRJ 发表于 2022-7-1 10:34:17

guiWirteString(0,0,"接线说明 ",disPlayBuf);

{"志", 0x02,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x04,0x00,0x02,0x00,0x52,0x10,0x50,0x08,0x90,0x48,0x0F,0xC0},

for( u8 k=0;k<( sizeof(codeGB_14)/sizeof(codeGB_14) );k++ ){ // 寻找这个下标
                                        if( (codeGB_14.Index == p) && (codeGB_14.Index == p) ){
                                                isFind = 1;
                                                for( i=0;i<14;i++ ){ // 14*14字符
                                                        for( j = 0;j<14;j++ ){
                                                                guiDrawPoint(x+i,y+j, ( codeGB_14.Msk >> (7-j%8) & 0x01 ),buf);
                                                        }
                                                }
                                                break;
                                        }
                                }

vuo50z 发表于 2022-7-1 10:34:30

再增加一个数组 {‘参’,‘数’,‘设’, ‘置’}。当调用显示汉子函数时先根据汉子编码查询在这个数组的位置,就知道了点阵的位置,然后调用printf( "设置参数" );就可以了。
底层增加了大一点复杂度和代码,但上层更方便也更直观。

EMC菜鸟 发表于 2022-7-1 10:46:22

SUPER_CRJ 发表于 2022-7-1 10:34
guiWirteString(0,0,"接线说明 ",disPlayBuf);

{"志", 0x02,0x00,0x02,0x00,0xFF,0xF8,0x02,0x00,0x02,0x0 ...
(引用自6楼)

弯道实现的办法很多,比如直接把汉字编码定义为字符串,子程序里转换一下即可:DpyHanZi(4,"01051221");

现在只是想寻找最直接的实现办法!

AWEN2000 发表于 2022-7-1 11:23:56

可以直接写个函数dispstring((x, y, *p)
dispstring(100,20,"一二三")

AppTurtle 发表于 2022-7-1 11:43:40

DpyHanZi(4,"\x01\x05\x12\x21");

这样写就可以了{:lol:}

albert_w 发表于 2022-7-1 12:01:34

AppTurtle 发表于 2022-7-1 11:43
DpyHanZi(4,"\x01\x05\x12\x21");

这样写就可以了
(引用自10楼)

bingo, 我就记得是可以直接写ascii的

EMC菜鸟 发表于 2022-7-1 12:18:29

AppTurtle 发表于 2022-7-1 11:43
DpyHanZi(4,"\x01\x05\x12\x21");

这样写就可以了
(引用自10楼)

正解!正解!正解!正解!

EMC菜鸟 发表于 2022-7-1 12:31:06

AppTurtle 发表于 2022-7-1 11:43
DpyHanZi(4,"\x01\x05\x12\x21");

这样写就可以了
(引用自10楼)

十进制 有办法 表示吗?

vuo50z 发表于 2022-7-1 13:35:49

EMC菜鸟 发表于 2022-7-1 12:18
正解!正解!正解!正解!
(引用自12楼)

我去,你居然问的是这个问题。。。

vuo50z 发表于 2022-7-1 13:40:04

EMC菜鸟 发表于 2022-7-1 12:31
十进制 有办法 表示吗?
(引用自13楼)

你都看见x了,联想下d,h,b试下就行了

EMC菜鸟 发表于 2022-7-1 13:54:44

vuo50z 发表于 2022-7-1 13:40
你都看见x了,联想下d,h,b试下就行了
(引用自15楼)

这个倒是想到了,但没试出来,,,

xly 发表于 2022-7-1 16:07:36

这样?

lb0857 发表于 2022-7-2 08:08:29

教科书上面没有的技巧{:tongue:}{:tongue:}

zhiwei 发表于 2022-7-2 10:11:33

我用Iar支持汉字字符串呀,直接定义汉字字符串。显示接口解析字符串,英文字符按照英文字库,汉字按照汉字字库提取就可以了。

saccapanna 发表于 2022-7-2 10:48:43

DpyHanZi(4,"我是汉字");

这样不行吗?IAR 里面我都是直接用汉字字符串,汉字使用区位码,转码查字库,显示即可。

huangqi412 发表于 2022-7-2 12:45:57

二级查表      汉字--》点阵索引表---》点阵表      struct{ hz_code, tab_offs}   从汉字码找到点阵索引。   

EMC菜鸟 发表于 2022-7-2 15:16:38

saccapanna 发表于 2022-7-2 10:48
DpyHanZi(4,"我是汉字");

这样不行吗?IAR 里面我都是直接用汉字字符串,汉字使用区位码,转码查字库,显 ...
(引用自20楼)

这个当然可以,但我就几个汉字,就没必要二级查表了
页: [1]
查看完整版本: 点阵液晶连续显示几个汉字,怎么在一条语句内实现?