STM32单片机实现二维码显示

        最近工作中的项目需要LCD显示二维码,目前的需求较为简单,只需要显示一个二维码演示功能。因此,我只是做了一个图片显示功能,用取模软件,把二维码图片取模转换为数组。

        鉴于是通讯设备,图片的内容较大,肯定影响使用体验,而且操作不灵活。接下来,我就想如何实现单片机自己生产二维码,如果上位机只是下发要显示的字符串,通讯速度肯定快很多啊。比如1个128*128大小的图片需要128*128*2Byte字节=32KBytes来显示,就算是单色的也需要128*128/8=2KByte这么大的buf。用115200的波特率来收发的话,需要很多时间。

        网上查了一些资料,找到很多开源的库,qrencode、Zbar、Zint、ZiXing。初步评估了一下,感觉还是qrencode比较精简,易于嵌入式移植。以下是我的移植qrencode3.4.4的过程,学习中参考了很多大神帖子。http://www.51hei.com/bbs/blog-197280-5673.html。毕竟我确实自己亲手实现了这个移植的过程,希望不要被认为是抄袭。

       (1) 首先下载qrencode源码,网站https://fukuchi.org/works/qrencode/

        (2)找一个自己的工程,我就用了自己的开发版的LCD显示历程的工程。

        (3)新建一个qr文件夹,把qrencode的所以源文件.c和.h放进去。并新建一个congfig.h文件,填充必要的宏定义。

        (4)在MDK工程中添加这些文件。

                                 STM32单片机实现二维码显示_第1张图片

       (5)添加头文件路径引用

                                        STM32单片机实现二维码显示_第2张图片

        (6)给工程添加全局宏定义

                     STM32单片机实现二维码显示_第3张图片 

    (7)main文件中添加必要的头文件引用和调用测试代码如下:

#include "qrencode.h"
#include "qrspec.h"
#include "mqrspec.h"
#include "bitstream.h"
#include "qrinput.h"
#include "split.h"
#include "mask.h"

#include "mmask.h"

printf("\r\nHY-RedBull\r\n");
printf("Development Board V1.0\r\n");


qrcode= QRcode_encodeString("sissi",7, QR_ECLEVEL_L, QR_MODE_8,0);

printf("====version=%d========\r\n",qrcode->version);
printf("====width=%d========\r\n",qrcode->width);

for(i=0;iwidth;i++){

for(j=0;jwidth;j++){
if(qrcode->data[i*qrcode->width+j]&0x01){
printf("*");
}
else{
printf(" ");
}
}
printf("\r\n");
}
printf("\r\n");

lcd_display_singlepicture(64,64,qrcode->width,qrcode->width,qrcode->data);

    (8)修改栈和堆的大小

                                     STM32单片机实现二维码显示_第4张图片

        (9)编译和下载测试

                           STM32单片机实现二维码显示_第5张图片

                                                           STM32单片机实现二维码显示_第6张图片

工程代码下载路径:https://download.csdn.net/download/a931500274/10339439


你可能感兴趣的:(STM32单片机实现二维码显示)