设置一个汉字的自定义点阵
支持芯片: SHMICTRL系列芯片 ESP32-S3系列
//用字符串定义汉字点阵数据
int fontdot(int dotm,int hznm,int n,str hzstr,int pos,int size,int isearse);
//dotm: 汉字点阵大小,只能是16/24/32/48/64
//hznm: 汉字内码,16bit数据,高8bit是区码,低8bit为位码
//n:汉字点阵数据块位置,由于字符串大小以及RTU数据长度不得超过256字节,32点阵每汉字需要128字节,而超过32点阵的汉字均超过256字节,因此对于大于32点阵的汉字,需要将点阵数据拆分成每128字节一块,分多次传输,第一块传输时,此字节数据为0;第二块数据则此字节数据为1;
//hzstr:汉字点阵字符串,具体详见:汉字自定义点阵语句
//pos:此模式下无用,传入0即可
//size:此模式下无用,传入0即可
//isearse:是否擦除当前汉字对应flash存储块;针对flash的特性,第一个汉字调用时需要擦除flash对应这个4096字节的数据块;
//返回值 0-遇见相同数据,不写入 1-写入成功
//使用二进制数据来定义汉字点阵;二进制常用于modbus传来的数据进行点阵设置
int fontdot(int dotm,int hznm,int n,int bs,int pos,int size,int isearse);
//其余的参数参见上面
//bs: newbin函数对应的二进制数组句柄
//pos:汉字点阵在二进制数据中的起始位置
//size:二进制数据的长度
//返回值 0-遇见相同数据,不写入 1-写入成功
示例
//使用字符串设置点阵
fontdot(32,0xAAC8,0,"0000000000000000080000200FFFFFF80C0000300C0000300C0003300CFFFFB00C0180300C0180300C0180300C0180300C0180300C0184300C7FFE300C0180300C01A0300C0198300C018C300C018E300C0184300C0184300C0183300DFFFFB00C0000300C0000300C0000300FFFFFF00C0000300C0000300800000000000000",0,0,1);
//使用二进制数据设置点阵
int bs;
bs=newbin(132);
defbin(bs,0,"00 00 00 00 00 00 00 00 08 00 00 20 0F FF FF F8 0C 00 00 30 0C 00 00 30 0C 00 03 30 0C FF FF B0 0C 01 80 30 0C 01 80 30 0C 01 80 30 0C 01 80 30 0C 01 80 30 0C 01 84 30 0C 7F FE 30 0C 01 80 30 0C 01 A0 30 0C 01 98 30 0C 01 8C 30 0C 01 8E 30 0C 01 84 30 0C 01 84 30 0C 01 83 30 0D FF FF B0 0C 00 00 30 0C 00 00 30 0C 00 00 30 0F FF FF F0 0C 00 00 30 0C 00 00 30 08 00 00 00 00 00 00 00");
fontdot(32,0xAAC8,0,bs,0,128,1);
freestr(bs);
s1.text="";//0xAAC8对应的汉字
注意
- dotm必须是指定值,不可乱填
- 更详细的内容参见:汉字自定义点阵语句
- 本函数有写flash的操作,因此专门做了优化,写入时会自动比对flash的内容,如果已经写入,则不再写入和擦除flash;可以根据函数返回值确定写入情况
- 本语句支持GB2312汉字库和GBK汉字库