历史上的今天
今天是:2025年05月29日(星期四)
2018年05月29日 | 89C52控制MAX7219驱动数码管
2018-05-29 来源:eefocus
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中断优先级及中断嵌套
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 03:30 编辑 大家知道,在逆变桥路中需要给每个半桥中的两个MOS管的G极加上同频反相的两个spwm波,但实际上需要加上一定量的死区,即防止其同时翻转,而是预留一段同时关断的时间,这样有效防止了竞争冒险的状态 ...… 查看全部问答> |
|
TMS320C2000系列是美国TI公司推出的最佳测控应用的定点DSP芯片,其主流产品分为四个系列:C20x、C24x、C27x和C28x。C20x可用于通信设备、数字相机、嵌入式家电设备等;C24x主要用于数字马达控制、电机控制、工业自动化、电力转换系统等。近年来,TI ...… 查看全部问答> |
|
arm手册中只有一句汇编MRC p15,0,Rd,c7,c7,0 我的程序是用C++写的,我用了_asm{MRC p15,0,Rd,c7,c7,0}后 便宜提示p15没定义,我想在我的应用程序里清空cache,具体怎么做啊… 查看全部问答> |
|
最近在官方网站(http://www.hpcfactor.com/downloads/tcpmp/)下了个0.72版本的Tcpmp源码,吓了一大跳,好庞大的工程,我的开发板是arm的,WinCE5.0平台,公司灌的是5.0的SDK,CPU只支持armv4i,怎么编译都通过不了,阅遍国内外所有的相关的论坛,都 ...… 查看全部问答> |
|
现在MSP430F149开发板一套,利尔达USB仿真器一套,现在完成boss要求啊! 要求如下:完成AD转换部分,用msp430f149,进行调制,再用msp430f1611进行解调,如果输入正弦波,那就输出就是正弦波,输入是方波,那就输出也是方波。用iar开发软件, 求解 ...… 查看全部问答> |
|
EEWORLD大学堂上线了两门新的DSP课程:《多核DSP软件开发套件》、《多核DSP设计》 为了加速客户对Keystone DSP的开发使用,TI提供了相关的软件集成开发环境CCS,及硬件评估板EVM;并免费提供一套综合的多核软件开发包 ...… 查看全部问答> |
|
刚刚接触TMS570ls20216,拿到TMDX570LS20SMDK,看的一头雾水啊,感觉完全找不到入门的路啊,有哪位大神可怜可怜,指点一下入门捷径啊。。。。 PS:我有师哥说,让先用Halcogen生成代码,在一点点分析,问题是连软件我都有点搞不动!!… 查看全部问答> |




