最近同事提出一个需求:需要通过os 显示带有版本信息的二维码,手机扫描就知道版本。主要为了解决整机没有串口交互也没有调试口。
直接在网上找到了开源QRcode ,这是一个应用比较广泛的二维码生成和解析程序,基本app 网站都是使用他的库,有jave c c++ 等各种版本,由于我是要在自家芯片的嵌入式linux 系统上使用,所以就找了单片机版本的的一套开源代码,中间仅使用C库函数,可以直接编译成linux 应用使用。
添加一个main函数进行调用
#include "QR_Encode.h"
int main(void){
EncodeData("aaa");
int i,j;
for(i=0;i<MAX_MODULESIZE;i++){
for(j=0;j<MAX_MODULESIZE;j++){
if(m_byModuleData[i][j] == 1)
printf("1");
else
printf("0");
}
printf("\n");
}
return 0;
}
EncodeData(“aaa”); 中是要编码的信息。
m_byModuleData[i][j] 是编码出来的结构体,其中的0和1 就对应二维码的黑白颜色。
编译成linux 应用,执行另存为文件可以输出重定向,
./main > test.txt
另存成文件test.txt结果是这样的:
111111101111101111111000000000000
100000101111001000001000000000000
101110101101101011101000000000000
101110100010001011101000000000000
101110101111001011101000000000000
100000101111001000001000000000000
111111101010101111111000000000000
000000001101000000000000000000000
001000111100011110111000000000000
111100011001000001011000000000000
010010101000000010011000000000000
111100011000011110000000000000000
101011110010100100101000000000000
000000001000011110000000000000000
111111101101101011011000000000000
100000100000011110000000000000000
101110100010100100101000000000000
101110100110011100000000000000000
101110101010001011011000000000000
100000100110011001011000000000000
111111100110111110101000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
隐约能看到二维码的样子吧。
要把它弄成图片,我就用matlab 画图来实现了,osd 的同事不熟。
fid = fopen('test.txt','r');
% img = fread(fid);
img = fread(fid );
[a,b] = size(img);
len = a;
a = a/35;
c = zeros(33,34);
for l=1:33
for h=1:34
zz = (l-1)*34+h;
z = sprintf('%d',img(zz));
if img(zz) == 49
% disp(1);
c(l,h) = 1;
else
c(l,h) = 0;
end
end
end
c = c*255;
imshow(c);
显示的结果是:
也可以做2x2 或者4x4 的数字放大,比较简单就不做了。