请选择 进入手机版 | 继续访问电脑版
凡是官网购买产品,均可以获得积分,(积分可以用来下载技术资料)还可以获得精致技术支持。零知实验室可提供全套电子方案定制服务,了解详情请咨询客服。           
查看: 835|回复: 1

零知开源小项目-MAX7219LED点阵制作表白神器

[复制链接]
发表于 2019-7-26 11:36:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 零知小技术 于 2019-7-30 18:15 编辑

前面我们已经做过了针脚LED点阵的小实验,但针脚LED接线太多,让人感觉很乱,现在我们用MAX7219来驱动8X8LED点阵,只需要5根线就能控制原来需要16根线的8x8点阵。
一、工具原料

QQ图片20190730174830.jpg

二、硬件连接

MAX7219 LED点阵上的CLK,CS,DIN脚分别连接零知标准板的11,12,13号引脚,VCC接标准板的5V,GND接标准板的GND。
QQ截图20190726136.jpg

实物连接如下:
QQ图片20190726112506.jpg

三、软件代码
打开零知开发工具,新建项目,输入以下代码
[C++] 纯文本查看 复制代码
/**********************************************************
*    文件: heart.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
*    -^^- 零知开源,让电子制作变得更简单! -^^-
*    时间: 2019/07/23 15:47
*    说明:
************************************************************/
int CLK = 11;

int CS = 12;

int DIN = 13; //这里定义了那三个脚

unsigned char disp1[6][8]={
        
{0x20,0x20,0x20,0x20,0x20,0x20,0x3C,0x00},//L                               这里的0x表示十六进制,将其转换成二进制,其中的1即组成想要的图案
{0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00},//O                              例如L:          0x20          0  0  1  0  0  0  0  0
//{0x00,0x00,0x18,0x24,0x24,0x24,0x18,0x00},//o                                            0x20          0  0  1  0  0  0  0  0
{0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00},//V                                              0x20          0  0  1  0  0  0  0  0
//{0x00,0x00,0x00,0x24,0x24,0x24,0x18,0x00},//v                                            0x20          0  0  1  0  0  0  0  0
{0x3C,0x20,0x20,0x3C,0x20,0x20,0x3C,0x00},//E                                              0x20          0  0  1  0  0  0  0  0
//{0x00,0x00,0x18,0x24,0x38,0x20,0x18,0x00},//e                                            0x20          0  0  1  0  0  0  0  0
{0x00,0x24,0x7E,0x7E,0x3C,0x18,0x00,0x00},//小❤                                            0x3c          0  0  1  1  1  1  0  0
//                                                                                          0x00          0  0  0  0  0  0  0  0
{0x66,0xFF,0xFF,0xFF,0x7E,0x3C,0x18,0x00} //大❤
        
};

void setup() {
        
        // put your setup code here, to run once:
        
        pinMode(CLK,OUTPUT);
         
        pinMode(CS,OUTPUT);
        
        pinMode(DIN,OUTPUT); //让三个脚都是输出状态
        
        Init_MAX7219();
        
}

unsigned char i,j;
void displayHeart(int time)
{
        for(j=4;j<6;j++)
        
        {
                
                for(i=1;i<9;i++)    
                Write_Max7219(i,disp1[j][i-1]);
                delay(time);
                
        }
}

void loop() {

        for(j=0;j<4;j++)  //显示LOVE
        
        {
                
                for(i=1;i<9;i++)

                Write_Max7219(i,disp1[j][i-1]);
                delay(800);
                
        }
        int x=0;
        while(x++<4)  //显示心形
        {
        displayHeart(150);
        displayHeart(100);
        displayHeart(150);
        displayHeart(300);
        }
}

void Write_Max7219_byte(unsigned char DATA)

{
        
        unsigned char i;
        
        digitalWrite(CS,LOW);
        
        for(i=8;i>=1;i--)
        
        {
                
                digitalWrite(CLK,LOW);
                
                if(DATA&0X80)
                
                digitalWrite(DIN,HIGH);
                
                else
                
                digitalWrite(DIN,LOW);
                
                DATA<<=1;
                
                digitalWrite(CLK,HIGH);
                
        }
        
}

void Write_Max7219(unsigned char address,unsigned char dat)

{
        
        digitalWrite(CS,LOW);
        
        Write_Max7219_byte(address); //写入地址,即数码管编号
        
        Write_Max7219_byte(dat); //写入数据,即数码管显示数字
        
        digitalWrite(CS,HIGH);
        
}

void Init_MAX7219(void)

{
        
        Write_Max7219(0x09, 0x00); //译码方式:BCD码
        
        Write_Max7219(0x0a, 0x03); //亮度
        
        Write_Max7219(0x0b, 0x07); //扫描界限,4个数码管显示
        
        Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1
        
        Write_Max7219(0x0f, 0x00); //显示测试:1,测试结束,正常显示:0
        
}


然后验证,上传到零知标准板上


四、效果展示
上面步骤成功完成后,我们就可以看到预期的结果了(这里因为录制动图的原因,帧率略低)。视频请看下一楼。
V90723-134531.gif

回复

使用道具 举报

 楼主| 发表于 2019-7-30 09:35:32 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 小黑屋| 零知实验室 ( 粤ICP备17040594号-3 )

GMT+8, 2020-2-25 20:01 , Processed in 0.064190 second(s), 18 queries .

快速回复 返回顶部 返回列表