6.6 一维码调用示例

 

 

 
  1. #define DISMODE 0 // 1  刷RAM显示  0 打点显示
    //描点函数
    #if DISMODE
    void LCD_WriteRAM(unsigned short RGB_Code)
    {
    	LCD->LCD_RAM = RGB_Code;//写十六位GRAM
    }
    #else //!DISMODE
    static void Gui_DrawPoint(unsigned int x, unsigned int y, unsigned int color)
    {
    	//显示一个点
    	LCD_Fast_DrawPoint(x, y, 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++)
    	{
    		memset(buff_temp,0,sizeof(buff_temp));
    		r_dat_bat(*tmp, 54, buff_temp);
    		DisZK_DZ_W(x,y,16,28,BLACK,WHITE,&buff_temp[2],1);
    		x+=buff_temp[1];
    		tmp++;
    	}
    }
    
    
    /**************************************
    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) {
    	unsigned char buff_tmp[50], i;
    	
    	for(i=0; i<arr_len; i++) {
    		BAR_CODE39(ascii_arr[i], buff_tmp);
    		DisZK_DZ_W(x,y,16,22,BLACK,WHITE,&buff_tmp[0],1);
    		x+=11;
    	}
    }
    
    /**************************************
    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++) {
    		memset(buff_tmp, 0, sizeof(buff_tmp));
    		r_dat_bat(*tmp, 40, buff_tmp);
    		DisZK_DZ_W(x, y, 16, 20, BLACK, WHITE, &buff_tmp[0], 1);	//显示函数, 根据实际修改, 参考显示函数文件
    		x+=11;	//可修改
    		tmp++;
    	}
    }
    
    //
    #if 0
    int main(void) {
    	
    	unsigned char code[13]={6,9,0,1,6,8,7,5,8,2,4,4,2};
    	unsigned char code1[13]={6,9,3,8,7,0,9,3,0,0,4,4,9};
    	unsigned char code2[13]={'A','1','9','3','4','7','$',' ','-','5','8','3','E'};
    	unsigned char code3[13] = {16,33,45,31,27,26,40};
    	
    	#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
    
    • 联系电话

    • 0755—83453881
    • 服务时间

    • 周一至周五 9:00-18:00
    • 高通GT-HMI交流群