因QRCode 二维码的优越性,近几年来二维码在生活中的各处应用得到快速发展。它在生活中的应用相信大家都随处可见,在此不做详细介绍。随着应用的增多,最近很多朋友都问我,在很多论坛中也发现:有人问能不能再资源比较紧缺的MCU中生成QRCode二维码。很多时候它们在选定方案时候都拿不定主意,在此我给大家一个明确的信息,到底可以不可以在51单片机中生成(当然在51单片机中可行的话,在像STM32这样的MCU中肯定可行了),答案当然是肯定了,可以在51单片机中生成QRCode二维码。但是51单片机至少要具有多少资源呢?比如说有些51单片机只有1K不到的RAM,那肯定是不够的。下面我们从二维码的原理及需要多少资源开始往下讲。

二维码简介:(下面原理部分非原创,参考了网络资料文档)

大家知道二维码有些地方都是一样的,不管怎么变化,它们都不变。它有一些固定的信息,具体的信息内容大家可以去阅读QRCode标准文档,介绍的很清楚,有中文版本的,大家可以去网上找一下,如果找不到也可以像我索取Q1732158020。格式信息在这只简单介绍一下。

1、QRCode二维码总共40个版本,所以的版本编译原理格式都是一样的,只是存储内容不一样,方块数量不一样,当然点阵越多能存储的数据信息就越多,版本1起始21*21个方       块,之后每个版本每行增加4个方块,每列增加4个方块,版本2就是25*25。

2、寻位图 7*7 5*5 3*3 方块 1:1:3:1:1

3、分隔符在寻位图周围 都位浅色

4、低位图 第6行,第6列 首位都是深色

5、校正图 5*5 3*3 1*1 版本1没有 其他都具有校正图

6、空白区 围绕周围的空白边缘

7、多种编码模式A数字模式10位表示3个字符

B字母数字模式11位表示2个字符

C 8位字模式 一个字符8位

D日本汉字模式 每个双字节字符用11位表示

E混合模式。。。。

这里特别说明一下,可以消除一些朋友在看文档不够仔细认真的时候,或者直接移植了别人的代码,生成了二维码之后发现数据字节数一样,容错率也一样怎么图像大               小不一样呢?举个列子来说吧,比如一个二维码中包含01245678998765432101234567890,另外一个包含ABCDEFGHIJKLMNOPQRSTUVWXYZ0000,都是30个字               符,而他们方块数大小可能完全不一样,这是因为在编码的时候数字占有的空间数跟字母及汉字占有的空间数不一样,如果实际中遇到了这个问题的时候知道就行了。

数据编码:

ECI模式编码

输入数据变成位流
缺省模式:位流开头为第一模式的指示符
非缺省模式:ECI标头+一个或多个不同模式段(ECI标头:ECI模式指示符4位+ECI指定符8或16或24位),由ECI模式指示符最高位开始,指定符最低位结束
位流的其余部分第一段组成:模式指示符(4位)+字符计数指示符+数据位流 (每个模式段以模式指示符最高开始,数据流最低位结束)

字母数字模式编码
每2个字符11位表示,最后剩余1个字符6位表示
第1位*45+第2位结果转换为11位二进制
模式表示符(0010)+计数指示符(版本6及以下为9位)+将数据连接起来+终止符(0000,不够可以切短或省略)
所有得到的数据位流都将按8位分配到一个码字,如果最后一个不足8位在最后补零,(高位在前,低位在后)然后根据板号交替的填充
11101100和00010001(目的把剩余空间填满,具体填多少个根据版本容量和纠错等级查表剩余的数量来确定)有些版本容量不能被8整除
在最后需填写补零

格式信息:15位  bit0~1:纠错等级  bit2~4:掩模参考图行  bit5~bit14:按附录C的方法计算10位纠错数据 
 将上述得到的15位数据与101010000010010异或(相同位0,不同为1)得到的数据为图形符号上面的数据。

版本信息:6位数据位(表示7~40版本号)+12位纠错位(通过BCH(18,6)计算出来)(1~6不包含版本信息,7~40才包含包含版本信息)版本信息不进行掩模处理,
          本项目用不到这么高的版本先不做深入学习
结构链接:RQ码可以将16个不同的图形按一定顺序链接起来。扫描的时候不一定按顺序扫描,能自动按顺序排列。项目用不到暂不深入学习。

符号印制:尺寸可以根据实际调整,方块必须为矩形,外围空白区域为大于4倍矩阵宽度。

QRCode二维码介绍就到这里了,其实二维码的生成运算是一个很复杂的过程,中间有很多个步骤:1)固定格式信息数据的排布填充;2)数据取值转换;3)容错数的计算生成;4)把所有数据按数据流转换;5)按QRCode协议格式排列数据进行填充;6)对生成的图像进行掩膜;7)对所有掩膜生成的图像进行评分;8)评选得分最高的;9)最终确定生成的图像。

资源的需要:

这个可能是做单片机,ARM的朋友最想知道了解的了,因为在很论坛中有朋友问到,随机应用的推广,很多电子产品上都急需加上二维码的应用。下面就对RAM资源做个大概的预估。

