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

📄 7219.h

📁 自制实验DS18b20.rar实现温度精确显示
💻 H
字号:
#include  <reg51.h>           
/*********************** 定义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=P1^0;
sbit LOAD=P1^1;
sbit CLK=P1^2;



/************************** 函数原型说明 *****************************/
static void Write (unsigned char reg_number, unsigned char dataout);
static void SendByte (unsigned char dataout);
void Init (void);
void ShutdownStart (void);
void ShutdownStop (void);
void DisplayTestStart (void);
void DisplayTestStop (void);
void SetBrightness (char brightness);
void Clear (void);


/************************************************************************
*  函数原型:void Init()
*  功    能: 对MAX7219进行初始化,调用任何其他函数之前必需先调用此函数
*************************************************************************/
void Init (void) {
  DATA=1;LOAD=1;CLK=1;
  Write(REG_SCAN_LIMIT, 7);          // 扫描8位数字
  Write(REG_DECODE, 0x00);           // 设置不译码方式
  ShutdownStop();                    // 结束停机方式,正常工作
  DisplayTestStop();                 // 结束显示测试,正常工作
  Clear();                           // 清零全部显示器
  SetBrightness(INTENSITY_MAX);      // 设置最大亮度
}

/*************************************************************************
*  函数原型:void ShutdownStart()
*  功    能: 进入停机方式
**************************************************************************/
void ShutdownStart (void) {
  Write(REG_SHUTDOWN, 0); 
}

/*************************************************************************
*  函数原型:void ShutdownStop()
*  功    能:结束停机方式
**************************************************************************/
void ShutdownStop (void) {
  Write(REG_SHUTDOWN, 1);               
}

/*************************************************************************
*  函数原型:void DisplayTestStart()
*  功    能:启动显示测试
**************************************************************************/
void DisplayTestStart (void) {
  Write(REG_DISPLAY_TEST, 1);
}

/*************************************************************************
*  函数原型:void DisplayTestStop()
*  功    能:结束显示测试
**************************************************************************/
void DisplayTestStop (void) {
  Write(REG_DISPLAY_TEST, 0);
}

/*************************************************************************
*  函数原型:void SetBrightness(char brightness)
*  功    能:设置LED显示亮度
*  参    数:亮度值(brightness = 0-15)
*************************************************************************/
void SetBrightness (char brightness) {
  brightness &= 0x0f;                         // 屏蔽参数中的多余位
  Write(REG_INTENSITY, brightness);           // 设置亮度
}

/*************************************************************************
*  函数原型:void Clear()
*  功    能:关闭全部显示器
**************************************************************************/
void Clear (void) {
  char i;
  for (i=1; i <= 8; i++)
    Write(i, 0x00);                          // 关闭全部显示器
}

/*************************************************************************
*  函数原型:static void Write (unsigned char reg_number, unsigned char dataout)
*  功    能:向指定的MAX7219内部寄存器写入数据
*  参    数: reg_number = MAX7219内部寄存器地址
           dataout = 待写入的数据
**************************************************************************/
static void Write (unsigned char reg_number, unsigned char dataout) {
  LOAD=1;                               // 使LOAD变高,启动串行数据发送
  SendByte(reg_number);                 // 发送MAX7219内部寄存器地址
  SendByte(dataout);                    // 发送待写入的数据
  LOAD=0;                               // 使LOAD变低,锁存数据
  LOAD=1;                               // 使LOAD变高,串行数据结束
}

/*************************************************************************
*  函数原型:static void SendByte (unsigned char dataout)
*  功    能:向MAX7219发送一个字节串行数据
*  参    数:dataout = 待发送的数据
**************************************************************************/
static void SendByte (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变高
	  }
}

void init7219()
{
    Init ();                            // 初始化MAX7219
	ShutdownStart ();                   // 停机 
	ShutdownStop ();                    // 结束停机
	DisplayTestStart ();                // 显示测试
	DisplayTestStop ();                 // 结束显示测试
	SetBrightness (0x06);               // 设置显示亮度
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -