(Chatgpt辅助)C语言移植Code128B条形码算法到LVGL8.3【附跑通代码】

(Chatgpt辅助)C语言移植Code128B条形码算法到LVGL8.3【附跑通代码】

  • <1>CODE128算法简介
  • <2>C语言实现算法
  • <3>LVGL绘图函数实现
  • <4>ChatGPT使用有感

序言:
这篇博客是我在移植条形码过程中,发现CSDN以及Google上面较少关于C语言移植条形码到LVGL的

资料文档。同时又恰好我刚开始使用Chatgpt辅助移植,所以就把相关内容总结整理一遍。我本来是

打算移植code128auto算法的,但是临时有其他事情中断了,所以只能把code128B的内容总结一下,

后续有空我会继续完善这个博客的。

<1>CODE128算法简介

详细的介绍可以参考这个博客:https://blog.csdn.net/walk_ing/article/details/52712641

我对该算法的粗浅概括可以总结为以下几点:

<1>Code128B编码规则:开始位 + 数据位 + 检验位 + 结束位

<2>Code128编码表规定一份对应法则:即你所输入的字符将根据这份表格映射成10(bs)形式,其

中1表示黑色,0表示白色

<3>开始位,校验位,结束位都已经被规定好。只有数据位需要一一对应

<2>C语言实现算法

根据上述3点总结就可以写出相应的代码

