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