2026/6/7 22:54:44
网站建设
项目流程
wordpress sweep,seo矩阵培训,网页培训多少钱,平面设计公司理念目录 一.1位数码管模拟值1.共阳极数码管实验效果2.共阳极与共阴极数码管原理与构造数码管内部构造 3.需要的组件4.共阳极数码管接线图5.共阳极代码阳极代码调换为阴极 6.优化代码补充说明 7.总结 一.1位数码管模拟值
1.共阳极数码管实验效果 数码管模拟值实验共阳极2.共阳极与…目录一.1位数码管模拟值1.共阳极数码管实验效果2.共阳极与共阴极数码管原理与构造数码管内部构造3.需要的组件4.共阳极数码管接线图5.共阳极代码阳极代码调换为阴极6.优化代码补充说明7.总结一.1位数码管模拟值1.共阳极数码管实验效果数码管模拟值实验共阳极2.共阳极与共阴极数码管原理与构造数码管内部构造内部结构一位数码管通常由 8 个发光二极管组成其中 7 个用于构成数字 0-9 的字形分别标记为A、B、C、D、E、F、G另一个为小数点DP。数码管分类及工作原理按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。型号分别是共阳极数码管5161BS和共阴极数码管5161AS共阳极数码管公共脚是正极阳极也就是所有二极管的阳极连接在一起作为公共端作为公共端所有的段码实际上是负极当某一个或某几个段码位接低电平(LOW)公共脚接高电平接5V时对应的段码位就能点亮。共阴极数码管公共脚是负极阴极也就是所有二极管的阴极连接在一起作为公共端段码位是阳极当公共脚接地3号接GND段码位接高电平(HIGH)时对应段码位点亮。3.需要的组件将需要以下组件Arduino UNO开发板1个1位共阳极数码管8个1k欧姆电阻1个面包板若干杜邦线或者跳线4.共阳极数码管接线图注意我选用的数码管为阳极所以公共脚3号和8号接5V再来细究一下数码管所对应的引脚1-g2-f4-a5-b6-e7-d9-c10-h5.共阳极代码inta2;// 定义数字接口2 连接aintb3;// 定义数字接口3 连接bintc4;// 定义数字接口4 连接cintd5;// 定义数字接口5 连接dinte6;// 定义数字接口6 连接eintf7;// 定义数字接口7 连接fintg8;// 定义数字接口8 连接ginth9;// 定义数字接口9 连接h也就是数码管中的dpvoidsetup(){// put your setup code here, to run once:inti;for(i2;i9;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);}阳极代码调换为阴极在讲义中修改为共阴极需要将段脚设为LOW熄灭HIGH点亮也就是原代码中所有digitalWrite的HIGH和LOW互换如果烧录进去的代码是阴极的而数码管是阳极并且接在5V上就会出现数码管模拟值实验共阳极反面案例6.优化代码结合一维数组、二维数组和函数的封装优化上述代码intsegPins[]{2,3,4,5,6,7,8,9};// a,b,c,d,e,f,g,dp(h)constintSEGMENT_COUNT8;// 段数a-g dp// 共阳极数码管段码表0-9每一行对应一个数字每一列对应segPins的引脚电平// 数组索引0:a,1:b,2:c,3:d,4:e,5:f,6:g,7:dpbyte numCodes[10][8]{{LOW,LOW,LOW,LOW,LOW,LOW,HIGH,LOW},// 0{HIGH,LOW,LOW,HIGH,HIGH,HIGH,HIGH,LOW},// 1{LOW,LOW,HIGH,LOW,LOW,HIGH,LOW,LOW},// 2{LOW,LOW,LOW,LOW,HIGH,HIGH,LOW,LOW},// 3{HIGH,LOW,LOW,HIGH,HIGH,LOW,LOW,LOW},// 4{LOW,HIGH,LOW,LOW,HIGH,LOW,LOW,LOW},// 5{LOW,HIGH,LOW,LOW,LOW,LOW,LOW,LOW},// 6{LOW,LOW,LOW,HIGH,HIGH,HIGH,HIGH,LOW},// 7{LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW},// 8{LOW,LOW,LOW,LOW,HIGH,LOW,LOW,LOW}// 9};voidsetup(){// 设置所有段引脚为输出模式for(inti0;iSEGMENT_COUNT;i){pinMode(segPins[i],OUTPUT);}}voidloop(){// 循环显示0-9每个数字显示1秒for(intnum0;num10;num){displayNumber(num);delay(1000);}}// 通用显示函数根据数字显示对应的段码voiddisplayNumber(intnumber){// 检查数字范围避免数组越界if(number0||number9){return;// 超出范围不显示}// 遍历所有段引脚设置对应电平for(inti0;iSEGMENT_COUNT;i){digitalWrite(segPins[i],numCodes[number][i]);}}1.段引脚数组 segPins把原来分散定义的 a-h 引脚整合到一个数组中方便循环操作减少重复代码。2.段码表 numCodes二维数组:第一维表示数字0-9第二维表示对应段的电平把原来 10 个函数里的电平值集中存储一目了然修改时只需改数组值3.简化的 loop 函数用一个 for 循环遍历 0-9调用通用显示函数替代原来重复调用 10 个函数的写法补充说明共阴极数码管高电平点亮对应段低电平(LOW)熄灭共阳极数码管低电平点亮对应段高电平(HIGH)熄灭如果需要关闭小数点可以将段码表中最后一列dp 位全部改为HIGH7.总结每一次做Arduino板子的实验都会从中受益很多不仅对电子元器件上的还有对代码上的理解都是一种进步与挑战