博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Arduino 数码管LED驱动 数组法
阅读量:6296 次
发布时间:2019-06-22

本文共 5364 字,大约阅读时间需要 17 分钟。

上个样例讲到驱动LED数码管,採用一种最直接的方案,对每一个LED进行高低电平的控制,这种长处是每一个LED都是受控可检的,避免了因为短路造成的假象,但对于数字变化来说,写起来就很冗余,因此这次尝试用数组的方法实现。

//设置阴极接口int d1 = 1;int d2 = 2;int d3 = 3;int d4 = 4;int d5 = 5;int d6 = 6;int d7 = 7;//设置阳极接口int a = 8;int b = 9;int c = 10;int d = 11;int e = 12;int f = 13;int g = A0;int h = A1;byte gyang[8] = { a, b, c, d, e, f, g, h };byte gyin[7] = { d1, d2, d3, d4, d5, d6, d7 }; byte gong_yang[14][8] = {                           { 1,1,0,0,0,0,0,0 },  // 0 = 缺水                          { 0,0,1,1,0,0,0,0 },  // 1 = 低水位                          { 0,0,0,0,1,1,1,0 },  // 2 = 定时关机                          { 1,1,1,1,1,1,0,0 },  // 3 = 0                          { 0,1,1,0,0,0,0,0 },  // 4 = 1                          { 1,1,0,1,1,0,1,0 },  // 5 = 2                          { 1,1,1,1,0,0,1,0 },  // 6 = 3                          { 0,1,1,0,0,1,1,0 },  // 7 = 4                          { 1,0,1,1,0,1,1,0 },  // 8 = 5                          { 1,0,1,1,1,1,1,0 },  // 9 = 6                          { 1,1,1,0,0,0,0,0 },  // 10 = 7                          { 1,1,1,1,1,1,1,0 },  // 11 = 8                          { 1,1,1,1,0,1,1,0 },  // 12 = 9                          { 0,0,0,0,0,0,0,1 },  // 13 = 摄氏度符号、睡眠符号                        };                         byte gong_yin[5][7] = {                           { 1,1,1,1,1,1,0 },  // 0 = 缺水、低水位、定时关机                          { 0,1,1,1,1,1,1 },  // 1 = 温度十位、摄氏度符号                          { 1,0,1,1,1,1,1 },  // 2 = 温度个位、睡眠符号                          { 0,0,1,1,1,1,1 },  // 3 = 温度个和十位                          { 1,1,0,0,0,0,1 },  // 4 = 时钟个、十位和两点                        }; void setup(){pinMode(d1, OUTPUT);pinMode(d2, OUTPUT);pinMode(d3, OUTPUT);pinMode(d4, OUTPUT);pinMode(d5, OUTPUT);pinMode(d6, OUTPUT);pinMode(d7, OUTPUT);pinMode(a, OUTPUT);pinMode(b, OUTPUT);pinMode(c, OUTPUT);pinMode(d, OUTPUT);pinMode(e, OUTPUT);pinMode(f, OUTPUT);pinMode(g, OUTPUT);pinMode(h, OUTPUT);digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, LOW);digitalWrite(g, LOW);digitalWrite(h, LOW);digitalWrite(d1, HIGH);digitalWrite(d2, HIGH);digitalWrite(d3, HIGH);digitalWrite(d4, HIGH);digitalWrite(d5, HIGH);digitalWrite(d6, HIGH);digitalWrite(d7, HIGH);}void loop(){  GongYang(0);  GongYin(0);  delay(300);  GongYang(1);  delay(300);  GongYang(2);  delay(300);  GongYin(3);  GongYang(3);  delay(300);  GongYang(4);  delay(300);  GongYang(5);  delay(300);  GongYang(6);  delay(300);  GongYang(7);  delay(300);  GongYang(8);  delay(300);  GongYang(9);  delay(300);  GongYang(10);  delay(300);  GongYang(11);  delay(300);  GongYang(12);  delay(300);  GongYang(13);  GongYin(1);  delay(300);  GongYin(2);  delay(300);  GongYin(4);  GongYang(3);  delay(300);  GongYang(4);  delay(300);  GongYang(5);  delay(300);  GongYang(6);  delay(300);  GongYang(7);  delay(300);  GongYang(8);  delay(300);  GongYang(9);  delay(300);  GongYang(10);  delay(300);  GongYang(11);  delay(300);  GongYang(12);  delay(300);}void GongYang(int x){  for (int i = 0; i < 8; i++)   {    digitalWrite(gyang[i], gong_yang[x][i]);  }}void GongYin(int y){  for (int i = 0; i < 7; i++)   {    digitalWrite(gyin[i], gong_yin[y][i]);  }}

SETUP语句和LOOP语句还有非常多冗余的代码,用for循环优化代码。

//设置阴极接口int d1 = 1;int d2 = 2;int d3 = 3;int d4 = 4;int d5 = 5;int d6 = 6;int d7 = 7;//设置阳极接口int a = 8;int b = 9;int c = 10;int d = 11;int e = 12;int f = 13;int g = A0;int h = A1;byte gyang[8] = { a, b, c, d, e, f, g, h };byte gyin[7] = { d1, d2, d3, d4, d5, d6, d7 }; byte gong_yang[14][8] = {                           { 1,1,0,0,0,0,0,0 },  // 0 = 缺水                          { 0,0,1,1,0,0,0,0 },  // 1 = 低水位                          { 0,0,0,0,1,1,1,0 },  // 2 = 定时关机                          { 1,1,1,1,1,1,0,0 },  // 3 = 0                          { 0,1,1,0,0,0,0,0 },  // 4 = 1                          { 1,1,0,1,1,0,1,0 },  // 5 = 2                          { 1,1,1,1,0,0,1,0 },  // 6 = 3                          { 0,1,1,0,0,1,1,0 },  // 7 = 4                          { 1,0,1,1,0,1,1,0 },  // 8 = 5                          { 1,0,1,1,1,1,1,0 },  // 9 = 6                          { 1,1,1,0,0,0,0,0 },  // 10 = 7                          { 1,1,1,1,1,1,1,0 },  // 11 = 8                          { 1,1,1,1,0,1,1,0 },  // 12 = 9                          { 0,0,0,0,0,0,0,1 },  // 13 = 摄氏度符号、睡眠符号                        };                         byte gong_yin[5][7] = {                           { 1,1,1,1,1,1,0 },  // 0 = 缺水、低水位、定时关机                          { 0,1,1,1,1,1,1 },  // 1 = 温度十位、摄氏度符号                          { 1,0,1,1,1,1,1 },  // 2 = 温度个位、睡眠符号                          { 0,0,1,1,1,1,1 },  // 3 = 温度个和十位                          { 1,1,0,0,0,0,1 },  // 4 = 时钟个、十位和两点                        }; void setup(){  pinMode(A0, OUTPUT);  pinMode(A1, OUTPUT);  for(int i=1; i<14;i++)  {    pinMode(i,OUTPUT);  }}void loop(){  GongYin(0);  for(int i=0; i<3; i++)  {    GongYang(i);    delay(300);  }  GongYin(3);  for(int i=3; i<13; i++)  {    GongYang(i);    delay(300);  }  GongYang(13);  GongYin(1);  delay(300);  GongYin(2);  delay(300);  GongYin(4);  for(int i=3; i<13; i++)  {    GongYang(i);    delay(300);  }}void GongYang(int x){  for (int i = 0; i < 8; i++)   {    digitalWrite(gyang[i], gong_yang[x][i]);  }}void GongYin(int y){  for (int i = 0; i < 7; i++)   {    digitalWrite(gyin[i], gong_yin[y][i]);  }}

转载地址:http://sblta.baihongyu.com/

你可能感兴趣的文章
关于redis的几件小事(六)redis的持久化
查看>>
webpack4+babel7+eslint+editorconfig+react-hot-loader 搭建react开发环境
查看>>
Maven 插件
查看>>
初探Angular6.x---进入用户编辑模块
查看>>
计算机基础知识复习
查看>>
【前端词典】实现 Canvas 下雪背景引发的性能思考
查看>>
大佬是怎么思考设计MySQL优化方案的?
查看>>
<三体> 给岁月以文明, 给时光以生命
查看>>
Android开发 - 掌握ConstraintLayout(九)分组(Group)
查看>>
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>