介绍
MAX7219使用代码
软件架构
适用于STC89系列单片机的,使用MAX7219驱动的led点阵代码。
使用环境
- 单片机晶振:11.0592MHz;
- 传感器数据接口: LOAD=P1^1; DIN=P1^0; CLK=P1^2;
使用说明
1.void max7219SendData(uchar address,uchar dat);
//向MAX7219指定地址(即哪一位)发送数据
//参数:
//address: 范围 0x00~0x07
//dat:要显示的内容
2.void max7219Init();
//MAX7219初始化
MAX7219简要说明
引脚功能
DIN:串行数据输入端
DOUT:串行数据输出端,用于级联扩展
LOAD(CS):装载数据输入
CLK:串行时钟输入
寄存器 | 地址 | |
---|---|---|
No-Op | 无操作 | 0xX0 |
Digit 0 | 数据0 | 0xX1 |
Digit 1 | 0xX2 | |
Digit 2 | 0xX3 | |
Digit 3 | 0xX4 | |
Digit 4 | 0xX5 | |
Digit 5 | 0xX6 | |
Digit 6 | 0xX7 | |
Digit 7 | 0xX8 | |
Decode Mode | 译码控制寄存器 | 0xX9 |
Intensity | 亮度控制器寄存器 | 0xXA |
Scan Limit | 扫描界限寄存器 | 0xXB |
Shutdown | 关断模式寄存器 | 0xXC |
Display Test | 测试控制寄存器 | 0xXF |
Decode Mode:
有效值:0x00,0x01,0x0f,0xff
0x00:无译码模式。数码管7--0有效
0x01:译码数码管0,7-1为无译码模式
0x0f:译码数码管3--0,7--4为无译码模式
0xff:译码模式。数码管7--0有效
Scan Limit:
有效值:0x00~0x07
0x00~0x07分别对应扫描几个数码管。0x00只扫描第0个数码管,以此类推。
Shutdown:
有效值:0x00,0x01。
主要功能是为了在不需要数码管显示时进入省电模式。
0x00:进入关断模式
0x01:正常显示模式
Intensity:
有效值:0xX0~0xXF
主要用于设置亮度
Display Test:
有效值:0xX0,0xX1
0xX0:正常工作状态
0xXF:测试状态,各位显示全亮
MAX7219.C
#include "max7219.h"
#include "INTRINS.H"
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void max7219SendData(uchar address,uchar dat){
uchar i;
LOAD=0;//拉低片选线,选中器件
//发送地址
for (i = 0; i < 8; i++)
{
CLK=0; //清零时钟总线
DIN=(bit)(address&0x80);//每次取高字节
address<<=1;//左移一位
// Delay1ms();
CLK=1; //时钟上升沿,发送地址
}
//发送数据
for (i = 0; i < 8; i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
// Delay1ms();
CLK=1;
}
LOAD=1;
}
void max7219Init(){
max7219SendData(SHUTDOWN,0x01);//正常工作模式,非关断模式
max7219SendData(DISPLAYTEST,0x00);//选择正常工作模式
max7219SendData(DECODEMODE,0x00);//选用无译码模式
max7219SendData(SCANLIMIT,0x07);//8位全用模式
max7219SendData(INTENSITY,0x04);//设置初始亮度
}
MAX7219.H
#ifndef __MAX7219_H__
#define __MAX7219_H__
#include "stc89c5xrc.h"
#define uchar unsigned char
#define DECODEMODE 0x09
#define INTENSITY 0x0A
#define SCANLIMIT 0x0B
#define SHUTDOWN 0x0C
#define DISPLAYTEST 0x0F
sbit LOAD=P1^1;
sbit DIN=P1^0;
sbit CLK=P1^2;
void max7219SendData(uchar address,uchar dat);
void max7219Init();
#endif // !__MAX7219_H__