本帖最后由 didadida 于 2014-9-18 21:16 编辑
看见有坛友发帖用12864来跑ucgui,感觉很炫,尤其是那个数字的显示很漂亮,于是好奇去看了看相关的代码。于是乎,发现了这个用于字符图形化的宏定义。
#define ________ 0x0
#define _______X 0x1
#define ______X_ 0x2
#define ______XX 0x3
#define _____X__ 0x4
#define _____X_X 0x5
#define _____XX_ 0x6
#define _____XXX 0x7
#define ____X___ 0x8
#define ____X__X 0x9
#define ____X_X_ 0xa
#define ____X_XX 0xb
#define ____XX__ 0xc
#define ____XX_X 0xd
#define ____XXX_ 0xe
#define ____XXXX 0xf
#define ___X____ 0x10
#define ___X___X 0x11
#define ___X__X_ 0x12
#define ___X__XX 0x13
#define ___X_X__ 0x14
#define ___X_X_X 0x15
#define ___X_XX_ 0x16
#define ___X_XXX 0x17
#define ___XX___ 0x18
#define ___XX__X 0x19
#define ___XX_X_ 0x1a
#define ___XX_XX 0x1b
#define ___XXX__ 0x1c
#define ___XXX_X 0x1d
#define ___XXXX_ 0x1e
#define ___XXXXX 0x1f
#define __X_____ 0x20
#define __X____X 0x21
#define __X___X_ 0x22
#define __X___XX 0x23
#define __X__X__ 0x24
#define __X__X_X 0x25
#define __X__XX_ 0x26
#define __X__XXX 0x27
#define __X_X___ 0x28
#define __X_X__X 0x29
#define __X_X_X_ 0x2a
#define __X_X_XX 0x2b
#define __X_XX__ 0x2c
#define __X_XX_X 0x2d
#define __X_XXX_ 0x2e
#define __X_XXXX 0x2f
#define __XX____ 0x30
#define __XX___X 0x31
#define __XX__X_ 0x32
#define __XX__XX 0x33
#define __XX_X__ 0x34
#define __XX_X_X 0x35
#define __XX_XX_ 0x36
#define __XX_XXX 0x37
#define __XXX___ 0x38
#define __XXX__X 0x39
#define __XXX_X_ 0x3a
#define __XXX_XX 0x3b
#define __XXXX__ 0x3c
#define __XXXX_X 0x3d
#define __XXXXX_ 0x3e
#define __XXXXXX 0x3f
#define _X______ 0x40
#define _X_____X 0x41
#define _X____X_ 0x42
#define _X____XX 0x43
#define _X___X__ 0x44
#define _X___X_X 0x45
#define _X___XX_ 0x46
#define _X___XXX 0x47
#define _X__X___ 0x48
#define _X__X__X 0x49
#define _X__X_X_ 0x4a
#define _X__X_XX 0x4b
#define _X__XX__ 0x4c
#define _X__XX_X 0x4d
#define _X__XXX_ 0x4e
#define _X__XXXX 0x4f
#define _X_X____ 0x50
#define _X_X___X 0x51
#define _X_X__X_ 0x52
#define _X_X__XX 0x53
#define _X_X_X__ 0x54
#define _X_X_X_X 0x55
#define _X_X_XX_ 0x56
#define _X_X_XXX 0x57
#define _X_XX___ 0x58
#define _X_XX__X 0x59
#define _X_XX_X_ 0x5a
#define _X_XX_XX 0x5b
#define _X_XXX__ 0x5c
#define _X_XXX_X 0x5d
#define _X_XXXX_ 0x5e
#define _X_XXXXX 0x5f
#define _XX_____ 0x60
#define _XX____X 0x61
#define _XX___X_ 0x62
#define _XX___XX 0x63
#define _XX__X__ 0x64
#define _XX__X_X 0x65
#define _XX__XX_ 0x66
#define _XX__XXX 0x67
#define _XX_X___ 0x68
#define _XX_X__X 0x69
#define _XX_X_X_ 0x6a
#define _XX_X_XX 0x6b
#define _XX_XX__ 0x6c
#define _XX_XX_X 0x6d
#define _XX_XXX_ 0x6e
#define _XX_XXXX 0x6f
#define _XXX____ 0x70
#define _XXX___X 0x71
#define _XXX__X_ 0x72
#define _XXX__XX 0x73
#define _XXX_X__ 0x74
#define _XXX_X_X 0x75
#define _XXX_XX_ 0x76
#define _XXX_XXX 0x77
#define _XXXX___ 0x78
#define _XXXX__X 0x79
#define _XXXX_X_ 0x7a
#define _XXXX_XX 0x7b
#define _XXXXX__ 0x7c
#define _XXXXX_X 0x7d
#define _XXXXXX_ 0x7e
#define _XXXXXXX 0x7f
#define X_______ 0x80
#define X______X 0x81
#define X_____X_ 0x82
#define X_____XX 0x83
#define X____X__ 0x84
#define X____X_X 0x85
#define X____XX_ 0x86
#define X____XXX 0x87
#define X___X___ 0x88
#define X___X__X 0x89
#define X___X_X_ 0x8a
#define X___X_XX 0x8b
#define X___XX__ 0x8c
#define X___XX_X 0x8d
#define X___XXX_ 0x8e
#define X___XXXX 0x8f
#define X__X____ 0x90
#define X__X___X 0x91
#define X__X__X_ 0x92
#define X__X__XX 0x93
#define X__X_X__ 0x94
#define X__X_X_X 0x95
#define X__X_XX_ 0x96
#define X__X_XXX 0x97
#define X__XX___ 0x98
#define X__XX__X 0x99
#define X__XX_X_ 0x9a
#define X__XX_XX 0x9b
#define X__XXX__ 0x9c
#define X__XXX_X 0x9d
#define X__XXXX_ 0x9e
#define X__XXXXX 0x9f
#define X_X_____ 0xa0
#define X_X____X 0xa1
#define X_X___X_ 0xa2
#define X_X___XX 0xa3
#define X_X__X__ 0xa4
#define X_X__X_X 0xa5
#define X_X__XX_ 0xa6
#define X_X__XXX 0xa7
#define X_X_X___ 0xa8
#define X_X_X__X 0xa9
#define X_X_X_X_ 0xaa
#define X_X_X_XX 0xab
#define X_X_XX__ 0xac
#define X_X_XX_X 0xad
#define X_X_XXX_ 0xae
#define X_X_XXXX 0xaf
#define X_XX____ 0xb0
#define X_XX___X 0xb1
#define X_XX__X_ 0xb2
#define X_XX__XX 0xb3
#define X_XX_X__ 0xb4
#define X_XX_X_X 0xb5
#define X_XX_XX_ 0xb6
#define X_XX_XXX 0xb7
#define X_XXX___ 0xb8
#define X_XXX__X 0xb9
#define X_XXX_X_ 0xba
#define X_XXX_XX 0xbb
#define X_XXXX__ 0xbc
#define X_XXXX_X 0xbd
#define X_XXXXX_ 0xbe
#define X_XXXXXX 0xbf
#define XX______ 0xc0
#define XX_____X 0xc1
#define XX____X_ 0xc2
#define XX____XX 0xc3
#define XX___X__ 0xc4
#define XX___X_X 0xc5
#define XX___XX_ 0xc6
#define XX___XXX 0xc7
#define XX__X___ 0xc8
#define XX__X__X 0xc9
#define XX__X_X_ 0xca
#define XX__X_XX 0xcb
#define XX__XX__ 0xcc
#define XX__XX_X 0xcd
#define XX__XXX_ 0xce
#define XX__XXXX 0xcf
#define XX_X____ 0xd0
#define XX_X___X 0xd1
#define XX_X__X_ 0xd2
#define XX_X__XX 0xd3
#define XX_X_X__ 0xd4
#define XX_X_X_X 0xd5
#define XX_X_XX_ 0xd6
#define XX_X_XXX 0xd7
#define XX_XX___ 0xd8
#define XX_XX__X 0xd9
#define XX_XX_X_ 0xda
#define XX_XX_XX 0xdb
#define XX_XXX__ 0xdc
#define XX_XXX_X 0xdd
#define XX_XXXX_ 0xde
#define XX_XXXXX 0xdf
#define XXX_____ 0xe0
#define XXX____X 0xe1
#define XXX___X_ 0xe2
#define XXX___XX 0xe3
#define XXX__X__ 0xe4
#define XXX__X_X 0xe5
#define XXX__XX_ 0xe6
#define XXX__XXX 0xe7
#define XXX_X___ 0xe8
#define XXX_X__X 0xe9
#define XXX_X_X_ 0xea
#define XXX_X_XX 0xeb
#define XXX_XX__ 0xec
#define XXX_XX_X 0xed
#define XXX_XXX_ 0xee
#define XXX_XXXX 0xef
#define XXXX____ 0xf0
#define XXXX___X 0xf1
#define XXXX__X_ 0xf2
#define XXXX__XX 0xf3
#define XXXX_X__ 0xf4
#define XXXX_X_X 0xf5
#define XXXX_XX_ 0xf6
#define XXXX_XXX 0xf7
#define XXXXX___ 0xf8
#define XXXXX__X 0xf9
#define XXXXX_X_ 0xfa
#define XXXXX_XX 0xfb
#define XXXXXX__ 0xfc
#define XXXXXX_X 0xfd
#define XXXXXXX_ 0xfe
#define XXXXXXXX 0xff
使用的时候,可以用如下的方式定义图形化的字符
GUI_CONST_STORAGE unsigned char acFont8x10ASCII_0032[10] = { /* code 0032 */
_XXXX___,
XX__XX__,
XX__XX__,
____XX__,
___XX___,
__XX____,
_XX_____,
XX__XX__,
XXXXXX__,
________};
GUI_CONST_STORAGE unsigned char acFont24_ASCII_0024[ 48] = { /* code 0024 */
________,________,
________,________,
________,________,
_____X__,________,
___XXXXX,________,
__XXXXXX,X_______,
_XXX_X_X,XX______,
_XX__X__,XX______,
_XX__X__,________,
_XXX_X__,________,
__XXXXX_,________,
____XXXX,X_______,
_____X_X,XX______,
_____X__,XX______,
_____X__,XX______,
_XX__X__,XX______,
_XXX_X_X,XX______,
__XXXXXX,X_______,
___XXXXX,________,
_____X__,________,
_____X__,________,
________,________,
________,________,
________,________};
事情到这里还没结束,因为ucGUI里边同时存在如下的定义方式
GUI_CONST_STORAGE unsigned char GUI_Pixels_ArrowL[150] = {
0x40, 0x00, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00, 0x00,
0x69, 0x00, 0x00, 0x00, 0x00,
0x6A, 0x40, 0x00, 0x00, 0x00,
0x6A, 0x90, 0x00, 0x00, 0x00,
0x6A, 0xA4, 0x00, 0x00, 0x00,
0x6A, 0xA9, 0x00, 0x00, 0x00,
0x6A, 0xAA, 0x40, 0x00, 0x00,
0x6A, 0xAA, 0x90, 0x00, 0x00,
0x6A, 0xAA, 0xA4, 0x00, 0x00,
0x6A, 0xAA, 0xA9, 0x00, 0x00,
0x6A, 0xAA, 0xAA, 0x40, 0x00,
0x6A, 0xAA, 0xAA, 0x90, 0x00,
0x6A, 0xAA, 0xAA, 0xA4, 0x00,
0x6A, 0xAA, 0xAA, 0xA9, 0x00,
0x6A, 0xAA, 0xAA, 0xAA, 0x40,
0x6A, 0xAA, 0x95, 0x55, 0x50,
0x6A, 0x9A, 0x90, 0x00, 0x00,
0x6A, 0x46, 0xA4, 0x00, 0x00,
0x69, 0x06, 0xA4, 0x00, 0x00,
0x64, 0x01, 0xA9, 0x00, 0x00,
0x50, 0x01, 0xA9, 0x00, 0x00,
0x40, 0x00, 0x6A, 0x40, 0x00,
0x00, 0x00, 0x6A, 0x40, 0x00,
0x00, 0x00, 0x1A, 0x90, 0x00,
0x00, 0x00, 0x1A, 0x90, 0x00,
0x00, 0x00, 0x06, 0xA4, 0x00,
0x00, 0x00, 0x06, 0xA4, 0x00,
0x00, 0x00, 0x01, 0x50, 0x00
};
虽然名字上可以看出是一个Arrow,也就是一个箭头,但是具体什么样子非常不直观。你可能想到了,上面宏定义的形式不就很直观吗?是的,所以顺着这个思路,写了段代码(代码在后面),将宏定义转换成了字符串数组的形式
char *graph[] =
{
"________",
"_______X",
"______X_",
"______XX",
"_____X__",
"_____X_X",
"_____XX_",
"_____XXX",
"____X___",
"____X__X",
"____X_X_",
"____X_XX",
"____XX__",
"____XX_X",
"____XXX_",
"____XXXX",
"___X____",
"___X___X",
"___X__X_",
"___X__XX",
"___X_X__",
"___X_X_X",
"___X_XX_",
"___X_XXX",
"___XX___",
"___XX__X",
"___XX_X_",
"___XX_XX",
"___XXX__",
"___XXX_X",
"___XXXX_",
"___XXXXX",
"__X_____",
"__X____X",
"__X___X_",
"__X___XX",
"__X__X__",
"__X__X_X",
"__X__XX_",
"__X__XXX",
"__X_X___",
"__X_X__X",
"__X_X_X_",
"__X_X_XX",
"__X_XX__",
"__X_XX_X",
"__X_XXX_",
"__X_XXXX",
"__XX____",
"__XX___X",
"__XX__X_",
"__XX__XX",
"__XX_X__",
"__XX_X_X",
"__XX_XX_",
"__XX_XXX",
"__XXX___",
"__XXX__X",
"__XXX_X_",
"__XXX_XX",
"__XXXX__",
"__XXXX_X",
"__XXXXX_",
"__XXXXXX",
"_X______",
"_X_____X",
"_X____X_",
"_X____XX",
"_X___X__",
"_X___X_X",
"_X___XX_",
"_X___XXX",
"_X__X___",
"_X__X__X",
"_X__X_X_",
"_X__X_XX",
"_X__XX__",
"_X__XX_X",
"_X__XXX_",
"_X__XXXX",
"_X_X____",
"_X_X___X",
"_X_X__X_",
"_X_X__XX",
"_X_X_X__",
"_X_X_X_X",
"_X_X_XX_",
"_X_X_XXX",
"_X_XX___",
"_X_XX__X",
"_X_XX_X_",
"_X_XX_XX",
"_X_XXX__",
"_X_XXX_X",
"_X_XXXX_",
"_X_XXXXX",
"_XX_____",
"_XX____X",
"_XX___X_",
"_XX___XX",
"_XX__X__",
"_XX__X_X",
"_XX__XX_",
"_XX__XXX",
"_XX_X___",
"_XX_X__X",
"_XX_X_X_",
"_XX_X_XX",
"_XX_XX__",
"_XX_XX_X",
"_XX_XXX_",
"_XX_XXXX",
"_XXX____",
"_XXX___X",
"_XXX__X_",
"_XXX__XX",
"_XXX_X__",
"_XXX_X_X",
"_XXX_XX_",
"_XXX_XXX",
"_XXXX___",
"_XXXX__X",
"_XXXX_X_",
"_XXXX_XX",
"_XXXXX__",
"_XXXXX_X",
"_XXXXXX_",
"_XXXXXXX",
"X_______",
"X______X",
"X_____X_",
"X_____XX",
"X____X__",
"X____X_X",
"X____XX_",
"X____XXX",
"X___X___",
"X___X__X",
"X___X_X_",
"X___X_XX",
"X___XX__",
"X___XX_X",
"X___XXX_",
"X___XXXX",
"X__X____",
"X__X___X",
"X__X__X_",
"X__X__XX",
"X__X_X__",
"X__X_X_X",
"X__X_XX_",
"X__X_XXX",
"X__XX___",
"X__XX__X",
"X__XX_X_",
"X__XX_XX",
"X__XXX__",
"X__XXX_X",
"X__XXXX_",
"X__XXXXX",
"X_X_____",
"X_X____X",
"X_X___X_",
"X_X___XX",
"X_X__X__",
"X_X__X_X",
"X_X__XX_",
"X_X__XXX",
"X_X_X___",
"X_X_X__X",
"X_X_X_X_",
"X_X_X_XX",
"X_X_XX__",
"X_X_XX_X",
"X_X_XXX_",
"X_X_XXXX",
"X_XX____",
"X_XX___X",
"X_XX__X_",
"X_XX__XX",
"X_XX_X__",
"X_XX_X_X",
"X_XX_XX_",
"X_XX_XXX",
"X_XXX___",
"X_XXX__X",
"X_XXX_X_",
"X_XXX_XX",
"X_XXXX__",
"X_XXXX_X",
"X_XXXXX_",
"X_XXXXXX",
"XX______",
"XX_____X",
"XX____X_",
"XX____XX",
"XX___X__",
"XX___X_X",
"XX___XX_",
"XX___XXX",
"XX__X___",
"XX__X__X",
"XX__X_X_",
"XX__X_XX",
"XX__XX__",
"XX__XX_X",
"XX__XXX_",
"XX__XXXX",
"XX_X____",
"XX_X___X",
"XX_X__X_",
"XX_X__XX",
"XX_X_X__",
"XX_X_X_X",
"XX_X_XX_",
"XX_X_XXX",
"XX_XX___",
"XX_XX__X",
"XX_XX_X_",
"XX_XX_XX",
"XX_XXX__",
"XX_XXX_X",
"XX_XXXX_",
"XX_XXXXX",
"XXX_____",
"XXX____X",
"XXX___X_",
"XXX___XX",
"XXX__X__",
"XXX__X_X",
"XXX__XX_",
"XXX__XXX",
"XXX_X___",
"XXX_X__X",
"XXX_X_X_",
"XXX_X_XX",
"XXX_XX__",
"XXX_XX_X",
"XXX_XXX_",
"XXX_XXXX",
"XXXX____",
"XXXX___X",
"XXXX__X_",
"XXXX__XX",
"XXXX_X__",
"XXXX_X_X",
"XXXX_XX_",
"XXXX_XXX",
"XXXXX___",
"XXXXX__X",
"XXXXX_X_",
"XXXXX_XX",
"XXXXXX__",
"XXXXXX_X",
"XXXXXXX_",
"XXXXXXXX"
};
然后剩下的就简单了,下面这小段代码就能将前面那个GUI_Pixels_ArrowL数组“图形化”到控制台窗口了,其中row代表行数,col代表列数对应的字节数,mode决定是否选择反显
void print_graph(void *arr,int row,int col,char mode)//图形输出,高位在前
{
int i,j;
unsigned char *ptr = (unsigned char *)arr;
for(i = 0;i < row;i++)
{
for(j = 0;j < col;j++)
{
if(mode)
printf("%s",graph[ptr[col*i+j]]);
else
printf("%s",graph[ptr[col*i+j]^0XFF]);
}
printf("\n");
}
printf("\n");
}
效果图:
顺带找出了之前用过的一个bigASCII.h码表,测试了下,效果也不错
以及,测试了一个用image2lcd转成的图片码表,效果如下
visual studio 工程代码:
代码中用到的文件:
【9.18重大更新,支持更多的码表格式,输出更自由!】
更新1:
有的码表是低位在前的,也就是正好是逆序,这个简单,写一个reverse函数就行了,另外还加入了width参数,这里边width的取值不能大于8,程序中的例子可以取6和8,分别对应asc2_1206和asc2_1608两个码表
void print_r_graph(void *arr,int row,int col,int width,char mode)//输出图形,低位在前
{
int i,j;
unsigned char *ptr = (unsigned char *)arr;
for(i = 0;i < row;i++)
{
for(j = 0;j < col;j++)
{
if(mode)
print_str(graph[bit_reverse_beta(ptr[col*i+j])],width);
else
print_str(graph[bit_reverse_beta(ptr[col*i+j]^0XFF)],width);
}
printf("\n");
}
printf("\n");
}
效果图:
更新2:可以将4位灰度的码表图形化输出,四路是先进行二值化(大于7和小于等于7),然后根据字符码的宽度正确的输出,可变宽度是亮点哦!
原始码表可以看另一位坛友的帖子,“这个字体漂亮吧” 里边4bit灰度值的码表。
比如下边这个就是小写字母'a'的码表
unsigned char mos_font_asc24gray_61_dat[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xCF,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xE7,0x00,
0xAF,0xF0,0xBF,0xE0,0x00,0x08,0xFF,0x0E,0xF9,0x00,0x00,0x8F,0xF0,0xFF,0x00,0x00,
0x08,0xFF,0x0F,0xF0,0x00,0x00,0xBF,0xF0,0xFF,0x70,0x00,0xAF,0xFF,0x0D,0xFE,0x00,
0xBF,0xFF,0xF0,0x7F,0xFF,0xFF,0xE9,0xFF,0x00,0x9F,0xFF,0xB0,0x0F,0xF0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,};
效果图:
可变宽度效果图:
最新的工程文件:
|