条形码生成 C
#define CODE128_PIXEL_WIDTH (1)
#define CODE128_PIXEL_HIGT (64)
#define CODE128_START_A (103)
#define CODE128_START_B (104)
#define CODE128_START_C (105)
#define CODE128_STOP (106)
typedef struct
{
char str[2];
uint8_t bitWidth[6];
}BAR_CODE128_ASCII_BIT;
const BAR_CODE128_ASCII_BIT BarCode128_SACii[] =
{
{' ',' ',{2,1,2,2,2,2}},
{'!','!',{2,2,2,1,2,2}},
{'"','"',{2,2,2,2,2,1}},
{'#','#',{1,2,1,2,2,3}},
{'$','$',{1,2,1,3,2,2}},
{'%','%',{1,3,1,2,2,2}},
{'&','&',{1,2,2,2,1,3}},
{'\'','\'',{1,2,2,3,1,2}},
{'(','(',{1,3,2,2,1,2}},
{')',')',{2,2,1,2,1,3}},
{'*','*',{2,2,1,3,1,2}},
{'+','+',{2,3,1,2,1,2}},
{',',',',{1,1,2,2,3,2}},
{'-','-',{1,2,2,1,3,2}},
{'.','.',{1,1,3,2,3,1}},
{'/','/',{1,1,3,2,2,2}},
{'0','0',{1,2,3,1,2,2}},
{'1','1',{1,2,3,2,1,1}},
{'2','2',{2,2,3,2,2,1}},
{'3','3',{2,2,1,1,3,2}},
{'4','4',{2,2,1,2,3,1}},
{'5','5',{2,1,3,2,1,2}},
{'6','6',{2,2,3,1,1,2}},
{'7','7',{3,1,2,1,3,1}},
{'8','8',{3,1,1,2,2,2}},
{'9','9',{3,2,1,1,2,2}},
{':',':',{3,2,1,2,2,1}},
{';',';',{3,1,2,2,1,2}},
{'<','<',{3,2,2,1,1,2}},
{'=','=',{3,2,2,2,1,1}},
{'>','>',{2,1,2,1,2,3}},
{'?','?',{2,1,2,3,2,1}},
{'@','@',{2,3,2,1,2,1}},
{'A','A',{1,1,1,3,2,3}},
{'B','B',{1,3,1,1,2,3}},
{'C','C',{1,3,1,3,2,1}},
{'D','D',{1,1,2,3,1,3}},
{'E','E',{1,3,2,1,1,3}},
{'F','F',{1,3,2,3,1,1}},
{'G','G',{2,1,1,3,1,3}},
{'H','H',{2,3,1,1,1,3}},
{'I','I',{2,3,1,3,1,1}},
{'J','J',{1,1,2,1,3,3}},
{'K','K',{1,1,2,3,3,1}},
{'L','L',{1,3,2,1,3,1}},
{'M','M',{1,1,3,1,2,3}},
{'N','N',{1,1,3,3,2,1}},
{'O','O',{1,3,3,1,2,1}},
{'P','P',{3,1,3,1,2,1}},
{'Q','Q',{2,1,1,3,1,1}},
{'R','R',{2,3,1,1,3,1}},
{'S','S',{2,1,3,1,1,3}},
{'T','T',{2,1,3,3,1,1}},
{'U','U',{2,1,3,1,3,1}},
{'V','V',{3,1,1,1,2,3}},
{'W','W',{3,1,1,3,2,1}},
{'X','X',{3,3,1,1,2,1}},
{'Y','Y',{3,1,2,1,1,3}},
{'Z','Z',{3,1,2,3,1,1}},
{']',']',{3,3,2,1,1,1}},
{'\\','\\',{3,1,4,1,1,1}},
{'}','}',{2,2,1,4,1,1}},
{'^','^',{4,3,1,1,1,1}},
{'_','_',{1,1,1,2,2,4}},
{' ','`',{1,1,1,4,2,2}},
{' ','a',{1,2,1,1,2,4}},
{' ','b',{1,2,1,4,2,1}},
{' ','c',{1,4,1,1,2,2}},
{' ','d',{1,4,1,2,2,1}},
{' ','e',{1,1,2,2,1,4}},
{' ','f',{1,1,2,4,1,2}},
{' ','g',{1,2,2,1,1,4}},
{' ','h',{1,2,2,4,1,1}},
{' ','i',{1,4,2,1,1,2}},
{' ','j',{1,4,2,2,1,1}},
{' ','k',{2,4,1,2,2,1}},
{' ','l',{2,2,1,1,1,4}},
{' ','m',{4,1,3,1,1,1}},
{' ','n',{2,4,1,1,1,2}},
{' ','o',{1,3,4,1,1,1}},
{' ','p',{1,1,1,2,4,2}},
{' ','q',{1,2,1,1,4,2}},
{' ','r',{1,2,1,2,4,1}},
{' ','s',{1,1,4,2,1,2}},
{' ','t',{1,2,4,1,1,2}},
{' ','u',{1,2,4,2,1,1}},
{' ','v',{4,1,1,2,1,2}},
{' ','w',{4,2,1,1,1,2}},
{' ','x',{4,2,1,2,1,1}},
{' ','y',{2,1,2,1,4,1}},
{' ','z',{2,1,4,1,2,1}},
{' ','{',{4,1,2,1,2,1}},
{' ','|',{1,1,1,1,4,3}},
{' ','}',{1,1,1,3,4,1}},
{' ','~',{1,3,1,1,4,1}},
{' ',' ',{1,1,4,1,1,3}},
{' ',' ',{1,1,4,3,1,1}},
{' ',' ',{4,1,1,1,1,3}},
{' ',' ',{4,1,1,3,1,1}},
{' ',' ',{1,1,3,1,4,1}},
{' ',' ',{1,1,4,1,3,1}},
{' ',' ',{3,1,1,1,4,1}},
{' ',' ',{4,1,1,1,3,1}},
{' ',' ',{2,1,1,4,1,2}},
{' ',' ',{2,1,1,2,1,4}},
{' ',' ',{2,1,1,2,3,2}},
};
const uint8_t BarCode128_STOP_BitData[]={2,3,3,1,1,1,2};
int AH_LCD_Disp_Rectangle(unsigned char pixel_x,unsigned char pixel_y,unsigned char pixel_w,unsigned char pixel_h,DISP_COLOR_enum color);
int AH_LCD_Disp_BarCode_bitData(unsigned char pixel_x,unsigned char pixel_y,unsigned char data)
{
unsigned char x=0,y=0,PixelBit=0;
unsigned char bitWidth = 0;
unsigned char bitWidth_data[7] = {0};
if(data < CODE128_STOP)
{
memcpy(bitWidth_data,&BarCode128_SACii[data].bitWidth[0],6);
}
else if(data == CODE128_STOP)
{
memcpy(bitWidth_data,&BarCode128_STOP_BitData[0],7);
}
else
{
return -2;
}
x = pixel_x;
y = pixel_y;
bitWidth = bitWidth_data[0] * CODE128_PIXEL_WIDTH;
AH_LCD_Disp_Rectangle(x,y,bitWidth,CODE128_PIXEL_HIGT,DISP_COLOR_BLACK);
y += bitWidth;
bitWidth = bitWidth_data[1] * CODE128_PIXEL_WIDTH;
AH_LCD_Disp_Rectangle(x,y,bitWidth,CODE128_PIXEL_HIGT,DISP_COLOR_WHITE);
y += bitWidth;
bitWidth = bitWidth_data[2] * CODE128_PIXEL_WIDTH;
AH_LCD_Disp_Rectangle(x,y,bitWidth,CODE128_PIXEL_HIGT,DISP_COLOR_BLACK);
y += bitWidth;
bitWidth = bitWidth_data[3] * CODE128_PIXEL_WIDTH;
AH_LCD_Disp_Rectangle(x,y,bitWidth,CODE128_PIXEL_HIGT,DISP_COLOR_WHITE);
y += bitWidth;
bitWidth = bitWidth_data[4] * CODE128_PIXEL_WIDTH;
AH_LCD_Disp_Rectangle(x,y,bitWidth,CODE128_PIXEL_HIGT,DISP_COLOR_BLACK);
y += bitWidth;
bitWidth = bitWidth_data[5] * CODE128_PIXEL_WIDTH;
AH_LCD_Disp_Rectangle(x,y,bitWidth,CODE128_PIXEL_HIGT,DISP_COLOR_WHITE);
if(data == CODE128_STOP)
{
y += bitWidth;
bitWidth = bitWidth_data[6] * CODE128_PIXEL_WIDTH;
AH_LCD_Disp_Rectangle(x,y,bitWidth,CODE128_PIXEL_HIGT,DISP_COLOR_BLACK);
}
y += bitWidth;
return (y);
}
int AH_LCD_Disp_BarCode128(uint8_t x, uint8_t y, uint8_t type, char *str)
{
uint8_t i,k,stringLen,number,dataLen,dataArray[20],NumberArray[20];
uint32_t sum;
if( (type != CODE128_START_A)&&(type != CODE128_START_B)&&(type != CODE128_START_C) )
return 1;
stringLen = strlen(str);
if( stringLen > (sizeof(dataArray)-3) )
return 2;
if(type == CODE128_START_C)
{
AH_Tools_Str2Bcd(str,stringLen,NumberArray);
if( stringLen % 2)
stringLen = stringLen / 2 + 1;
else
stringLen = stringLen / 2;
AH_Tools_Bcd2Bin(NumberArray,NumberArray,stringLen);
}
dataLen = 0;
sum = 0;
memset(dataArray,0,sizeof(dataArray));
sum += type;
dataArray[dataLen++] = type;
for(i=0;i<stringLen;i++)
{
k = CODE128_STOP;
number = *(str+i);
if( type == CODE128_START_A)
{
if( (number >= 32) && ( number <= 95))
k = *(str+i) - 32;
}
else if( type == CODE128_START_B)
{
if( (number >= 32) && ( number <= 127))
k = *(str+i) - 32;
}
else
{
k = NumberArray[i];
if(k >= 100 )
return 3;
}
if( k == CODE128_STOP)
return 3;
sum += (i+1) * k;
dataArray[dataLen++] = k;
}
sum = sum % 103;
dataArray[dataLen++] = sum;
dataArray[dataLen++] = CODE128_STOP;
for(i=0;i<dataLen;i++)
y = AH_LCD_Disp_BarCode_bitData(x,y,dataArray[i]);
return 0;
}