8*8LED点阵显示爱心的Arduino实现

2020-03-31来源: eefocus关键字:8*8LED  点阵显示  爱心  Arduino

七夕前用树莓派实验了下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);

 

}


关键字:8*8LED  点阵显示  爱心  Arduino 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492966.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51例程---闪烁灯
下一篇:74HC595在【8x8LED点阵】中的使用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于STC89c52单片机实现8*8led心跳效果
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器#include "intrins.h"typedef unsigned int u16;   //对数据类型进行声明定义typedef unsigned char u8;sbit SRCLK=P3^6; //使用hc595芯片sbit RCLK=P3^5; //使用hc595芯片sbit SER=P3^4;   //使用hc595芯片u8 ledduan[]={0x00,0x18,0x3c,0x1e,0x1e,0x3c,0x18,0x00};   
发表于 2020-05-04
51单片机复习:8*8led点阵
有两种,一种列为低电压通,行为高电压为通,我们可以依次将每一列接低电压,也就依次点亮然后利用行的电压来控制点亮,如果有一行电压为低,那一行的Led灯都不会亮第二种反之,列为高低压则通,行为低电压则通,两者同时符合,则对应的灯点亮74H595芯片在我使用的普中51单片机中,其控制行电压,而P0口则控制列电压其有三个引脚,SER(串行数据输入),SCLK(移位储存器时钟输入),CLK(数据储存器时钟输入)我是这样理解他们的,SER负责传送数据,每一次只能接受一位,而SCLK上升沿让移位有效,而CLK上升沿让整个数据的传输有效
发表于 2020-04-16
C51单片机学习---8*8LED点阵屏
关于8*8LED点阵屏1.8*8LED点阵屏原理图74HC595移位器:将串行输入—>>并形输出LED:单色光,三色光(红,绿,蓝–>>组成多种颜色)pitch:相邻两个点之间的间距。 2mm=2pitch实际应用: 广告//点亮最右边的led#include<reg52.h>#include<intrins.h> typedef unsigned char u8; typedef unsigned int u16;sbit SCK =P3^6;sbit RCK =P3^5;sbit SER =P3^4;void Hc595SendByte(u8 dat
发表于 2020-04-16
C51单片机学习---8*8LED点阵屏
基于51单片机开发板8*8LED矩阵的贪吃蛇程序
引语:过年的时候闲着无聊,恰好也刚学了点51开发板的东西,所以就想写一个贪吃蛇的小程序。在网上总结了一些关于贪吃蛇的算法,于是就有了以下的程序。先来说以一下算法的原理:将8*8LED看作是直角坐标系,将左上角定为坐标原点。定义两个数组  snake_x[],snake_y[]用来存储蛇的x,y轴坐标。因此,我们的核心算法就是小蛇惯性保持自己的运动姿态,产生食物,以及小蛇吃到食物后长度增加。再来看一下我的开发板,我的开发板是德飞莱51开发板,这里不再讲解其8*8LED的工作原理,直接上代码void Hc595SendByte(){ unsigned char a; SRCLK=0; RCLK=0; for(a=0;a<
发表于 2020-04-01
基于51单片机的贪吃蛇小程序(8*8LED点阵实现)
一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考!代码如下:先放段主函数压压惊void main(){ x_s[0] = 2;    //初始化三个点 y_s[0] = 3; x_s[1] = 3; y_s[1] = 3; x_s[2] = 4; y_s[2] = 3; Timer0Init(); suijishu(); while(1) {    appear();    if(flag_a) //蛇身移动位    {    if(!flag_s)   //蛇身死亡位
发表于 2020-03-24
51单片机8*8点阵显示
显示的是0-9数字显示,还有文字显示,请关注微信公众号“伊斯电子编程”免费获取。仿真图:代码:
发表于 2020-05-11
51单片机8*8点阵显示
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved