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

📄 max7219驱动.c.bak

📁 这是一个单片机上控制MAX7219的驱动子程序
💻 BAK
字号:
/*****************************************************************
*       常用符号定义
******************************************************************/
#define uchar unsigned char

/******************************************************************
*    定义MAX7219寄存器
*******************************************************************/
#define REG_NO_OP 0x00        // 定义空操作 register
#define DIG_1 0x01            // 定义数码管1 register
#define DIG_2 0x02            // 定义数码管2 register
#define DIG_3 0x03            // 定义数码管3 register
#define DIG_4 0x04            // 定义数码管4 register
#define DIG_5 0x05            // 定义数码管5 register
#define DIG_6 0x06            // 定义数码管6 register
#define DIG_7 0x07            // 定义数码管7 register
#define DIG_8 0x08            // 定义数码管8 register
#define REG_DECODE 0x09       // 定义解码控制 register
#define REG_INTENSITY 0x0a    // 定义显示亮度 register
#define REG_SCAN_LIMIT 0x0b   // 定义扫描限制 register
#define REG_SHUTDOWN 0x0c     // 定义"shutdown"模式 register
#define REG_DISPLAY_TEST 0x0f // 定义"display test"模式 register
#define INTENSITY_MIN 0x00    // 定义最低显示亮度
#define INTENSITY_MAX 0x0f    // 定义最高显示亮度

/*********************************************************************
*    定义硬件引脚连接
**********************************************************************/
#define DATA P3_5             //定义P3_5连接MAX7219 DATA引脚
#define CLK  P3_4             //定义P3_4连接MAX7219 CLK 引脚
#define CS   P3_3             //定义P3_3连接MAX7219 CS  引脚(实际按7221设)

/***********************************************************************
*   共阴极七段数码管显示对应段查询表(数字0-9分别对应code_table[0]-[9])
***********************************************************************/
uchar code code_table[10]=
{0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};

/***********************************************************************
* MAX7219_SendByte()
*
* 描述: 向MAX7219传送一字节数据
* Arguments : dataout = data to send
* Returns : none
*************************************************************************/
void MAX7219_SendByte (uchar dataout)
  {
     char i;
     for (i=8; i>0; i--)
        {
             uchar mask = 1 << (i - 1);    // 设置掩码
             CLK=0;                //  CLK 置低
             if (dataout & mask)        // 判断并输出一位
                DATA=1;                    // 输出"1"
             else                          // 或
                DATA=0;                    // "0"
             CLK=1;                        // CLK 置高
         }
  }

/***********************************************************************
* MAX7219_Write()
*
* 描述: 向 MAX7219 写命令
* Arguments : reg_number = register to write to
* dataout = data to write to MAX7219
* Returns : none
***************************************************************************
*/
void MAX7219_Write (uchar reg_number, uchar dataout)
  {
    CS=0;                           // CS置低选通 MAX7219
    MAX7219_SendByte(reg_number);   // 写 register number 到 MAX7219
    MAX7219_SendByte(dataout);      // 写 data 到 MAX7219
    CS=1;                 // 利用CS上升沿锁存以上移位进输入的16位数据
   }

/**************************************************************************
* MAX7219_DisplayChar()
*
* 描述: 使某一位显示一个数字
* Arguments : digit = digit number (0-7)
* character = character to display (0-9, A-Z)
* Returns : none
**************************************************************************/
void MAX7219_DisplayChar (char digit, char character)
  {
     MAX7219_Write(digit, character);
  }

/**************************************************************************
* MAX7219_Clear()
*
* 描述: 清除所有位的显示
* Arguments : none
* Returns : none
***************************************************************************/
void MAX7219_Clear (void)
   {
     uchar i;
     for (i=0; i < 8; i++)
     MAX7219_Write(i, 0x00); // 清除所有位的显示
   }

/**************************************************************************
* MAX7219_SetBrightness()
*
* 描述: 设置数码管显示亮度
* Arguments : brightness (0-15)
* Returns : none
***************************************************************************/
void MAX7219_SetBrightness (char brightness)
  {
     brightness &= 0x0f;           // 屏蔽高位字节
     MAX7219_Write(REG_INTENSITY, brightness); // 设置数码管显示亮度
  }

/**************************************************************************
* MAX7219_DisplayTestStart()
*
* 描述: 进入 test 模式
* Arguments : none
* Returns : none
***************************************************************************/
void MAX7219_DisplayTestStart (void)
   {
    MAX7219_Write(REG_DISPLAY_TEST, 1); // 置 MAX7219 为 test 模式
   }

/**************************************************************************
* MAX7219_DisplayTestStop()
*
* 描述: 退出 test 模式
* Arguments : none
* Returns : none
***************************************************************************/
void MAX7219_DisplayTestStop (void)
   {
     MAX7219_Write(REG_DISPLAY_TEST, 0); // 置 MAX7219 为正常显示模式
   }

/**************************************************************************
* MAX7219_ShutdownStart()
*
* 描述: 进入 shutdown 模式
* Arguments : none
* Returns : none
***************************************************************************/
void MAX7219_ShutdownStart (void)
  {
    MAX7219_Write(REG_SHUTDOWN, 0); // 置 MAX7219 为 shutdown 模式
   }

/**************************************************************************
* MAX7219_ShutdownStop()
*
* 描述: 退出 shutdown 模式
* Arguments : none
* Returns : none
***************************************************************************/
void MAX7219_ShutdownStop (void)
   {
    MAX7219_Write(REG_SHUTDOWN, 1); // 置 MAX7219 为正常显示模式
   }

/**************************************************************************
* MAX7219_Init()
*
* Des cription: MAX7219初始化模块; 应该先于其他MAX7219函数而被调用
* Arguments : none
* Returns : none
***************************************************************************/
void MAX7219_Init (void)
  {
    DATA=1;             // 置DATA为1
    CLK=1;              // 置CLK 为1
    CS=1;               // 置CS  为1
    MAX7219_Write(REG_SCAN_LIMIT, 7);     // 设置为全显示
    MAX7219_Write(REG_DECODE, 0x00);      // 所有位设置为非解码方式
    MAX7219_ShutdownStop();               // 置 MAX7219 为正常显示模式 (非
shutdown模式)
    MAX7219_DisplayTestStop();            // 置 MAX7219 为正常显示模式 (非test
模式)
    MAX7219_Clear();                      // 清除所有位的显示
    MAX7219_SetBrightness(INTENSITY_MAX); // 置最大亮度
  }

⌨️ 快捷键说明

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