news 2026/3/27 23:51:09

【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/3/12 23:46:00

写论文软件哪个强?实测揭秘:虎贲等考 AI 为何能一骑绝尘?

“试过 6 款 AI 论文工具&#xff0c;不是 AI 痕迹重&#xff0c;就是文献引用造假&#xff1f;”&#x1f914;“花 59 元买的会员&#xff0c;生成的论文逻辑混乱&#xff0c;还不如自己写&#xff1f;”&#x1f4a5;“同样是 AI 辅助&#xff0c;为什么别人 15 天完成期刊论…

作者头像 李华
网站建设 2026/3/13 0:48:36

极速烧录!Etcher大文件写入性能暴增300%的终极指南

极速烧录&#xff01;Etcher大文件写入性能暴增300%的终极指南 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 还在为8GB系统镜像的漫长烧录时间而烦恼吗&#x…

作者头像 李华
网站建设 2026/3/28 1:01:57

C++高性能HTTP服务器终极指南:从基础到实战优化

C高性能HTTP服务器终极指南&#xff1a;从基础到实战优化 【免费下载链接】cpp-httplib A C header-only HTTP/HTTPS server and client library 项目地址: https://gitcode.com/GitHub_Trending/cp/cpp-httplib 你是否遇到过这样的困境&#xff1a;当Web应用并发量激增…

作者头像 李华
网站建设 2026/3/26 6:28:29

LobeChat菜谱推荐系统结合用户偏好

LobeChat菜谱推荐系统结合用户偏好 在智能健康日益成为生活刚需的今天&#xff0c;如何为不同体质、饮食习惯和健康目标的人群提供真正个性化的饮食建议&#xff0c;是一个兼具技术挑战与现实意义的问题。传统的食谱推荐应用往往基于静态标签匹配&#xff0c;难以理解“我最近在…

作者头像 李华
网站建设 2026/3/22 22:18:22

Day29~删除一个字符串中出现次数最少的字符(小写字母)

删除一个字符串中出现次数最少的字符(小写字母)#include <stdio.h> #include <string.h> #include <stdlib.h>#define MAX_SIZE 1024// 统计每个字母出现的次数 void sta_str_count(char *str, int *count) {while (*str ! \0) // 遍历整个字符{count[*str -…

作者头像 李华