上个样例讲到驱动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]);
}
}

Arduino 数码管LED驱动 数组法的更多相关文章

  1. Arduino 数码管LED屏驱动

    今天測试数码管LED屏驱动,用某产品的一个共阴极的LED屏,依据电路图做数码管LED屏的检測. 代码写得有些冗长,有好几种驱动的方法,这里仅仅是当中一种最直接的方案,抽出时间要做个更有效率的调用和驱动 ...

  2. Arduino 数码管LED驱动器 阵列方法

    样品谈到最后一个驱动程序LED数码管,采用了最简单的解决方案之一,对于每一个LED高低电平控制,这样的好处是每个LED控制可检.避免短路造成的错觉,因为,但是对于数字的变化是,它是多余的写,因此,这种 ...

  3. 音响音箱/恒温壶/电量显示/电子数字时钟等LED数码管显示驱动IC-VK1640B 8段12位/12段8位显示

    市面上最常用的数码管为七段/八段显示,八段数码管比七段数码管多一个发光二极管单元(比七段数码管多一个点),又按能显示多少个"8"可分为1位.2位.4位等等.数码管又分为共阳极驱动/ ...

  4. Arduino 翻译系列 - LED 灯闪烁

    原文地址 - https://www.arduino.cc/en/Tutorial/Blink 闪烁 这个例子展示了你能拿 Arduino / Genuino 板子来干的最简单的事:使开发板上的 LE ...

  5. [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY

    目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...

  6. Android系统移植与驱动开发——第七章——LED驱动

    LED驱动的实现原理 编写LED驱动: 测试LED驱动之前需要用USB数据线连接开发板,然后打开电源,成功启动之后,执行build.sh脚本文件编译和安装LED驱动,顺利则会自动连接 如果有多个设备文 ...

  7. 全志A33 linux led驱动编程(附实测参考代码)

    开发平台 * 芯灵思SinlinxA33开发板 淘宝店铺: https://sinlinx.taobao.com/ 嵌入式linux 开发板交流 QQ:641395230 开发平台 * 芯灵思Sinl ...

  8. (笔记)linux设备驱动--LED驱动

    linux设备驱动--LED驱动 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友 ...

  9. 基于S3C2440的linux-3.6.6移植——LED驱动【转】

    本文转载自:http://www.voidcn.com/blog/lqxandroid2012/article/p-625005.html 目前的linux版本的许多驱动都是基于设备模型,LED也不例 ...

随机推荐

  1. 理解Windows内核模式与用户模式

     1.基础 执行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式". 依据处理器上执行的代码的类型,处理器在两个模式之间切换.应 ...

  2. VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了

    在虚拟机软件中VMware Workstation算是一款非常强大较稳定的软件了,今天 VMware Workstation 10.0正式发布了,最让人欣喜的是该版本终于有了简体中 文版了,从现在开始 ...

  3. 用gradle管理android项目出现的问题以及解决方法

    1.项目结构 最好是全部在root 项目配置 一个settings.gradle 一个build.gradle 2.多项目依赖 http://www.gradle.org/docs/current/u ...

  4. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  5. 快速学会搭建SVN服务器

    原文:快速学会搭建SVN服务器 SVN是一个版本控制工具,常用于我们软件开发项目中,用来管理我们团队共同使用的代码,文档等历史版本的管理,保持代码的更新,避免混乱. 需要工具: svn安装程序:免费下 ...

  6. MyCAT部署及实现读写分离(转)

    MyCAT是mysql中间件,前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之.于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显.这篇文章主要是MyCAT的入门部署. ...

  7. UVA796- Critical Links(无向图中的桥梁)

    题目链接 题意: 给出一个无向图,按顺序输出桥 思路:求出全部的桥,然后按顺序输出就可以 代码: #include <iostream> #include <cstdio> # ...

  8. ThinkPHP的连贯操作方法中field方法

    ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段,下面详细道来. 1.用于查询 在查询操作中field方法是使用最频繁的. $Model ...

  9. 初步C++运算符重载学习笔记&lt;3&gt; 增量递减运算符重载

    初步C++运算符重载学习笔记<1> 初探C++运算符重载学习笔记<2> 重载为友元函数     增量.减量运算符++(--)分别有两种形式:前自增++i(自减--i).后自增i ...

  10. Orchard

    Orchard工作原理 概述 本文翻译仅供学习之用,了解Orchard工作原理设计思想.技术点及关键词,如有缺漏请不吝指正.鉴于能力有限定有诸多曲解或不完整的地方,请海涵.不定时完善整理. CMS不像 ...