⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 max7219.c

📁 用KEIL开发的出租车计费系统
💻 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 + -