ATmega16控制MAX7219驱动数码管,提供源码,原理图,焊接实物图等。链接见文末。
原理图
源码
MAX7219.H
/**********************************************************
* 文 件 名 : MAX7219.H
* 描 述 : MAX7219驱动包程序
* 创 建 人 : 夏玉峰
* 单 位 : 佳木斯大学 信息电子技术学院 电子协会
* 日 期 : 2012.9.30
* 开 发 环 境: ICCAVR 7.22 ATmega16
* 邮 箱 : xiayufeng90520@163.com
* 版 本 号 : 1.00
**********************************************************/
#ifndef _MAX7219_H_
#define _MAX7219_H_
#include <iom16v.h>
#include <macros.h>
//功能寄存器宏定义
#define DECODEMODE 0X09 //译码控制寄存器地址
#define INTENSITY 0X0A //亮度控制寄存器地址
#define SCANLIMIT 0X0B //扫描界限寄存器地址
#define SHUTDOWN 0X0C //关断模式寄存器地址
#define DISPTEST 0X0F //测试控制寄存器地址
//外部可调用函数定义
void MAX7219_Write(unsigned char addr, unsigned char dat);
void MAX719_Init(void);
#endif
MAX7219.C
/**********************************************************
* 文 件 名 : MAX7219.c
* 描 述 : MAX7219驱动包程序
* 创 建 人 : 夏玉峰
* 单 位 : 佳木斯大学 信息电子技术学院 电子协会
* 日 期 : 2012.9.30
* 开 发 环 境: ICCAVR 7.22 ATmega16
* 邮 箱 : xiayufeng90520@163.com
* 版 本 号 : 1.00
**********************************************************/
#include "max7219.h"
/**************************************************************
** 函数名称: void SPI_Init(void)
** 功能描述: SPI初始化
** 输 入: 无
** 全局变量: 无
** 调用模块: 无
** 说 明:
** 注 意:
**************************************************************/
void SPI_Init(void)
{
DDRB=0xB0; //选通7219
SPCR=0x51; //spi设置
}
/**************************************************************
** 函数名称: void MAX7219_WriteByte(unsigned char date)
** 功能描述: 向MAX7219写一个字节
** 输 入: unsigned char date 字节内容
** 全局变量: 无
** 调用模块: 无
** 说 明:
** 注 意:
**************************************************************/
void MAX7219_WriteByte(unsigned char date)
{
SPDR = date; /* 启动数据传输 */
while (!(SPSR & (1<<SPIF)));/* 等待传输结束 */
}
/**************************************************************
** 函数名称: 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)
{
PORTB = 0X00;
MAX7219_WriteByte(addr); //选择寄存器地址
MAX7219_WriteByte(dat); //选择让芯片执行命令
PORTB = 0X10;
}
/**************************************************************
** 函数名称: void MAX7219_Init(void)
** 功能描述: MAX7219初始化
** 输 入: 无
** 全局变量: 无
** 调用模块: 无
** 说 明:
** 注 意:
**************************************************************/
void MAX7219_Init(void)
{
SPI_Init(); //SPI功能初始化
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
}