概述

从点到线,从线到面。现在开始要来一片的 LED 了,一大波的 LED 正在到来!

示例程序

因为手头没有现成的模块,手头只有 595,所以这里每一个示例程序都是使用 74HC595 扩展 IO 口的。后面不多加备注了。

现成的模块还有其它专门的驱动芯片的,程序写起来就更简单了,要根据具体的驱动芯片来决定程序,这个程序不通用的哦。

点阵显示静止的心

别看到静止两个字,这里点阵可是动态扫描的哟。所以程序里不能有 delay() 等阻塞主函数的延时函数。

// ----------------------------------------------------------------------------
// LEDLattice.ino
//
// Created 2015-06-07
// By seesea <seesea2517#gmail#com>
//
// LED 点阵
// 使用两个 74HC595 驱动单色 LED 点阵
//
// ---------------------------------------------------------------------------- const unsigned char latchPin = ; // 595 的 ST_CP
const unsigned char clockPin = ; // 595 的 SH_CP
const unsigned char dataPin = ; // 595 的 DS #define SIZE 7 // 点阵的行列数 // 每一行的模值
const byte row[] =
{
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
}; // 心形的取模
const byte heart[] =
{
0xFF, 0x93, 0x6D, 0x7D, 0xBB, 0xD7, 0xEF, 0xFF
}; void setup ()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
} void loop()
{
showArrPic(heart);
} // 显示数组所代表的图片
void showArrPic(const byte arr[])
{
for (unsigned char i = ; i < ; ++i)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, (byte) arr[i]);
shiftOut(dataPin, clockPin, LSBFIRST, (byte) row[i]);
digitalWrite(latchPin, HIGH);
}
} // 另一种方式显示数组所代表的图片
void showArrPic2(const byte arr[])
{
static unsigned char i = ; digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, arr[i]);
shiftOut(dataPin, clockPin, LSBFIRST, row[i]);
digitalWrite(latchPin, HIGH); if (++i >= SIZE)
i = ;
}

简单看看接线吧,没有现成的模块,都是手工现搭的,纯天然……不建议自己搭,麻烦耗时还容易出错。(偷懒只在 VCC 处接了一个限流电阻,效果也还过得去,不怕麻烦的同学可以多加几个 :D )

飘落的心

没错,它动起来了,所以它是动态扫描的。好吧,前面的语句是错误的示范 :D

这个程序示范了一个位移动画。

// ----------------------------------------------------------------------------
// latticeDownHeart.ino
//
// Created 2015-06-07
// By seesea <seesea2517#gmail#com>
//
// 点阵动画:飘落的心
// 使用两个 74HC595 驱动单色 LED 点阵,显示一个向下飘落的心,展示位移动画
//
// ---------------------------------------------------------------------------- const unsigned char latchPin = ; // 595 的 ST_CP
const unsigned char clockPin = ; // 595 的 SH_CP
const unsigned char dataPin = ; // 595 的 DS const unsigned long delayMs = ; // 图像运动延时时间 #define SIZE 8 // 点阵的行列数 // 每一行的模值
const byte row[] =
{
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
}; // 心形的取模
const byte heart[] =
{
0xFF, 0x93, 0x6D, 0x7D, 0xBB, 0xD7, 0xEF, 0xFF
}; void setup ()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
} void loop()
{
static char y = -;
static unsigned long lastTick = millis(); // 延时一定时间后,移动坐标
if (millis() - lastTick > delayMs)
{
++y;
lastTick = millis(); if (y > SIZE)
y = -;
} showArrPic(heart, , y);
} // 显示数组所代表的图片
// 以 (x, y) 为左上角起点位置,默认在 (0, 0) 位置显示
// 坐标系:
// +------>
// | x
// |
// v y
//
void showArrPic(const byte arr[], char x, char y)
{
for (char i = ; i < SIZE; ++i)
{
if (i + x < || i + x >= SIZE ||
i + y < || i + y >= SIZE)
{
continue;
} digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, (byte) arr[i + x]);
shiftOut(dataPin, clockPin, LSBFIRST, (byte) row[i + y]);
digitalWrite(latchPin, HIGH);
}
}

咦,手机拍下的效果还有拖影,将就点吧,意思到了就行:):

走动的小人

这里演示了一个逐帧动画。

// ----------------------------------------------------------------------------
// LEDLattice.ino
//
// Created 2015-06-07
// By seesea <seesea2517#gmail#com>
//
// 点阵动画:人物走路的逐帧动画演示
// 使用两个 74HC595 驱动单色 LED 点阵
//
// ---------------------------------------------------------------------------- const unsigned char latchPin = ; // 595 的 ST_CP
const unsigned char clockPin = ; // 595 的 SH_CP
const unsigned char dataPin = ; // 595 的 DS const unsigned long frameDelayMs = ; #define FRAME_NUM 4 // 关键帧帧数
#define SIZE 8 // 点阵的行列数 // 每一行的模值
const byte row[] =
{
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
}; // 人物走路的关键帧的取模
const byte man[FRAME_NUM][SIZE] =
{
{0xE7,0xE7,0xFF,0xC3,0xC5,0xE7,0xDB,0xBD},
{0xE7,0xE7,0xFF,0xE7,0xE3,0xE7,0xEB,0xDB},
{0xE7,0xE7,0xFF,0xE7,0xE7,0xE7,0xE7,0xE7},
{0xE7,0xE7,0xFF,0xE7,0xE3,0xE7,0xEB,0xDB}
}; void setup ()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
} void loop()
{
static unsigned long lastTick = millis();
static unsigned char frame = ; // 延时一帧时间后,进入下一帧
if (millis() - lastTick >= frameDelayMs)
{
lastTick = millis(); ++frame;
if (frame >= FRAME_NUM)
frame = ;
} showArrPic(man[frame]);
} // 显示数组所代表的图片
void showArrPic(const byte arr[])
{
for (unsigned char i = ; i < SIZE; ++i)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, (byte) arr[i]);
shiftOut(dataPin, clockPin, LSBFIRST, (byte) row[i]);
digitalWrite(latchPin, HIGH);
}
}

