// 寄存器介绍 参考连接 https://www.cnblogs.com/sunshine-jackie/p/16645522.html
//这位写的也很不错 后期用到51单片机 可参考http://t.csdnimg.cn/qIK0l
//管脚定义
const int LOAD=7; //MAX7219 片选 7脚 CS
const int DIN=11; //MAX7219 串行数据 11脚 DIN
const int CLK=13; //MAX7219 串行时钟 13脚 CLK
//寄存器宏定义
#define DECODE_MODE 0x09 //译码控制寄存器
#define INTENSITY 0x0A //亮度控制寄存器
#define SCAN_LIMIT 0x0B //扫描界限寄存器
#define SHUT_DOWN 0x0C //关断模式寄存器
#define DISPLAY_TEST 0x0F //测试控制寄存器
void Write7219(unsigned char address,unsigned char dat);
void Initial();
void setup() {
// put your setup code here, to run once:
pinMode(LOAD,OUTPUT);
pinMode(DIN,OUTPUT);
pinMode( CLK,OUTPUT); //让三个脚都是输出状态
Initial(); //MAX7219初始化
}
void loop() {
// put your main code here, to run repeatedly:
unsigned char i;
for(i=1;i<9;i++)
{
Write7219(i,i); //数码管显示1~8
}
delay(2);
}
//地址、数据发送子程序
void Write7219(unsigned char address,unsigned char dat)
{
unsigned char i;
//发送地址
for (i=0;i<8;i++) //移位循环8次
{
// CLK=0; //清零时钟总线
digitalWrite(CLK, LOW);
if(address&0x80) //判断取高字节
digitalWrite(DIN, HIGH);
else
digitalWrite(DIN, LOW);//判断取高字节
address<<=1; //左移一位
//LOAD=0; //拉低片选线,选中器件
digitalWrite(LOAD, LOW);
//CLK=1; //时钟上升沿,发送地址
digitalWrite(CLK, HIGH);
delay(2);
}
//发送数据
for (i=0;i<8;i++)
{
//DIN=(dat&0x80);
if(dat&0x80) //判断取高字节
digitalWrite(DIN, HIGH);
else
digitalWrite(DIN, LOW);//判断取低字节
dat<<=1;
//CLK=0;
digitalWrite(CLK, LOW);
// CLK=1; //时钟上升沿,发送数据
digitalWrite(CLK, HIGH);
}
//LOAD=1; //发送结束,上升沿锁存数据
digitalWrite(LOAD, HIGH);
delay(2);
}
//MAX7219初始化,设置MAX7219内部的控制寄存器
void Initial(void)
{
Write7219(SHUT_DOWN,0x01); //开启正常工作模式(0xX1)
Write7219(DISPLAY_TEST,0x00); //选择工作模式(0xX0)
Write7219(DECODE_MODE,0xff); //选用全译码模式 Code B decode for digits 7-0
Write7219(SCAN_LIMIT,0x07); //8只LED全用 (0xX1)
Write7219(INTENSITY,0x04); //设置初始亮度
}
Arduino MAX7219 基础显示操作
于 2024-09-07 14:34:40 首次发布