关于MCU生成二维码的方法实现

 

 网上有很多开源的二维码生成算法

我这里是直接在github上搜别人发上来的例程,这个F407

 

 

 如上图他的源码

 

 

 这两个头文件里都有用到uint8_t这个变量,如果编译器认不出来的话,可以添加适当的头文件解决,如上面这个app_main_api.h(仅仅在我目前这里可以用这个)

 

 

 二维码的生成格式及要求,可以去网上自己看详细资料,上图的纠错等级,编码方式,版本

https://www.cnblogs.com/tuyile006/p/10916075.html

 

 

 这里根据不同的版本,会有不同的最大容量值。

 

 

 最后就是调用这个函数,result自己创建的数组存放生成的二维码数组。1代表涂黑,0代表涂白,该函数的返回值是生成二维码的宽度


 

void QR(){
    int side;
    uint8_t bitdata[QR_MAX_BITDATA];
    side=qr_encode(QR_LEVEL_L,0,"一二三四五六七  一二三四五六七八^^&&@@345543sdfsdgfh七八九一二三四五六七八九",0,bitdata);
    Drow_darcode(10,10,side,bitdata);
}

参数中:

第一个参数:纠错等级QR_LEVEL_L

第二个参数:版本号,填0的话自动选择

第三个参数:要转换的字符串

第四个参数:字符串的长度,如果是以'\0'结尾,填0

第五个参数:存放二维码数据的数组

void Drow_darcode(uint16_t x, uint16_t y, uint8_t width,uint8_t *bitdata){
    int i=0,j=0,a=0,l=0,n=0;
    for(i=0;i<width;i++){
        for(j=0;j<width;j++){
            a=j*width+i;
            if((bitdata[a/8]&(1<<(7-a%8)))){
                for(l=0;l<5;l++){
                    for(n=0;n<5;n++){
                        LCD_DrawPoint(x+5*i+l,y+5*j+n,BLACK);画点函数
                    }
                }
            }
        }
    }
}

显示的话,这里我使用的芯片为7789的lcd屏幕,上面这个函数的最后两个for循环里面的5和画点函数里面的两个5相当于是二维码的放大倍数,若想修改,可以当做参数传入这个函数里。

 

Drow_darcode函数的前两个参数为放的位置,其他的照抄就行了

 

https://note.youdao.com/s/58l4FX5G

posted @ 2022-06-06 14:42  kingzhan  阅读(170)  评论(0编辑  收藏  举报