本帖最后由 linjunxiong 于 2014-10-29 22:42 编辑
二维码,种类比较多,常见的有QR码和PDF417,比一维码可以存储的信息多了很多。很多应用还是可以应用到。
了解具体原理和历史可以维基下,
无标题.png (138 KB, 下载次数: 0)
下载附件
不同版本和纠错
2014-10-29 22:27 上传
STM8移植Qrduino输出任意版本和纠错级别.rar
(116.26 KB, 下载次数: 145)
2014-10-29 22:38 上传
点击文件名下载附件
STM8移植Qrduino输出任意版本和纠错级别
PDF417
pdf417_enc http://sourceforge.jp/projects/sfnet_pdf417encode/releases/
Zint Barcode Generator http://sourceforge.net/projects/zint/
这个在单片机上的参考就真的没能G到,索性直接找的PC端的移植下,整体的流程基本差不多,只是差最后一步整理把它打印出来,一直想把它弄出来,就是没那个动力,有兴趣的可以了解下。
STM8 移植PDF417_ENC.rar
(835.78 KB, 下载次数: 113)
2014-10-29 22:40 上传
点击文件名下载附件
STM8 移植PDF417_ENC
代码些许乱,懒得去整理它了。。。多少懒
我是这样的。
后来用你传的文件里边有一个LCD.C 文件 里边的算法显示。显示正常了。但是扫描不出来。。
下边使用的 定义 3-1的
unsigned char neccblk1 = 1;
unsigned char neccblk2 = 0;
unsigned char datablkw = 55;
unsigned char eccblkwid = 15;
unsigned char VERSION = 3;
unsigned char ECCLEVEL = 1;
unsigned char WD = 29;
unsigned char WDB = 4;
unsigned char strinbuf[116]="http://www.amobbs.com;http://bbs.yleee.com.cn";
//unsigned char strinbuf[116]="abcdefghijklmnopqrst";
unsigned char qrframe[600];
unsigned char rlens[30];
unsigned char framebase[] = {
0xfe,0x00,0x03,0xf8,
0x82,0x00,0x02,0x08,
0xba,0x00,0x02,0xe8,
0xba,0x00,0x02,0xe8,
0xba,0x00,0x02,0xe8,
0x82,0x00,0x02,0x08,
0xfe,0xaa,0xab,0xf8,
0x00,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x02,0x00,0x0f,0x80,
0x00,0x80,0x08,0x80,
0xfe,0x00,0x0a,0x80,
0x82,0x00,0x08,0x80,
0xba,0x00,0x0f,0x80,
0xba,0x00,0x00,0x00,
0xba,0x00,0x00,0x00,
0x82,0x00,0x00,0x00,
0xfe,0x00,0x00,0x00,
};
unsigned char framask[] = {
0xff,0xff,0xff,0xff,
0xff,0xf8,0x10,0x04,
0x00,0x80,0x08,0x00,
0x40,0x01,0x00,0x02,
0x00,0x02,0x00,0x01,
0x00,0x00,0x40,0x00,
0x08,0x00,0x00,0x80,
0x03,0xff,0x00,0x1f,
0xfc,0x00,0x7f,0xf8,
0x00,0xff,0xf8,0x00,
0xff,0xfc,0x00,0x01,
0xff,0x00,0x00,0x3f,
0xe0,0x00,0x03,0xfe,
0x00,0x00,0x00,
};
下边是从 LCD.C 里边移植过来的 代码
QRBIT.H 里边有定义 红 {MOD}的是我参考 QRBIT 修改的
#define QRBIT(x,y) ( ( qrframe[((x)>>3) + (y) * WDB] >> (7-((x) & 7 ))) & 1 )
#define QRBITB(x,y) ( ( framebase[((x)>>3) + (y) * WDB] >> (7-((x) & 7 ))) & 1 )
#define SETQRBIT(x,y) qrframe[((x)>>3) + (y) * WDB] |= 0x80 >> ((x) & 7)
#define TOGQRBIT(x,y) qrframe[((x)>>3) + (y) * WDB] ^= 0x80 >> ((x) & 7)
void DrwBit(unsigned char x1,unsigned char y1,unsigned char X_Long,unsigned char Y_Long,unsigned char *Data)
{
unsigned char Y_Cout,X_Cout,x,y;
unsigned char i,k,b,t;
X_Long=X_Long;
X_Cout = 0;
Y_Cout = 0;
t = 0;
b = 0;
for(y=0;y<Y_Long;y++)
{
for(x=0;x<(X_Long*8);x++)
{
b >>= 1;
if( x <( Y_Long) && y < (Y_Long))
if( QRBITB(Y_Long-x-1,y) ) b |= 0x80;
if( ++t > 7 )
{
t = 0;
PutByte(x/8+x1,y+y1,b);
X_Cout ++;
if(X_Cout == X_Long)
{
X_Cout = 0;
Y_Cout ++;
}
b = 0;
}
}
}
}
直接用 下边函数显示 framebase 就是不正常的图片
void DrwBit2(unsigned char x1,unsigned char y1,unsigned char X_Long,unsigned char Y_Long,unsigned char *Data)
{
unsigned char x,y;
for(y=0;y<Y_Long;y++)
{
for(x=0;x<X_Long;x++)
{
PutByte(x,y,*Data);
Data ++;
}
}
}
一周热门 更多>