首先根据你的项目需求,比如说我的二维码图像里面要存放100个字符或这个更多,这个时候可能就需要跟多的RAM空间了,在掩膜等各种计算的时候需要的缓存空间也响相应增大。还有一个方面容错率设置(容错率分为4个等级),如果容错率设置的越高,在二维码缺省的情况下,能译码的概率越大,这换来的代价就是要占用更多的资源,所以如果容错率设置的越高需要的RAM空间也会增大。当然RAM的消耗在编程处理中跟个人编程习惯,处理技巧也有关系,在是实践项目中,以50个字符为例,大概需要2K左右的RAM。50个字符的应用应该能适用于以51单片机为MCU的核心的所有应用了。2K RAM的51单片机市场上应该很常见了。

结语:感谢大家,有不妥之处请广大朋友留言给于指正,谢谢!交流企鹅:1732158020

51单片机、STM32中生成QRCode二维码相关推荐

  1. zxing 生成 Qrcode (二维码)

    Zxing生成Qrcode 工具类 1.引入依赖 <dependency><groupId>com.google.zxing</groupId><artifa ...

  2. 页面中生成图形二维码

    今天想弄个生成图形二维码的功能,后来网上搜了下,在原有基础上进行验证,有如下几个网址提供的api可供使用. <div class="qr"><img src=&q ...

  3. golang中生成读取二维码

    二维码登录原理 https://zhuanlan.zhihu.com/p/110127600 skip2/go-qrcode 生成二维码 github地址:https://github.com/ski ...

  4. 在pycham中生成微信二维码向微信助手发送消息

    在pycharm中使用微信的相关代码时,要先下载关于微信的第三方模块itchat 1. import itchat import time import random import os# itcha ...

  5. java创建QRCode二维码的三种方式

    自己在网上看视频学习了下如何使用java创建二维码,感觉还是挺有趣的,有小心思的还可以把秘密存入二维码中噢 视频源网址:http://www.imooc.com/learn/531 点击下载jar包 ...

  6. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)

    QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应 ...

  7. QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)

    提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别.那么,有没有一种办法将上述区域预先"抠空"出来(以便专门放置LOG ...

  8. C语言QRCode二维码生成

    随着二维码的应用越来越广泛,最近越来越多多朋友都在寻找用C语言生成QRCode二维码相关资料.C语言可以在很多种平台中移植,像51单片机,ARM等MCU中处理.网络上基于C语言的应用实例非常少,大部分 ...

  9. H5案例分享:jquery.qrcode.js生成简易二维码

    近期做项目需要生成二维码,并且解码获取信息,jquery.qrcode.js生成二维码比较的方便,写个教程分享给大家.欢迎大家测试留言,我会改进代码. 现在二维码越来越流行啦,支付扫二维码,关注扫二维 ...

  10. qrcode二维码生成工具

    本篇,笔者介绍下自己用java开发的一款QR码生成器图形化工具. qrcode编码.解码功能依赖于google的二维码开源库google.zxing. 笔者项目github地址: https://gi ...

最新文章

  1. redis字符串匹配_Redis的数据类型和抽象概念介绍
  2. vmware6.5.2序列号_备战秋招——计算机网络(2)
  3. S7 Linux用户管理及用户信息查询命令
  4. python的xpath用法介绍_python爬虫之xpath的基本使用详解
  5. 读者专属福利: Git面试宝典分享
  6. (90)Verilog HDL系统函数和任务:$fmonitor
  7. Ubuntu安装搜狗拼音和金山快盘
  8. JAVA程序员面试32问(附答案)(转载)
  9. vue中遇到的问题:Error: Cannot find module 'chalk'
  10. DBSCAN聚类算法C++实现
  11. 拥塞控制,图文并茂(挺丰富,借鉴较多大佬的思想)
  12. 软考高级软件架构师论文——论软件架构风格
  13. ZBrush建模的15个小技巧,萌新小白都用得上的干货,速看
  14. python turtle库详解_Python turtle库详解
  15. 单片机c语言设计奥运五环,用C语言程序来设计奥运五环图案
  16. WebSocket is already in CLOSING or CLOSED state
  17. angular 访问图片路径错误
  18. 排队叫号医院管理系统源码
  19. 机器学习中 熵的理解
  20. 酷播云html5倍速功能视频播放器,Chrome扩展推荐:一个能16倍速播放的免费视频倍速播放器...

热门文章

  1. webgl天空盒边界缝隙_基于webGL技术的3D库ThingJS支持天空盒技术实现
  2. 2019最新 《播布客鸟哥的Linux私房菜教程》
  3. 澳大利亚每日电价和需求文本数据(2015-2020)
  4. 【虚幻引擎4(UE4)实用技巧】-关于高亮显示物体轮廓线
  5. 2018-04-24-c-gluttonous-snake 财务同比环比、SSH和SSM
  6. 常用标点符号中英文对照表
  7. linux安装Android Studio
  8. 有关网络安全基础知识
  9. 乒乓球基本站姿站位和步伐
  10. 提升 Docker Desktop For macOS 磁盘使用率