max7219与arduino驱动设计例程

编程实验

72人已加入

描述

本文主要介绍了max7219与arduino驱动设计例程。重点介绍了Arduino Uno 使用MAX7219驱动单个8*8点阵LED模块;WeMos D1制作的MAX7219八位数码管实时时钟以及Arduino和Max7219Led点阵模块制作一个属于你的表白神器。谁说理工男不懂浪漫?这才是浪漫的正确打开方式。

实例一:Arduino Uno 使用MAX7219驱动单个8*8点阵LED模块3

只占用3个IO口,就可以控制8*8点阵的显示,非常实用,简单。

问题注意:

① 接线的时候,注意方向,在IN的方向接线(输入)

② LED的方向也要注意,如果显示不正常,请转变下安插的方向。

实验效果

MAX7219

接线方式

在IN方向的针脚

Arduino Uno --- MAX7219

5V 《---》 VCC

GND 《---》 GND

12 《---》 DIN

11 《---》 CS

10 《---》 CLK

程序:

#include 《LedControl.h》

int DIN = 12;

int CS = 11;

int CLK = 10;

byte e[8]= {0x7C,0x7C,0x60,0x7C,0x7C,0x60,0x7C,0x7C}; //E

byte d[8]= {0x78,0x7C,0x66,0x66,0x66,0x66,0x7C,0x78}; //D

byte u[8]= {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x7E}; //U

byte c[8]= {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E}; //C

byte eight[8]= {0x7E,0x7E,0x66,0x7E,0x7E,0x66,0x7E,0x7E}; //8

byte s[8]= {0x7E,0x7C,0x60,0x7C,0x3E,0x06,0x3E,0x7E}; //S

byte dot[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18}; //。

byte o[8]= {0x7E,0x7E,0x66,0x66,0x66,0x66,0x7E,0x7E}; //O

byte m[8]= {0xE7,0xFF,0xFF,0xDB,0xDB,0xDB,0xC3,0xC3}; //M

LedControl lc=LedControl(DIN,CLK,CS,4);

void setup(){

lc.shutdown(0,false); //启动时,MAX72XX处于省电模式

lc.setIntensity(0,8); //将亮度设置为最大值

lc.clearDisplay(0); //清除显示

}

void loop(){

byte smile[8]= {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};//笑脸

byte neutral[8]= {0x3C,0x42,0xA5,0x81,0xBD,0x81,0x42,0x3C};//标准脸

printByte(eight);//显示8

delay(1000);//延时1秒

printByte(neutral);//显示标准脸

delay(1000);

}

//点阵显示函数

void printByte(byte character [])

{

int i = 0;

for(i=0;i《8;i++)

{

lc.setRow(0,i,character[i]);

}

}

实例二 :WeMos D1制作的MAX7219八位数码管实时时钟

这是一片ESP8266开发板,直接能连Wifi,这个测试项目是通过WIFI连接时间服务器,然后在八位数码管显示实时时间,开机初始化时会显示“Arduino”。开发板选WeMos D1(Retired),如图。

MAX7219

开机显示Arduino

MAX7219

显示实时时间

MAX7219

#include 《LedControl.h》

#include《ESP8266WiFi.h》

#include《ESP8266WiFiMulti.h》

#include 《time.h》

#define timezone 8

const char* ssid = “TP-LINK_****”; //Wifi名称

const char* password = “********”; //Wifi密码

unsigned long MS_TIMER = 0;

unsigned long timer,lasttime=0;

char *time_str;

char H1,H2,M1,M2,S1,S2;

LedControl lc=LedControl(D12,D11,D10,1); // D12 -》DIN,D11-》CLK,D10-》CS,1片MAX7219

void WriteArduino() {

lc.setChar(0,7,‘a’,false);

lc.setRow(0,6,0x05);

lc.setChar(0,5,‘d’,false);

lc.setRow(0,4,0x1c);

lc.setRow(0,3,B00010000);

lc.setRow(0,2,0x15);

lc.setRow(0,1,0x1D);

}

void DispTime(){

lc.setChar(0,7,H1,false);

lc.setChar(0,6,H2,false);

lc.setRow(0,5,B00000001); //横线

lc.setChar(0,4,M1,false);

lc.setChar(0,3,M2,false);

lc.setRow(0,2,B00000001); //横线

lc.setChar(0,1,S1,false);

lc.setChar(0,0,S2,false);

}

void setup() {

delay(50);

Serial.begin(115200);

lc.shutdown(0,false); //屏初始化

lc.setIntensity(0,15); //亮度(0~15)

lc.clearDisplay(0); //清屏

WriteArduino(); //屏显“Arduino”

WiFi.disconnect();

WiFi.mode(WIFI_STA);//设置模式为STA

Serial.print(“Is connection routing, please wait”);

WiFi.begin(ssid, password); //Wifi接入到网络

Serial.println(“\nConnecting to WiFi”);

//如果Wifi状态不是WL_CONNECTED,则表示连接失败

while (WiFi.status() != WL_CONNECTED) {

Serial.print(“。”);

delay(1000); //延时等待接入网络

}

//设置时间格式以及时间服务器的网址

configTime(timezone * 3600, 0, “pool.ntp.org”, “time.nist.gov”);

Serial.println(“\nWaiting for time”);

while (!time(nullptr)) {

Serial.print(“。”);

delay(1000);

}

Serial.println(“”);

}

void loop() {

timer = millis();

if ((timer - lasttime)》=1000){

time_t now = time(nullptr); //获取当前时间

time_str = ctime(&now);

H1 = time_str[11];

H2 = time_str[12];

M1 = time_str[14];

M2 = time_str[15];

S1 = time_str[17];

S2 = time_str[18];

Serial.printf(“%s%c%c:%c%c:%c%c\n”,time_str,H1,H2,M1,M2,S1,S2);

DispTime();

lasttime = timer;

}

}

实例三:Arduino和Max7219Led点阵模块制作一个属于你的表白神器

前三行的代码要根据你自己的arduino版的Max7219的引脚来定的,这三个引脚是自定义的。

以下是Ascii码对照表,大家可以根据这个表来设计你喜欢的图案和文字

MAX7219

下面给大家看效果图:

MAX7219

MAX7219

MAX7219

MAX7219

MAX7219

程序:

int CLK = 2;

int CS = 1;

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

unsigned char disp1[38][8]={

{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7E},//L

{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O

{0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x18},//V

{0x7E,0x40,0x40,0x7E,0x40,0x40,0x40,0x7E},//E

{0x66,0xFF,0xFF,0xFF,0xFF,0x7E,0x3C,0x18},//TX

};

void Delay(double x)

{

double i;

for(i=0;i《x;i++);

}

void setup() {

// put your setup code here, to run once:

pinMode(CLK,OUTPUT);

pinMode(CS,OUTPUT);

pinMode(DIN,OUTPUT); //让三个脚都是输出状态

}

void loop() {

// put your main code here, to run repeatedly:

unsigned char i,j;

Delay_xms(50);

Init_MAX7219();

while(1)

{

for(j=0;j《38;j++)

{

for(i=1;i《9;i++)

Write_Max7219(i,disp1[j][i-1]);

Delay(80000);

}

}

}

void Delay_xms(unsigned int x)

{

unsigned int i,j;

for(i=0;i《x;i++)

for(j=0;j《112;j++);

}

//--------------------------------------------

//功能:向MAX7219(U3)写入字节

//入口参数:DATA

//出口参数:无

//说明:

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);

}

}

//-------------------------------------------

//功能:向MAX7219写入数据

//入口参数:address、dat

//出口参数:无

//说明:

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

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分