// Code 128字符集
const char* code128_charset_B = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";// code128编码值数组,每个字符占11个单位表示
static const uint16_t s_code128_encode_set[] = {0x6cc, 0x66c, 0x666, 0x498, 0x48c, 0x44c, 0x4c8, 0x4c4, 0x464, 0x648,0x644, 0x624, 0x59c, 0x4dc, 0x4ce, 0x5cc, 0x4ec, 0x4e6, 0x672, 0x65c,0x64e, 0x6e4, 0x674, 0x76e, 0x74c, 0x72c, 0x726, 0x764, 0x734, 0x732,0x6d8, 0x6c6, 0x636, 0x518, 0x458, 0x446, 0x588, 0x468, 0x462, 0x688,0x628, 0x622, 0x5b8, 0x58e, 0x46e, 0x5d8, 0x5c6, 0x476, 0x776, 0x68e,0x62e, 0x6e8, 0x6e2, 0x6ee, 0x758, 0x746, 0x716, 0x768, 0x762, 0x71a,0x77a, 0x642, 0x78a, 0x530, 0x50c, 0x4b0, 0x486, 0x42c, 0x426, 0x590,0x584, 0x4d0, 0x4c2, 0x434, 0x432, 0x612, 0x650, 0x7ba, 0x614, 0x47a,0x53c, 0x4bc, 0x49e, 0x5e4, 0x4f4, 0x4f2, 0x7a4, 0x794, 0x792, 0x6de,0x6f6, 0x7b6, 0x578, 0x51e, 0x45e, 0x5e8, 0x5e2, 0x7a8, 0x7a2, 0x5de,0x5ee, 0x75e, 0x7ae, 0x684, 0x690, 0x69c, 0x18EB
};//两个辅助函数声明
uint16_t calculate_code128_checksum(const char* input_string,uint32_t code128_length);
int strchr_temp(const char* str, int c);// 根据输入字符串自动选择Code 128字符集并生成编码数据
void generate_code128_auto(const char* input_string, uint16_t* code128_data, uint32_t* code128_length) {// 使用Code 128 B字符集编码code128_data[0] = 0x690;  // Code 128起始码B*code128_length = 1;// 生成Code 128编码数据for (size_t i = 0; i < strlen(input_string); i++) {code128_data[*code128_length] = s_code128_encode_set[strchr_temp(code128_charset_B, input_string[i])];(*code128_length)++;}// 添加Code 128校验位code128_data[*code128_length] = calculate_code128_checksum(input_string, *code128_length);(*code128_length)++;// 添加Code 128停止码code128_data[*code128_length] = 0x18EB;  // Code 128停止码(*code128_length)++;}// 计算Code 128字符的校验位
uint16_t calculate_code128_checksum(const char* input_string,uint32_t code128_length) {uint32_t sum = 104;  // 初始校验和为第一个字符的值for (uint32_t i = 1; i <= code128_length; i++) {// 权重为字符在编码中的位置sum += i * strchr_temp(code128_charset_B, input_string[i-1]);  }return sum % 103;  // 对校验和取模
}int strchr_temp(const char* str, int c) {int temp = 0;while (*str != '\0') {if (*str == c) {return temp;//返回ID}str++;temp++;}return NULL;
}

<3>LVGL绘图函数实现

CODE128B算法实现之后,就可以把这个算法当成一个黑箱。作为使用者,我们只需要关心这个黑箱

的输入输出端口即可:输入一个字符串,输出一个0或者1告诉我们是画黑线条还是白线条。而有

了这个输出,就可以适配到LVGL上,我们只需要在LVGL画出相应的黑条或者白条即可。


void draw_blackbar(uint32_t code128to01_length,int x ,int y,uint32_t width,uint32_t height){lv_obj_t *rect = lv_obj_create(lv_scr_act());  // 创建一个矩形对象lv_obj_set_size(rect, width/code128to01_length, height);  // 设置矩形的尺寸lv_obj_set_pos(rect, x, y);static lv_style_t style_rect;                                  //创建样式lv_style_init(&style_rect);                                    //初始化样式lv_style_set_bg_color(&style_rect,lv_color_black());        //设置背景颜色lv_style_set_radius(&style_rect,0);             //设置圆角lv_obj_add_style(rect,&style_rect,LV_PART_MAIN);			   //添加样式lv_style_set_border_color(&style_rect,lv_color_black());//设置边框背景颜色
}void draw_whilebar(uint32_t code128to01_length,int x ,int y,uint32_t width,uint32_t height){lv_obj_t *rect = lv_obj_create(lv_scr_act());  // 创建一个矩形对象lv_obj_set_size(rect, width/code128to01_length, height);  // 设置矩形的尺寸lv_obj_set_pos(rect, x, y);static lv_style_t style_rect;//加静态,这样它就只能被初始化一次,并且一直持续到程序结束为止。lv_style_init(&style_rect);                                    //初始化样式lv_style_set_bg_color(&style_rect,lv_color_white());        //设置背景颜色lv_style_set_radius(&style_rect,0);             //设置圆角lv_obj_add_style(rect,&style_rect,LV_PART_MAIN);			   //添加样式lv_style_set_border_color(&style_rect,lv_color_white());//设置边框背景颜色
}
//有聪明的靓仔肯定会问,这两玩意不是重复了吗?明明更新个color参数就行了。
//回答:我这边发现使用样式时会出BUG,所以暂时用这种冗余的做法,后面有时间再优化void draw_barcode(uint16_t* code128_data,uint32_t code128_length) {int xCoord = 46;int yCoord = 60;int code128_width = 270;int code128to01_length = (code128_length * 11)+1;int unitwidth = code128_width/code128to01_length;
//    int unitwidth = 5;for (size_t i = 0; i < code128_length; i++) {int init_temp = (i == (code128_length-1)?11:10);for(int j = init_temp; j>=0 ; j--){if (((code128_data[i]>>j) & 1)== 1) {//printf("1");draw_blackbar(code128to01_length,xCoord,yCoord,code128_width,100);  // 黑色条纹} else {//printf("0");draw_whilebar(code128to01_length,xCoord,yCoord,code128_width,100);  // 白色条纹}xCoord +=unitwidth;}}printf("\n");
}int main(){lv_obj_clean(lv_scr_act());     //先清除UI,防止唤醒后再次初始化UI导致帧率变小const char* input_string = "Hello";uint32_t code128_length = 0;generate_code128_auto(input_string, code128_data, &code128_length);draw_barcode(code128_data,code128_length);
}

#附效果图
在这里插入图片描述

<4>ChatGPT使用有感

整个使用过程总体而言还是相当Nice的,比如:<1>可以直接让他把算法实现出来,直接让它把移植

代码写出来。尽管它写的代码不可能立即拿来使用,但是整体大框架是没有问题,我们可以依据这个

大框架,再根据自己的软硬件环境,做小的修改调整。(注意它写的代码还带有不少中文注释,这点

对于我们阅读也有非常大的作用)

<2>网上有C#实现的条形码算法,我是看不懂的,于是可以直接让Chatgpt翻译成C语言,我当时觉得

这个功能实在是太棒了!

总体而言,瑕不掩瑜,是个拥有极强信息过滤能力和代码编写能力,以及归纳总结能力的好帮手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15537.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用ChatGPT生成思维导图

一、思维导图软件 XMind是一个非常出色的思维导图软件&#xff0c;具有简单易用、美观实用、多种导出、多平台支持等优点。 XMind的官网为www.xmind.net。 以下是一些可以用Markdown在线生成思维导图的网站&#xff1a; Mermaid Mermaid是一个基于JavaScript的开源项目&…

ChatGPT 聚类嵌入

我们使用简单的 k-means 算法来演示如何进行聚类。 聚类可以帮助发现数据中有价值的、隐藏的分组。 数据集在 Obtain_dataset Notebook 中创建。 # imports import numpy as np import pandas as pd# load data datafile_path "./data/fine_food_reviews_with_embedding…

OpenAI 禁用 ChatGPT 中的“使用 Bing 浏览”功能:发生了什么?

令人惊讶的是&#xff0c;OpenAI决定在其流行的聊天机器人ChatGPT中禁用“使用Bing浏览”功能。这一决定引起了ChatGPT用户的质疑。用户已经习惯于使用这种网络浏览功能。OpenAI尚未提供重新激活该功能的具体时间表。但他们向用户保证&#xff0c;他们正在努力使其重新上线。 O…

Stack Overflow临时禁用ChatGPT生成内容,网友:人类和AI快打起来!

衡宇 Alex 发自 凹非寺量子位 | 公众号 QbitAI AI届当红炸子鸡ChatGPT&#xff0c;刚刚被程序员问答社区Stack Overflow禁用了&#xff01; 芜湖&#xff0c;难道是因为有人感慨&#xff0c;ChatGPT非常强大&#xff0c;可以取代Stack Overflow&#xff1f; 但其实&#xff0c;…

Git-用 cherry-pick 挑好看的小樱桃

前篇 在此之前&#xff0c;我想问一个问题&#xff0c;你是在接触 Git 多久之后&#xff0c;知道有这个命令的&#xff1f; 我的答案是很久很久之后&#xff0c;这真是一个悲伤的故事。懒&#xff0c;是万恶之源&#xff0c;此话果然不假。 cherry-pick 能干啥&#xff1f; c…

亲测10月最新影视流量主小程序源码+卡密系统

正文: 这是一款最新影视小程序&#xff0c;支持官解和卡密系统&#xff0c;也有仿封系统&#xff0c;独立API后台然后对接的苹果cms&#xff0c;亲测可以使用&#xff0c;搭建也比较简单。 只搭建了后台&#xff0c;前台换接口看教程上写的还得再搭建个苹果CMS&#xff0c;就…

微猫恋爱聊妹术V2 4.1.0 小程序源码-多开版-附安装教程

微猫恋爱聊妹术V2 4.1.0 小程序源码-多开版-附安装教程 源码介绍&#xff1a; 一.后台&#xff1a; 1.全新独立后台大更新&#xff0c;让操作更简单&#xff01; 2.新增智能客服消息功能&#xff1a; a.关键字客服消息支持多信息触发&#xff08;已达官方最多限制可同时触发…

2021最火南风表情包最新微信小程序源码+带采集+流量主+前后端完整版+免费下载+附安装教程无加密源码

源码介绍&#xff1a; 南风表情包微信小程序源码&#xff0c;网传最火表情包小程序源码&#xff0c;带有独立版完整后台 API、小程序前端&#xff0c;并附带安装搭建说明。最近很火的表情包小程序源码&#xff0c;亲测完整无错&#xff0c;有大量的数据。搭建即可使用。话不多…

最新表情包小程序+前后端去授权版/最火表情包小程序源码

最新表情包小程序前后端去授权版&#xff0c;最火表情小程序源码&#xff0c;本次分享的是一套二开的小程序前端&#xff0c;新增了举牌表情生成、去掉了隐藏的授权以及一些BUG修复&#xff0c;本站亲测完美可用。 具体教程见包内说明&#xff0c;以下是亲测截图&#xff1a; …

贪心 135. 分发糖果

135. 分发糖果 难度困难1086 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&am…

抖音快手微信QQ壁纸小程序表情包小程序流量主广告源码搭建详细教程

​ 切记&#xff01;不要自作聪明&#xff01; 请仔细通读本文档再安装&#xff0c;不然报错会让你抓狂&#xff01;即使你对PHP非常熟悉&#xff0c;对uniapp非常熟悉&#xff0c;也必须通读文档&#xff0c;严格遵守文档的所写的&#xff0c;不然100%有报错&#xff0c;绝无…

【精选】表情包斗图小程序(可引流,开通流量主,权益外卖cps,带pc后台管理)

牛云表情包斗图小程序&#xff0c;流量主变现&#xff0c;外卖cps权益变现&#xff0c;uniCloud云开发无需购买服务器和域名&#xff0c;助力每一位内容创业者。 技术优势 基于 uniapp uniCloud 研发&#xff0c;无需购买服务器和域名&#xff0c;uniCloud 是 DCloud 联合阿…

小狐狸ChatGPT付费创作系统1.57独立开源版 + 小程序VUE前端+APP端 最全安装配置教程

小狐狸GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。播播资源技术小编经过系统测试系统完全开源&#xff0c;即可拥有自己的GPT&#xff01;整体测试下来非常完美&#xff0c;可以说小狐…

微信点餐小程序项目 --- 干饭人联盟(开源、免费)

参考项目。做了一点改动和完善。 项目源码。还有具体配置方法、sql脚本文件、API接口开发文档、数据库详细说明。 ①技术栈&#xff1a; 前端&#xff1a; 微信小程序原生框架 weui 后端&#xff1a;node.jsexpress 数据库&#xff1a;mysql ②效果&#xff1a; ③说明 1…

ChatGPT被淘汰了?Auto-GPT到底有多强

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。 说Auto-GPT淘汰了ChatGPT了&#xff0c;显然是营销文案里面的标题党。毕竟它还是基于ChatGPT的API&#xff0c;某种意义只是基于ChatGPT能力的应用。但最近&#xff0c;Auto…

ChatGPT基础组件Transformer的代码实现(纯净版Transformer实现)

最近ChatGPT大火&#xff0c;其实去年11月份就备受关注了&#xff0c;最近火出圈了&#xff0c;还是这家伙太恐怖了&#xff0c;未来重复性的工作很危险。回归主题&#xff0c;ChatGPT就是由无数个&#xff08;具体也不知道多少个&#xff0c;哈哈哈哈&#xff09;Transformer语…

比特币将成为人工智能的首选货币

在这篇文章中&#xff0c;Arthur Hayes将阐述为什么中本聪的创造将成为人工智能的首选货币。我将把我的论点作为一系列逻辑结论来提出&#xff0c;这些结论相互基础&#xff0c;以「证明」人工智能将选择比特币作为其经济行为的计价货币。 原文作者&#xff1a;Arthur Hayes 原…

马斯克 xAI 誓师大会,2029实现AGI!12 人创始天团揭秘 xAI 终极目标

今天马斯克和 xAI12 人创始团队开了一个誓师大会&#xff0c;详述了公司的远景目标和运营方向&#xff0c;希望在 2029 年实现 AGI。 今天马院士「开源」了 xAI 的第一次重要会议&#xff01; 擅长在公司使命上「画大饼」的马院士&#xff0c;在这次会议上和创始团队讨论了很多…

为什么越来越多的网工运维_测试转行网络安全?

最近越来越多的网工运维小伙伴都在吐槽&#xff1a;干网工、运维多年&#xff0c;薪资还是5.6K&#xff0c;技术也遇瓶颈上不去&#xff0c;考虑转岗或者转行。其中大部分的网工运维小伙伴们纷纷瞄准了高薪高前景的网络安全工程师岗位 网络安全是怎样的岗位&#xff1f; 人才…

博泰应宜伦:把Vision Pro放大二十倍,就是未来汽车的终极形态

作者 | Amy 编辑 | 德新 新能源是上半场&#xff0c;智能化是下半场。 而随着智能汽车发展&#xff0c;智能座舱也不断革新&#xff0c;过去智能座舱的各项功能全面开花&#xff0c;竞争愈演愈烈&#xff0c;未来的座舱将如何被定义&#xff1f; 6月15日&#xff0c;博泰车联…