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

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

1、材料

零知标准板(点击购买)
MAX7219 LED点阵(点击购买)
面包板+若干跳线(点击购买)

2、硬件连接

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

实物连线如图所示:

2、程序


												
	/**********************************************************
	*    文件: 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
	         
	}
						

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

四、效果展示

上面步骤成功完成后,我们就可以看到预期的结果了(这里因为录制动图的原因,帧率略低)