news 2026/8/9 14:40:08

【Arduino共阳极数码管项目案例与进阶应用】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Arduino共阳极数码管项目案例与进阶应用】

Arduino共阳极数码管项目案例与进阶应用

1.实验用到的电子器件

Arduino 板1个,USB下载数据线1根,面包板1个,杜邦线若干,1k 电阻 8 个

结果显示:

微信视频2025-12-16_212803_135

Arduino共阳极数码管基础连接

使用Arduino驱动共阳极数码管时,需将数码管的公共端(COM)连接至VCC(+5V),各段引脚(a-g、dp)通过限流电阻(通常220Ω)连接到Arduino的数字引脚。共阳极数码管在段引脚输入低电平时点亮。

示例接线:

数码管COM引脚 → Arduino 5V
数码管a-g引脚 → Arduino D2-D8(通过220Ω电阻)
数码管显示数字的代码实现
通过控制各段引脚电平实现数字显示。共阳极数码管需发送段码的低电平信号
示例代码(1位数码管显示数字0-9)

// 共阳极数码管inta=2;// 定义数字接口2 连接aintb=3;// 定义数字接口3 连接bintc=4;// 定义数字接口4 连接cintd=5;// 定义数字接口5 连接dinte=6;// 定义数字接口6 连接eintf=7;// 定义数字接口7 连接fintg=8;// 定义数字接口8 连接ginth=9;// 定义数字接口9 连接h,也就是数码管中的dpvoidsetup(){// put your setup code here, to run once:inti;for(i=2;i<=9;i++){pinMode(i,OUTPUT);// 设置2~9号引脚为输出模式}}voidloop(){// put your main code here, to run repeatedlydigital_0();// 显示数字0delay(1000);digital_1();// 显示数字1delay(1000);digital_2();// 显示数字2delay(1000);digital_3();// 显示数字3delay(1000);digital_4();// 显示数字4delay(1000);digital_5();// 显示数字5delay(1000);digital_6();// 显示数字6delay(1000);digital_7();// 显示数字7delay(1000);digital_8();// 显示数字8delay(1000);digital_9();// 显示数字9delay(1000);}// 显示数字0voiddigital_0(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,HIGH);digitalWrite(h,LOW);}// 显示数字1voiddigital_1(void){digitalWrite(a,HIGH);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,HIGH);digitalWrite(h,LOW);}// 显示数字2voiddigital_2(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,HIGH);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,HIGH);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字3voiddigital_3(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字4voiddigital_4(void){digitalWrite(a,HIGH);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字5voiddigital_5(void){digitalWrite(a,LOW);digitalWrite(b,HIGH);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,HIGH);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字6voiddigital_6(void){digitalWrite(a,LOW);digitalWrite(b,HIGH);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字7voiddigital_7(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);digitalWrite(g,HIGH);digitalWrite(h,LOW);}// 显示数字8voiddigital_8(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}// 显示数字9voiddigital_9(void){digitalWrite(a,LOW);digitalWrite(b,LOW);digitalWrite(c,LOW);digitalWrite(d,LOW);digitalWrite(e,HIGH);digitalWrite(f,LOW);digitalWrite(g,LOW);digitalWrite(h,LOW);}

2.实验步骤:

首先我们要弄清楚共阴极数码管的10个引脚各自的功能,可参考
以下图例:

扩展部分优化代码的思路:

优化代码通常涉及提高可读性、可维护性和性能。结合一维数组、二维数组和函数的封装,可以从以下几个方面入手:

模块化设计:将功能拆分为独立的函数,每个函数只负责一个明确的任务。
数据结构选择:根据需求选择一维或二维数组,确保数据存储高效且易于访问。
代码复用:避免重复代码,通过函数封装通用逻辑。
性能优化:减少不必要的计算或内存使用,例如通过预计算或缓存结果。
优化示例代码

defprocess_1d_array(arr):"""处理一维数组的函数"""return[x*2forxinarr]defprocess_2d_array(matrix):"""处理二维数组的函数"""return[[x*2forxinrow]forrowinmatrix]defmain():# 示例数据arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]# 调用函数处理数据processed_1d=process_1d_array(arr_1d)processed_2d=process_2d_array(arr_2d)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()
defprocess_1d_array(arr):"""处理一维数组的函数"""return[x*2forxinarr]defprocess_2d_array(matrix):"""处理二维数组的函数"""return[[x*2forxinrow]forrowinmatrix]defmain():# 示例数据arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]# 调用函数处理数据processed_1d=process_1d_array(arr_1d)processed_2d=process_2d_array(arr_2d)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()
defprocess_1d_array(arr):"""处理一维数组的函数"""return[x*2forxinarr]defprocess_2d_array(matrix):"""处理二维数组的函数"""return[[x*2forxinrow]forrowinmatrix]defmain():# 示例数据arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]# 调用函数处理数据processed_1d=process_1d_array(arr_1d)processed_2d=process_2d_array(arr_2d)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()
defprocess_1d_array(arr):"""处理一维数组的函数"""return[x*2forxinarr]defprocess_2d_array(matrix):"""处理二维数组的函数"""return[[x*2forxinrow]forrowinmatrix]defmain():# 示例数据arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]# 调用函数处理数据processed_1d=process_1d_array(arr_1d)processed_2d=process_2d_array(arr_2d)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()
defprocess_1d_array(arr):"""处理一维数组的函数"""return[x*2forxinarr]defprocess_2d_array(matrix):"""处理二维数组的函数"""return[[x*2forxinrow]forrowinmatrix]defmain():# 示例数据arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]# 调用函数处理数据processed_1d=process_1d_array(arr_1d)processed_2d=process_2d_array(arr_2d)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()```#```pythondefprocess_1d_array(arr):"""处理一维数组的函数"""return[x*2forxinarr]defprocess_2d_array(matrix):"""处理二维数组的函数"""return[[x*2forxinrow]forrowinmatrix]defmain():# 示例数据arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]# 调用函数处理数据processed_1d=process_1d_array(arr_1d)processed_2d=process_2d_array(arr_2d)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()

优化点分析
函数封装:将一维和二维数组的处理逻辑分别封装为独立函数,提高代码可读性和复用性。
列表推导式:使用列表推导式简化数组操作,减少代码行数。
模块化设计:main函数作为入口,清晰组织调用逻辑。
进一步优化建议
参数校验:在函数中添加参数类型检查,确保输入数据符合预期。
性能测试:使用时间复杂度和空间复杂度分析工具,确保优化后的代码性能更好。
异常处理:增加异常捕获逻辑,提高代码健壮性。
对比用户代码后的调整
如果用户提供的原始代码中存在重复逻辑或未封装的部分,可以进一步提取通用函数。例如,若原始代码中多次出现类似的数组操作,可以将其抽象为单独的函数。

AI优化后的代码
结合AI的建议,最终优化版本可能如下:

defprocess_array(arr,is_2d=False):"""通用数组处理函数,支持一维和二维数组"""ifis_2d:return[[x*2forxinrow]forrowinarr]return[x*2forxinarr]defmain():arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]processed_1d=process_array(arr_1d)processed_2d=process_array(arr_2d,is_2d=True)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()
defprocess_array(arr,is_2d=False):"""通用数组处理函数,支持一维和二维数组"""ifis_2d:return[[x*2forxinrow]forrowinarr]return[x*2forxinarr]defmain():arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]processed_1d=process_array(arr_1d)processed_2d=process_array(arr_2d,is_2d=True)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()```````pythondefprocess_array(arr,is_2d=False):"""通用数组处理函数,支持一维和二维数组"""ifis_2d:return[[x*2forxinrow]forrowinarr]return[x*2forxinarr]defmain():arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]processed_1d=process_array(arr_1d)processed_2d=process_array(arr_2d,is_2d=True)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()```````pythondefprocess_array(arr,is_2d=False):"""通用数组处理函数,支持一维和二维数组"""ifis_2d:return[[x*2forxinrow]forrowinarr]return[x*2forxinarr]defmain():arr_1d=[1,2,3,4]arr_2d=[[1,2],[3,4]]processed_1d=process_array(arr_1d)processed_2d=process_array(arr_2d,is_2d=True)print("一维数组处理结果:",processed_1d)print("二维数组处理结果:",processed_2d)if__name__=="__main__":main()

3.优化总结

通用函数:通过参数控制一维或二维数组的处理逻辑,减少重复代码。
清晰接口:函数参数命名明确,调用时易于理解。
扩展性:未来如需支持更多维度的数组,只需调整函数逻辑即可。

4.注意事项:

限流电阻不可省略,防止烧毁LED段。
动态扫描时延迟时间需短(约1-5ms),避免闪烁。
高亮度或长时间使用需考虑散热问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/8 16:49:28

百度网盘提取码智能获取完全解决方案

百度网盘提取码智能获取完全解决方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为繁琐的百度网盘提取码输入而困扰吗&#xff1f;每次面对密密麻麻的分享链接&#xff0c;寻找提取码的过程就像大海捞针。现在&#x…

作者头像 李华
网站建设 2026/8/7 16:37:07

探索低功耗多频带sub 1G射频芯片NRF905反向电路

低功耗多频带sub 1G的射频芯片NRF905反向电路&#xff0c;大厂出品&#xff0c;值得信赖经典频段433/868/915MHz 学习方法是&#xff1a;可以直接查看里面的电路结构&#xff0c;还有管子的宽长比参数等。 拿到原理图之后需要自己换成自己所持有的PDK就可以跑仿真了&#xff0c…

作者头像 李华
网站建设 2026/8/10 4:28:33

LobeChat定制化部署教程:品牌LOGO与主题颜色修改

LobeChat定制化部署教程&#xff1a;品牌LOGO与主题颜色修改 在企业纷纷构建专属AI助手的今天&#xff0c;一个具备品牌辨识度的聊天界面&#xff0c;往往比功能本身更能赢得用户信任。尽管市面上已有不少开源聊天前端&#xff0c;但真正能做到“开箱即用又深度可定制”的并不…

作者头像 李华
网站建设 2026/8/10 4:34:19

MapGIS Objects Java三维场景中如何实现交互

三维场景中如何实现交互 一、介绍 MapGIS Objects SDK &#xff1a; 是一款组件式地理信息开发平台&#xff0c;提供全空间数据存储、管理、显示、编辑、查询、分析、制图输出等二三维一体化核心 GIS 功能&#xff0c;提供 C、.NET、Java、Python 等开发资源&#xff0c;接口…

作者头像 李华
网站建设 2026/8/9 15:41:35

STM8S103F3 最小系统板设计实操学习心得

作为大二大专嵌入式专业的学生&#xff0c;这学期我们重点学习了 STM8 系列单片机的基础设计与应用&#xff0c;从理论入门到实操落地&#xff0c;我以 STM8S103F3 最小系统板为对象&#xff0c;完成了从项目搭建、原理图绘制到 PCB 设计的全流程实操&#xff0c;期间踩了不少新…

作者头像 李华
网站建设 2026/8/6 2:03:29

Mermaid Live Editor:技术新手的可视化图表制作完全指南

Mermaid Live Editor&#xff1a;技术新手的可视化图表制作完全指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-edit…

作者头像 李华