高通字库
版本 V1.0 · 更新于 2026-05-23

6.5 一维码调用示例

条形码 API 调用示例

一维码调用示例

字库芯片内置一维码(条形码)绘制功能。GT_DrawBarcode 函数通过配置 GT_BARCODE_PARAM 结构体,可快速在屏幕上绘制 CODE128 等格式的条形码。

barcode_example.c
#define DISMODE 0 // 1  刷RAM显示  0 打点显示
//描点函数
#if DISMODE
void LCD_WriteRAM(unsigned short RGB_Code)

#else //!DISMODE
static void Gui_DrawPoint(unsigned int x, unsigned int y, unsigned int color)

#endif //!DISMODE

#define GT_COLOR_GET_R(COLOR)    (((COLOR) >> 11) & 0x1f)
#define GT_COLOR_GET_G(COLOR)    (((COLOR) >> 5) & 0x3f)
#define GT_COLOR_GET_B(COLOR)    (((COLOR)) & 0x1f)
#define GT_UDIV255(x)    (((x) * 0x8081U) >> 0x17)
/**
 * @brief 16位灰度颜色混合
 * @param bg_color 背景色
 * @param ft_color 字体颜色
 * @param gray_scale 灰度值
 * @return unsigned short
 */
static unsigned short gt_color_mix(unsigned short bg_color, unsigned short ft_color, unsigned char gray_scale)
{
    unsigned short mix_color = 0, temp = 0;

    //R
    temp = GT_UDIV255(GT_COLOR_GET_R(ft_color) * gray_scale + GT_COLOR_GET_R(bg_color) * (0xff - gray_scale));
    mix_color = (temp & 0x1f) << 11;

    //G
    temp = GT_UDIV255(GT_COLOR_GET_G(ft_color) * gray_scale + GT_COLOR_GET_G(bg_color) * (0xff - gray_scale));
    mix_color = mix_color | ((temp & 0x3f) << 5);

    //B
    temp = GT_UDIV255(GT_COLOR_GET_B(ft_color) * gray_scale + GT_COLOR_GET_B(bg_color) * (0xff - gray_scale));
    mix_color = mix_color | (temp & 0x1f);

    return mix_color;
}
/**
 * @brief 灰度矢量文字 底色混合 显示函数
 * @param pdata  灰度文字数据
 * @param x_y_w_h  x,y 显示起始坐标; w 宽度, h 高度
 * @param grade  灰度阶级[1阶/2阶/3阶/4阶]
 * @param bg_color  背景颜色
 * @param ft_color  字体颜色
 */
void display_gray_vector_font(unsigned char *pdata, unsigned short x, unsigned short y, unsigned short w, unsigned short h,
        unsigned char grade, unsigned short bg_color, unsigned short ft_color)
{
    unsigned short w_byte = (w + 7) >> 3;
    unsigned short x_s = x, idx = 0, i = 0, j = 0;
    unsigned short mix_color = 0;
    unsigned char gray_data = 0, gray_scale = 0;
    w = w_byte << 3;

#include "stdio.h"
#include "string.h"

/**************************************
arr[] : 13个数组
**************************************/
void  BAR_codeEAN13(unsigned int x, unsigned int y, unsigned char arr[])
{
	unsigned char buff_temp[60];
	unsigned long *tmp ;
	unsigned char i = 0;

	tmp = BAR_CODE_EAN13(arr);

	for(i = 0;i < 13;i++)

}

/**************************************
ascii_arr[] : 字符数组 ASCII
arr_len:	字符数组的长度
Code 39码只接受如下43个有效输入字符:
1. 26个大写字母(A – Z);
2. 十个数字(0 – 9);
3. 连接号(-),句号(.),空格,美圆符号($),斜扛(/),加号(+)以及百分号(%)。其余的输入将被忽略。
**************************************/
void BAR_codeEAN39(unsigned int x, unsigned int y, unsigned char ascii_arr[], unsigned int arr_len)
}

/**************************************
arr[]: 条形码编码 整数
arr_len: 数组长度
flag: 起始符有3种模式
	当flag=1时为Code-128-A;
	当flag=2时为Code-128-B;
	当flag=3时为Code-128-C;
Code128编码表参考: https://blog.csdn.net/rodulf/article/details/51276820
**************************************/
void BAR_codeEAN128(unsigned int x, unsigned y, unsigned char arr[], unsigned int arr_len, unsigned char flag) {
	unsigned char buff_tmp[60];
	unsigned long *tmp;
	unsigned char i=0;
	const unsigned char verify = 3;

	tmp = BAR_CODE128(arr, arr_len, flag);

	for(i=0; i<arr_len+verify; i++)
}

//
#if 0
int main(void) ;
	unsigned char code1[13]=;
	unsigned char code2[13]=;
	unsigned char code3[13] = ;

	#if 01
	BAR_codeEAN13(0, 0, code);
	BAR_codeEAN13(0, 0, code1);
	#endif

	#if 01
	BAR_codeEAN39(0, 150, code2, 13);
	#endif

	#if 01
	BAR_codeEAN128(0, 200, code3, 7, 1);
	#endif

	return 0;
}

#endif