ATmega16控制MAX7219驱动数码管,提供源码,原理图,焊接实物图等。链接见文末。
原理图
源码
MAX7219.H
/**********************************************************
* 文 件 名 : MAX7219.H
* 描 述 : MAX7219驱动包程序
**********************************************************/
#ifndef _MAX7219_H_
#define _MAX7219_H_
#include
#include
//功能寄存器宏定义
#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驱动包程序
**********************************************************/
#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< } /************************************************************** ** 函数名称: 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 }
上一篇: ICCAVR编译报错 !E
下一篇:AVR单片机(ATMEGA16)DA0832芯片D/A转换
推荐阅读最新更新时间:2024-03-16 16:03