ucgui emwin使用qrencode显示二维码

项目需要在STM32平台上实现字符串生成二维码,同时在LCD上显示。在百度上搜索,比较常用的就是linux平台下的开源qrencode。

下载qrencode-3.4.4.tar.gz源代码


将其中用到的依赖文件添加到我们的工程当中。

对于字符串生成二维码,其实最简单的调用函数就是:

QRcode *qrcode;

qrcode = QRcode_encodeString(str, 2, QR_ECLEVEL_Q, QR_MODE_8, 0);

使用EMWIN函数,显示二维码部分参考代码如下

void ShowQRcode(char *str)

{
    QRcode *qrcode;
    unsigned short x,y;
    unsigned short multiple;
    unsigned short xoffset, yoffset;
    unsigned short xpos, ypos;
    unsigned short qrsize = 150;
    int xSize;
    int ySize;


    xSize   = LCD_GetXSize();
    ySize   = LCD_GetYSize();
    xoffset = (xSize - qrsize ) / 2;
    yoffset = (ySize - qrsize ) / 2;
    qrcode = QRcode_encodeString(str, 2, QR_ECLEVEL_Q, QR_MODE_8, 0);

    if(qrcode != NULL)
    {
        xpos = (xSize - qrsize ) / 2 - 15;
        ypos = (ySize - qrsize ) / 2 - 15;
        GUI_SetColor(GUI_WHITE);
        GUI_FillRect(xpos, ypos, xpos + qrsize + 30, ypos + qrsize + 30);
        multiple = qrsize / qrcode->width;
        GUI_SetColor(GUI_BLACK);
        for(y=0;y<qrcode->width;y++)
        {
            for(x=0;x<qrcode->width;x++)
            {
                if(qrcode->data[y*qrcode->width+x]&0x01)
                {
                    xpos = multiple*x + xoffset;
                    ypos = y*multiple + yoffset;
                    GUI_FillRect(xpos, ypos, xpos + multiple, ypos + multiple);
                }
            }
        }
        QRcode_free(qrcode);
    }
}

由于qrencode会使用到系统的malloc、free函数,所以我使用的keil开发环境下需要设置heap的大小,找到startup_xxxx.s文件

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>


Heap_Size       EQU     0x00000C00


显示的效果



emwin 3.34及之后的版本,支持了二维码功能,调用库函数就可以了,当前st芯片能拿到的是emwin3.32版本的库,所以只能自己去实现了。希望对大家有帮助。


参考的文章

http://www.tuicool.com/articles/zIJvAf6


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值