上个样例讲到驱动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. Android中获取IMEI码

    Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getDeviceId(); 1.加入权限 在manifest.xml ...

  2. opencv中的meanshift图像切割

    Meanshift(均值漂移)是一种在一组数据的密度分布中寻找局部极值的稳定的方法.Meanshift不仅能够用于图像滤波,视频跟踪,还能够用于图像切割. 通过给出一组多维数据点,其维数是(x,y,r ...

  3. DelphiXE7中创建WebService(服务端+客户端) good

    相关资料:http://www.2ccc.com/news/Html/?1507.html DelphiXE7新建WebService具体操作:1.打开“DelphiXE7”->“File”-& ...

  4. 魔棒工具--RegionGrow算法简介

    原地址:http://www.cnblogs.com/easymind223/archive/2012/07/04/2576964.html ps里面的魔棒工具非常好用,是图像处理中非常常用的一个工具 ...

  5. DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...

  6. hdu 4274 Spy&#39;s Work(水题)

    Spy's Work Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. [品质生活] 舒适 Schick HYDRO 5剃须刀

    [品质生活] 舒适 Schick HYDRO 5剃须刀 [品质生活] 舒适 Schick HYDRO 5剃须刀

  8. sd nfrmtl

    http://www.zhihu.com/collection/24337307 http://www.zhihu.com/collection/24337259 http://www.zhihu.c ...

  9. MyEclipse配置启动多个Tomcat

    在实际开发中常常会遇到多个项目同一时候进行,来回切换不太方便,这时可分别部署在多个tomcat下. 改动一些配置可同一时候启动多个tomcat 一開始查阅相关文档,看到一篇文章一个Myeclipse同 ...

  10. [Unity3D]Unity3D游戏开发之ACT游戏三连击效果实现综述

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在研究了Unity3D Mecanim动画系统的重定向特性后,今天我们继续来探索Me ...