单片机上使用Qrencode库简单介绍和提供修改的源码库

代码下载地址:
https://download.csdn.net/download/qq_31806069/12797688

1.添加的代码

在这里插入图片描述

2.修改的代码

如果没有使用堆栈的话,可以申请一个2167的BUF给使用。

uint16_t mm_malloc_count=0;
void mm_init(void)
{
	mm_malloc_count=0;
}
#if 0
void *mm_malloc(int size)//all size = 2167
{
	void*p_data;
	
	p_data = &OLED_GRAM_T[mm_malloc_count];
	mm_malloc_count += size;
	LOG_DEBUG_PRINTF("mm_malloc:%d-%d\r\n",size,mm_malloc_count);
	if (128==size)
	{
//	LOG_DEBUG_PRINTF("mm_malloc:%d-%d\r\n",size,mm_malloc_count);
	}
	return p_data;
}
void * mm_realloc(void*prt,int size)
{
	void*p_data;
	
	p_data = &OLED_GRAM_T[mm_malloc_count];
	mm_malloc_count += size;
	LOG_DEBUG_PRINTF("mm_realloc:%d-%d\r\n",size,mm_malloc_count);
	return p_data;
}
void mm_free(void *ptr) 
{

}
#else
void *mm_malloc(int size)//all size = 2167
{
	void*p_data;
	
	p_data = malloc(size);
	return p_data;
}
void * mm_realloc(void*prt,int size)
{
	void*p_data;
	
	p_data = realloc(prt,size);
	return p_data;
}
void mm_free(void *ptr) 
{
	free(ptr);
}
#endif

修改了这部分的代码
在这里插入图片描述

3.使用例子

#include "qrencode.h"
#include "qr_config.h"
#include "qrencode.h"
static void draw_QRcode(QRcode *qrcode, int ox, int oy, int margin, int size)
{
    int x, y, width;
    unsigned char *p;
    uint8_t startx=0;
    uint8_t starty=0;


    width = qrcode->width;
    p = qrcode->data;
    for (y = 0; y<width; y++) 
	{
        for (x = 0; x<width; x++) 
		{
#define QR_BLOW_UP (8)
            if (*p&0x01)
            {
                if (0)
                {
                    lcd_draw_point_to_ram(x,y,WHITE);
                } else
                {
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP+1,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP+2,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP+3,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP+4,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP+5,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP+6,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP+7,starty+y*QR_BLOW_UP,WHITE);
					
					
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP+1,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP+2,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP+3,WHITE);
					lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP+4,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP+5,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP+6,WHITE);
                    lcd_draw_point_to_ram(startx+x*QR_BLOW_UP,starty+y*QR_BLOW_UP+7,WHITE);
                }
            } 
            p++;
        }
    }
}
extern int Split_splitStringToQRinput(const char *string, QRinput *input,
		QRencodeMode hint, int casesensitive);
extern QRcode *QRcode_encodeMask(QRinput *input, int mask);
extern void mm_init_qr_buf(void);
void ui_about_qr(void)
{
    QRcode *qrcode;
	uint8_t buf[10];
    memset(FONT_512GRAM,0,sizeof(FONT_512GRAM));
    get_mac(buf);
    sprintf((char*)FONT_512GRAM,"%02X%02X%02X%02X%02X%02X",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);

	mm_init();
	mm_init_qr_buf();//QRcode_encodeStringReal
	qrcode = QRcode_encodeStringReal((const char*)FONT_512GRAM, 0, QR_ECLEVEL_H, 0, QR_MODE_8, 1);
    if (qrcode)
    {
        draw_QRcode(qrcode, 0, 0, 5, 6);
    } else
    {
        LOG_DEBUG_PRINTF("QRcode_encodeString error");
    }
	


}

4.实物展示效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值