没有绘画天分,这全是手工点出来的点阵越看越不像,大家将就点吧:

Arduino 入门程序示例之一片 LED(2015-06-11)的更多相关文章

  1. Arduino 入门程序示例之一个 LED(2015-06-11)

    前言 答应了群主写一些示例程序,一直拖延拖延拖延唉.主要还是害怕在各大高手面前班门弄斧……(这也算是给拖延症找一个美好的理由吧),这几天终于下决心要写出来了,各位高手拍砖敬请轻拍啊. 示例程序 首先是 ...

  2. Arduino 入门程序示例之一排 LED(2015-06-11)

    概述 最简单的一个 LED 的实验之后,自然是增加几个 LED,咱排成一排来玩吧.最后,再把一排的 LED 排成一个 8 字来玩——七段数码管. 示例程序 流水灯 第一个出场的肯定是经典的流水灯,也叫 ...

  3. Arduino 入门程序示例之直流电机(2015-06-15)

    概述 演示直流电机的控制. 示例程序 PWM控制直流电机 略过控制电机转停的示例啦,有需要就把这里的 PWM 换成数字口输出 HIGH 或 LOW 就行了. // ------------------ ...

  4. arduino入门学习实现语音控制LED灯

    需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...

  5. 译文 [ROM][多国语言][2015.06.11] Lenovo S750 (MTK6589) - andrea_d86-lenovos750-4.2.2

    ************************************************** andrea_d86-lenovos750-4.2.2-150530 ************** ...

  6. 2015.06.11,技术,关于Matlab中的Jbtest检验

    总体分布的正态性检验一般采取Jarque-Bera检验方法. 1. JBTest检验的定义: 在统计学中,Jarque-Bera检验是对样本数据是否具有符合正态分布的偏度和峰度的拟合优度的检验.该检验 ...

  7. Arduino 极速入门系列–1 点亮 LED

    本篇内容为,使用 Arduino 点亮 LED 的做法示范.很简单的一个入门示范.我们让 LED 闪. 本篇使用到的工具和材料 Arduino Mini Pro 1 PCS Mini USB 数据线 ...

  8. Arduino入门学习

    一直听到许多做物联网.智能家居的控制器使用的是Arduino,从师兄那里拿到了一块Arduino开发板,进行了一下午的学习,感觉这个适合小孩子们玩:) 废话少说,总结一下,便于以后可能会用得到.我主要 ...

  9. struts2入门程序

    struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ...

随机推荐

  1. [Leetcode]-containsNearbyDuplicate

    //题目: //给定一个整数数组与一个整数k,当且存在两个不同的下标i和j满足nums[i] = nums[j]而且| i - j | <= k时返回true.否则返回false. #inclu ...

  2. XML和DTD的简单介绍和入门

    XML(Extensible Markup Lanaguage),可扩展标记语言,是标准通用标记语言(Standard Generalized Markup Language, SGML)的一个子集, ...

  3. SQL Server 中 RAISERROR 的用法(转)

    在存储过程中进程会处理一些逻辑性的错误,如:将RMB转换为USD时,没有查询到想要的汇率 这个时候最好在存储过程中抛个异常,方便自己查找错误信息... 其语法如下: RAISERROR ( { msg ...

  4. CSS的z-index(分层)

    z-index是针对网页显示中的一个特殊属性.因为显示器是显示的图案是一个二维平面,拥有x轴和y轴来表示位置属性.为了表示三维立体的概念如显示元素的上下层的叠加顺序引入了z-index属性来表示z轴的 ...

  5. SDWebImage内部实现过程

    入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处 ...

  6. iOS获取运营商信号强度

    此API是apple私有API,所以只可运用在越狱设备中,如果提交appstore,会遭遇apple的拒绝上架反馈! #import <dlfcn.h> int getSignalLeve ...

  7. Hadoop平台安装前准备

    集群配置 准备工作 1.  Iptables #chkconfig iptables –list #chkconfig iptables –level 3456off #service iptable ...

  8. python笔记之列表与元组函数和方法使用举例

    在学习列表之前先了解了raw_input和input的区别:(仅适用于版本2,版本3中raw_input和input合并,没有raw_input) input的语法为:input("str& ...

  9. 深入select_related与prefetch_related函数

    阅读博客http://blog.jobbole.com/74881/的笔记 在数据库有外键的时候,使用select_related()和prefetch_related()可以很好的减少数据库请求的次 ...

  10. js正则表达式的使用

    正则表达式的常用字符:   符号 描述 /../ 代表一个模式的开始和结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 \s 任何空白字符 \S 任何非空白字符 \d 匹配一个数字字符,等价于[1-9 ...