89C52控制MAX7219驱动数码管,提供源码,原理图,焊接实物图等。链接见文末。
原理图
源码
max7219.h
/**********************************************************
* 文 件 名 : MAX7219.H
* 描 述 : MAX7219驱动包程序
**********************************************************/
#ifndef _MAX7219_H_
#define _MAX7219_H_
#include
#include
//管脚定义
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驱动包程序
**********************************************************/
#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
}
上一篇:用51模拟I2C从机程序
下一篇:51中断优先级及中断嵌套
推荐阅读最新更新时间:2024-03-16 16:03
设计资源 培训 开发板 精华推荐
- TI 嵌入式处理主题直播月|报名观看直播赢好礼【低功耗WiFi MCU、Sitara AM57X平台、机器学习】
- 跟上未来,走进恩智浦最新技术大讲堂
- 【免费体验】来这里提交申请,有机会获得英飞凌无人机
- 用心分享,一起成长!EEWORLD月月有奖优秀主题/回复第28期开始啦~
- 【免费申请】英飞凌PSoC 62S4 先锋套件 (CY8CKIT-062S4)
- 2021 Digikey KOL系列——亲手教你转起一台无刷电机
- 以拆会友,你拆、你评我送礼!
- 看视频答题,玩转幸运大抽奖:Littelfuse汽车电子电路保护知多少
- 了解设计完整AC-DC系统的快速低风险方法,轻松答题赢好礼
- 阅读并了解是德科技示波器、校准服务精彩专题,答题赢好礼!