📄 max7219.h
字号:
/**************************************************************************
THE REAL TIMER max7219 DRIVER LIB
COPYRIGHT (c) 2006 BY zlj.
-- ALL RIGHTS RESERVED --
File Name: max7219.h
Author: ZHU Lingjian
Created: 2006/5/21
Modified: NO
Revision: 1.0
***************************************************************************/
#ifndef _max7219_2006_5_21_
#define _max7219_2006_5_21_
/*********************** 定义MAX7219 内部寄存器 **********************/
#define REG_DECODE 0x09 // 译码方式寄存器
#define REG_INTENSITY 0x0a // 亮度寄存器
#define REG_SCAN_LIMIT 0x0b // 扫描界限寄存器
#define REG_SHUTDOWN 0x0c // 停机寄存器
#define REG_DISPLAY_TEST 0x0f // 显示测试寄存器
#define INTENSITY_MIN 0x00 // 最小显示亮度
#define INTENSITY_MAX 0x0f // 最大显示亮度
/*********************** 定义MAX7219 端口信号 ************************/
sbit DATA=P3^2; // Din
sbit LOAD=P3^1; //Cs
sbit CLK =P3^0;
sbit P3_4=P3^4;
/************************** 定义显示常数表格 *************************/
/************************** 函数原型说明 *****************************/
static void Max7219Write (unsigned char reg_number, unsigned char dataout);
static void Max7219SendByte (unsigned char dataout);
//static unsigned char Max7219LookupCode (char character);
unsigned char GetDigitValue(unsigned char Value);
void Max7219Init (void);
void Max7219ShutdownStart (void);
void Max7219ShutdownStop (void);
void Max7219DisplayTestStart (void);
void Max7219DisplayTestStop (void);
void Max7219SetBrightness (char brightness);
void Max7219Clear (char digit) ;
void Max7219DisplayChar (char digit, char character);
/************************************************************************
* 函数原型:void Init()
* 功 能: 对MAX7219进行初始化,调用任何其他函数之前必需先调用此函数
*************************************************************************/
void Max7219Init (void)
{
char i;
DATA=1;LOAD=1;CLK=1;
Max7219Write(REG_SCAN_LIMIT, 7); // 扫描8位数字
Max7219Write(REG_DECODE, 0x00); // 设置不译码方式
Max7219ShutdownStop(); // 结束停机方式,正常工作
Max7219DisplayTestStop(); // 结束显示测试,正常工作
for(i=0;i<=8;i++)
Max7219Clear(i); // 清零全部显示器
Max7219SetBrightness(INTENSITY_MAX); // 设置最大亮度
Max7219ShutdownStart (); // 停机
Max7219ShutdownStop (); // 结束停机
Max7219DisplayTestStart (); // 显示测试
Max7219DisplayTestStop (); // 结束显示测试
}
/*************************************************************************
* 函数原型:void ShutdownStart()
* 功 能: 进入停机方式
**************************************************************************/
void Max7219ShutdownStart (void)
{
Max7219Write(REG_SHUTDOWN, 0);
}
/*************************************************************************
* 函数原型:void ShutdownStop()
* 功 能:结束停机方式
**************************************************************************/
void Max7219ShutdownStop (void)
{
Max7219Write(REG_SHUTDOWN, 1);
}
/*************************************************************************
* 函数原型:void DisplayTestStart()
* 功 能:启动显示测试
**************************************************************************/
void Max7219DisplayTestStart (void)
{
Max7219Write(REG_DISPLAY_TEST, 1);
}
/*************************************************************************
* 函数原型:void DisplayTestStop()
* 功 能:结束显示测试
**************************************************************************/
void Max7219DisplayTestStop (void)
{
Max7219Write(REG_DISPLAY_TEST, 0);
}
/*************************************************************************
* 函数原型:void SetBrightness(char brightness)
* 功 能:设置LED显示亮度
* 参 数:亮度值(brightness = 0-15)
*************************************************************************/
void Max7219SetBrightness (char brightness)
{
brightness &= 0x0f; // 屏蔽参数中的多余位
Max7219Write(REG_INTENSITY, brightness); // 设置亮度
}
/*************************************************************************
* 函数原型:void Clear()
* 功 能:关闭全部显示器
**************************************************************************/
void Max7219Clear (char digit)
{
Max7219Write(digit, 0x00); // 关闭全部显示器
}
/*************************************************************************
* 函数原型:void DisplayChar(char digit, char character)
* 功 能:在指定数位上显示字符
* 参 数:digit = 数位(0-7)
character = 显示字符(0-9, A-Z)
*************************************************************************/
void Max7219DisplayChar (char digit, char character)
{
Max7219Write(digit, GetDigitValue(character));
}
/*************************************************************************
* 函数原型:static void Write (unsigned char reg_number, unsigned char dataout)
* 功 能:向指定的MAX7219内部寄存器写入数据
* 参 数: reg_number = MAX7219内部寄存器地址
dataout = 待写入的数据
**************************************************************************/
static void Max7219Write (unsigned char reg_number, unsigned char dataout)
{
LOAD=1; // 使LOAD变高,启动串行数据发送
Max7219SendByte(reg_number); // 发送MAX7219内部寄存器地址
Max7219SendByte(dataout); // 发送待写入的数据
LOAD=0; // 使LOAD变低,锁存数据
LOAD=1; // 使LOAD变高,串行数据结束
}
/*************************************************************************
* 函数原型:static void SendByte (unsigned char dataout)
* 功 能:向MAX7219发送一个字节串行数据
* 参 数:dataout = 待发送的数据
**************************************************************************/
static void Max7219SendByte (unsigned char dataout)
{
char i;
for (i=8; i>0; i--)
{
unsigned char mask = 1 << (i - 1);
CLK=0; // 使CLK变低
if (dataout & mask) // 发送一位数据"1"或"0"
DATA=1;
else
DATA=0;
CLK=1; // 使CLK变高
}
}
/**************************************************************************
* 函数原型:unsigned char GetDigitValue(unsigned char Value)
* 功 能:得到数字的显示值
**************************************************************************/
unsigned char GetDigitValue(unsigned char Value)
{
if ((Value>=0)&&(Value<=20))
{
switch(Value)
{
case 0: Value=0x7e;break; // 字符0
case 1: Value=0x30;break; // 字符1
case 2: Value=0x6d;break; // 字符2
case 3: Value=0x79;break; // 字符3
case 4: Value=0x33;break; // 字符4
case 5: Value=0x5b;break; // 字符5
case 6: Value=0x5f;break; // 字符6
case 7: Value=0x70;break; // 字符7
case 8: Value=0x7f;break; // 字符8
case 9: Value=0x7b;break; // 字符9
case 10: Value=0xfe;break; // 字符0.
case 11: Value=0xb0;break; // 字符1.
case 12: Value=0xed;break; // 字符2.
case 13: Value=0xf9;break; // 字符3.
case 14: Value=0xb3;break; // 字符4.
case 15: Value=0xdb;break; // 字符5.
case 16: Value=0xdf;break; // 字符6.
case 17: Value=0xf0;break; // 字符7.
case 18: Value=0xff;break; // 字符8.
case 19: Value=0xfb;break; // 字符9.
case 20: Value=0x01;break; // 字符-
default: Value=0x00;break; // 显示黑
}
}
else Value=0x00;
return(Value);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -