📄 max7219.c
字号:
/**************************************************************************
MAX7219 8-Digit LED Display
File Name: MAX7219.c
Author: Lin Qian
Created: 2008/04/27
Modified: NO
Revision: 1.0
***************************************************************************/
#define __MAX7219
#include "INC\\main.h"
#undef __MAX7219
// MAX7219内部函数 ******************************
#if MAX7219_Internal_Func_en
//********** 内部函数声明 **********
void MAX7219_WriteOneByte(uchar ch); // 向MAX7219写入单字节
void MAX7219_WriteWord(uchar addr,uchar num); // 向MAX7219写入字(16位)
//**********************************
// 数码管解码表
uchar code DIS_TAB[]=
{// 0 1 2 3 4
0x7e, 0x30, 0x6d, 0x79, 0x33,
// 5 6 7 8 9
0x5b, 0x5f, 0x70, 0x7f, 0x7b,
// A b C d E F
0x77, 0x1f, 0x4e, 0x3d, 0x4f, 0x47,
// - . (空)
0x01, 0x80, 0x00,
};
// 向MAX7219写入单字节 ******************************
void MAX7219_WriteOneByte (uchar ch)
{
uchar i, temp;
_nop_();
for( i=0; i<8; i++)
{
temp = ch & 0x80;
ch = ch << 1;
if( temp )
{ DIN = 1;
CLK = 0;
CLK = 1;
}
else
{
DIN = 0;
CLK = 0;
CLK = 1;
}
}
}
// 向MAX7219写入字节 ******************************
void MAX7219_WriteWord (uchar addr, uchar num)
// 功能: 向MAX7219写入16位的字节(地址+数据).
// addr: 地址.
// num: 数据.
{
LOAD = 0; _nop_();
MAX7219_WriteOneByte(addr); _nop_();
MAX7219_WriteOneByte(num); _nop_();
LOAD = 1; // 锁存进相应寄存器
}
#endif
// MAX7219初始化 ******************************
#if MAX7219_Initial_en
void MAX7219_Initial (void)
{
MAX7219_WriteWord (ScanLimit, ScanDigit); // 设置扫描界限
MAX7219_WriteWord (DecodeMode, NoDecode); // 设置译码模式
MAX7219_WriteWord (Intensity, IntensityGrade); // 设置亮度
MAX7219_WriteWord (ShutDown, NormalOperation); // 设置为正常工作模式
}
#endif
// 将num发送到显示缓冲区 ******************************
#if SendDigitLED_en
void SendDigitLED (long num, uchar point)
// num: 需要显示的数值.
// point: 小数点位。设置在数码管的有效位(1~8)显示小数点。
{
uchar digit; // 位选 [注: 有效位寄存器是1~8, 0为无操作寄存器]
// bit sign=0; // 显示数的符号,默认为正(+),不显示
/*
// num正负判断
if( num < 0 )
{ sign = 1;
num = -num;
}
*/
// 将num的各位数字送到显示缓冲区
digit = NUMLED_LENGTH;
do
{
if( digit == point ) // 判断该输出位是否带小数点
MAX7219_WriteWord (digit, DIS_TAB[num%10]|DIS_TAB[17]);
else
MAX7219_WriteWord (digit, DIS_TAB[num%10]);
num /= 10;
digit--;
}
while( digit >= 1 && num != 0 );
/*
// 若num为负数,则输出负号
if( sign == 1 && digit >= 1 )
{
MAX7219_WriteWord (digit, DIS_TAB[16]);
digit--;
}
*/
// 多余的位显示为空
for (; digit>=1; digit--)
MAX7219_WriteWord (digit, DIS_TAB[18]);
}
#endif
//************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -