历史上的今天
今天是:2025年03月31日(星期一)
2020年03月31日 | 8*8LED点阵显示爱心的Arduino实现
2020-03-31 来源:eefocus
七夕前用树莓派实验了下8*8 LED点阵显示一颗爱心图案。其实这个功能用Arduino更为合适。撇开成本因素,树莓派实现是依赖一个死循环的,我关注了一下CPU使用率,运行期间可能会升到27%的样子,摸了一下CPU散热片,发热还是有一点的。所以决定在Arduino上再来一次。
原理不变,可以继续参考树莓派的那篇。地址:http://blog.csdn.net/ki1381/article/details/52134935
源代码如下,接线方法在头部的定义中。loop中顺便加了一点循环和延时,实现了闪烁效果。
/*
BOTH COL & ROW CHIPS ARE 74HC595
*/
#define RowData 10 // ROW CHIP PIN 14
#define RowDataInput 8 // ROW CHIP PIN 11
#define RowConfirm 9 // ROW CHIP PIN 12
#define ColData 7 // COL CHIP PIN 14
#define ColDataInput 5 // COL CHIP PIN 11
#define ColConfirm 6 // COL CHIP PIN 12
//#define EyeDelay 5
void setup() {
// initialize digital pin 13 as an output.
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}
void ConfirmRowDataInput()
{
digitalWrite(RowDataInput, LOW);
digitalWrite(RowDataInput, HIGH);
}
void ConfirmRowDataAll()
{
digitalWrite(RowConfirm, LOW);
digitalWrite(RowConfirm, HIGH);
}
void ConfirmColDataInput()
{
digitalWrite(ColDataInput, LOW);
digitalWrite(ColDataInput, HIGH);
}
void ConfirmColDataAll()
{
digitalWrite(ColConfirm, LOW);
digitalWrite(ColConfirm, HIGH);
}
void SelectRow(int ID)
{
for (int i = 1; i <= 8; i++)
{
if (i == ID)
{
digitalWrite(RowData, HIGH);
}
else
{
digitalWrite(RowData, LOW);
}
ConfirmRowDataInput();
}
ConfirmRowDataAll();
}
void SelectCol(char Data[8])
{
for (int i = 0; i < 8; i++)
{
if (Data[i] == '0')
digitalWrite(ColData, HIGH);
else
digitalWrite(ColData, LOW);
ConfirmColDataInput();
}
ConfirmColDataAll();
}
void ClearAll()
{
for (int i = 1; i <= 8; i++)
{
digitalWrite(RowData, LOW);
ConfirmRowDataInput();
}
ConfirmRowDataAll();
for (int i = 1; i <= 8; i++)
{
digitalWrite(ColData, HIGH);
ConfirmColDataInput();
}
ConfirmColDataAll();
}
void ShowHeart()
{
ClearAll();
SelectRow(1);
SelectCol("01101100");
//delay(EyeDelay);
ClearAll();
SelectRow(2);
SelectCol("10010010");
//delay(EyeDelay);
ClearAll();
SelectRow(3);
SelectCol("10000010");
//delay(EyeDelay);
ClearAll();
SelectRow(4);
SelectCol("01000100");
//delay(EyeDelay);
ClearAll();
SelectRow(5);
SelectCol("00101000");
//delay(EyeDelay);
ClearAll();
SelectRow(6);
SelectCol("00010000");
//delay(EyeDelay);
}
void loop() {
for (int i = 0; i < 200; i++)
{
ClearAll();
ShowHeart();
}
ClearAll();
delay(800);
}
上一篇:51例程---闪烁灯
史海拾趣
|
[url=http://www.cinzy.com/soft/COMdbg.rar]便携串口调试助手 精品[/url] 软件名称:COMdbg 版本 0.2 RC 更新日期:2008/5/20 大小:5.21K 简介: 串口调试软件中的一员,不同的是此版本纯API编写,运行高效稳定,只有5K,体系非常小巧,功能强大,非常值 ...… 查看全部问答> |
|
最近在2440上写了motorola L6我手机的USB驱动. 现在驱动能够被加载. 也能读取数据和设备描述符等. 但是有一个问题就是每次拔出我的设备时候. CE系统不调用我的回调函数. 以下是我注测回调函数的过程. 这种现象导致我手机拔出了. 但系统并没有释放US ...… 查看全部问答> |
|
LM3S板子申请了有段时间了,自己想做数据采集远程传输,现在也不知道板子能申请成功吗,先弄了个图像采集板,采用了应用广泛的SAA7113和SAA7121芯片,实现视频信号的采集和输出。输入输出接口采用通用的AV接口。 提供Video  ...… 查看全部问答> |
|
我用的MSP430与NRF2401做无线通信,问题是我没有发送信号,但是一把程序烧写进去就会出现DR1高电平。请高手看看 QQ:12676363. 怀疑是Receiveshock的问题。。 #include //2010.10.31 #define uchar unsigned char #define uint unsig ...… 查看全部问答> |
|
用的是STM32F207 串口要怎么设置 我发的是0x55 循环发送 DSP收到的是乱码(0x6633循环)是起始位和停止位的配置问题?void USART_Configuration(void) { USART_In ...… 查看全部问答> |




