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

📄 max7219.h

📁 温度测量显示程序
💻 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 + -