上个样例讲到驱动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. eclipse Maven构建的project无法公布lib到tomcat的解决方法

    问题: eclipse导入基于Maven的web项目时,公布到tomcat中.发现lib文件夹及jar包没有公布过去. 解决方式: eclipse中,选择项目属性Properties --> D ...

  2. Centos 7 学习之静态IP设置

    原文链接:http://blog.csdn.net/johnnycode/article/details/40624403 本学习主要针对 Centos 7.0.1406 版本进行学习整理! 如果你使 ...

  3. SetDlgItemText控件运行错误

    SetDlgltem函数把一个WM_SETTEXT消息发送到指定的控件. 今天在测试一个小程序,发现使用SetDlgItemText控件编译没问题,但是运行就出错误. 语句为: time=CTime: ...

  4. 纠正一个概念:类就有VMT,各实例不过是共享这个VMT而已

    不是只有实例才有VMT,举个例子,各实例的VMT地址是相同的: Use System.Contnrs; procedure TForm1.BitBtn2Click(Sender: TObject); ...

  5. Python+Django+SAE系列教程14-----使表单更安全

    还记得我们上一章提到过的加入页面吗? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVtZW5nMTk4MA==/font/5a6L5L2T/fonts ...

  6. Echart饼图、柱状图、折线图(pie、bar、line)加入点击事件

    var myChart= echarts.init(document.getElementById('myChart')); myChart.on('click', function (param) ...

  7. Java NIO的性能

    最近调研了一下mina和netty框架的性能,主要是想了解java nio在单机能支持多少长连接. 首先,mina的qq群有同学反映说单机支持3w长连接是没问题的 其次,http://amix.dk/ ...

  8. hdu 4925 贪心 自己从小到大做数据找方法规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4925 自己逐个做数据找规律.提供下我的找的: 1 2 1 3 2 2 2 3 3 3 然后发现这种矩阵是最优的: ...

  9. C++实现链栈的基本操作

    之前对顺序栈写了基本操作,认为有必要也动手练练栈的链表实现. 对于链栈,一般不会出现栈满的情况. 链栈头文件定义例如以下: #ifndef CSTOCK_H_ #define CSTOCK_H_ ty ...

  10. CSDN博客的一些问题(友好的吐槽)--后记,有一点点改进

    近期,CSDN博客真的非常不稳定,时常会出现503错误. 昨天.我发现自己的博客的訪问量仅仅有4万多,今天最终发现它变回原来的6万多了. 我写博客不是为了这个訪问量,可是,CSDN这点使用问题啦. 或 ...