89C52控制MAX7219驱动数码管

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiayufeng520/article/details/78924589

89C52控制MAX7219驱动数码管,提供源码,原理图,焊接实物图等。链接见文末。

驱动效果展示
这里写图片描述

原理图

这里写图片描述

源码

max7219.h

/**********************************************************
* 文  件  名 : MAX7219.H 
* 描      述 : MAX7219驱动包程序 
* 创  建  人 : 夏玉峰  
* 单      位 : 佳木斯大学 信息电子技术学院 电子协会 
* 日      期 : 2012.9.29
* 开 发 环 境: Keil 4
* 邮      箱 : xiayufeng90520@163.com
* 版  本  号 : 1.00
**********************************************************/
#ifndef _MAX7219_H_
#define _MAX7219_H_

#include <reg52.h>
#include <intrins.h>

//管脚定义
sbit MAX7219_CS   = P2^6;
sbit MAX7219_MOSI = P2^5;
sbit MAX7219_CLK  = P2^7;

//功能寄存器宏定义
#define DECODEMODE   0X09     //译码控制寄存器地址
#define INTENSITY    0X0A     //亮度控制寄存器地址
#define SCANLIMIT    0X0B     //扫描界限寄存器地址
#define SHUTDOWN     0X0C     //关断模式寄存器地址
#define DISPTEST     0X0F     //测试控制寄存器地址
//函数定义
void MAX7219_WriteByte(unsigned char temp);
void MAX7219_Write(unsigned char addr, unsigned char dat);
void MAX719_Init(void);

#endif

MAX7219.c

/**********************************************************
* 文  件  名 : MAX7219.c 
* 描      述 : MAX7219驱动包程序 
* 创  建  人 : 夏玉峰  
* 单      位 : 佳木斯大学 信息电子技术学院 电子协会 
* 日      期 : 2012.9.29
* 开 发 环 境: Keil 4
* 邮      箱 : xiayufeng90520@163.com
* 版  本  号 : 1.00
**********************************************************/

#include "max7219.h"

/**************************************************************
** 函数名称: void MAX7219_WriteByte(unsigned char date)
** 功能描述: 向MAX7219写一个字节
** 输   入: unsigned char date 字节内容
** 全局变量: 无
** 调用模块: 无
** 说    明:
** 注    意:
**************************************************************/
void MAX7219_WriteByte(unsigned char date)
{
    unsigned char i,temp;
    for(i = 0; i < 8; i++)
    {   
        MAX7219_CLK = 0;
        temp = date & 0X80;
        date = date<<1;
        if(temp == 0X80)
            MAX7219_MOSI = 1;
        else
            MAX7219_MOSI = 0;
        MAX7219_CLK = 1;    //时钟上升沿把数据送入寄存器锁定   
    }
}
/**************************************************************
** 函数名称: void MAX7219_Write(unsigned char addr, unsigned char dat)
** 功能描述: 向MAX7219写指令
** 输   入: unsigned char addr  地址 
             unsigned char dat   数据
** 全局变量: 无
** 调用模块: 无
** 说    明:
** 注    意:
**************************************************************/
void MAX7219_Write(unsigned char addr, unsigned char dat)
{
     MAX7219_CS = 0;   //寄存器打开,等待数据的送入
     _nop_();
     MAX7219_WriteByte(addr);  //选择寄存器地址
     _nop_();
     MAX7219_WriteByte(dat);   //选择让芯片执行什么命令
     _nop_();
     MAX7219_CS = 1;  //第16个上升沿之后,第17个上升沿之前必须把CLK拉高,否则数据丢失
}

/**************************************************************
** 函数名称: void MAX7219_Init(void)  
** 功能描述: MAX7219初始化
** 输   入: 无
** 全局变量: 无
** 调用模块: 无
** 说    明:
** 注    意:
**************************************************************/
void MAX7219_Init(void)      
{ 
    MAX7219_Write(SHUTDOWN, 0x01);   //关断模式寄存器;关断状态,最低位D0=0;正常状态,最低位D0=1
    MAX7219_Write(DISPTEST, 0x00);   //显示测试寄存器;测试状态,最低位D0=1,各位显示全亮;正常工作状态,最低位D0=1
    MAX7219_Write(DECODEMODE, 0xff); //译码控制寄存器;0XFF,全译码
    MAX7219_Write(SCANLIMIT, 0x07);  //扫描界限寄存器;设置显示的LED的个数(1~8),如设置为0xX4时,LED 0~5显示
    MAX7219_Write(INTENSITY, 0x08);  //亮度控制寄存器;共有16级可选择,用于设置LED的显示亮度,0X00-0X0F
}

下载链接

展开阅读全文

没有更多推荐了,返回首页