当前位置: 首页 > news >正文

[笔记].使用Protues仿真Max7129

引子

在Nios II上调了好几天的I2C,PCF8563都没有被正常驱动,很是伤感。干脆先用51驱动试试。首先要解决的便是显示问题,用Max7129来驱动七段数码管。

仿真环境

硬件部分:Proteus 7.5 SP3

软件部分:Keil uVision4

Proteus仿真图

图1 Proteus仿真图

图1 Proteus仿真图

Keil工程

image5.png

图2 Keil工程

源代码

main.c

#include "max7219.h"

int main(void)
{
    Max7219_Init();  
    while(1)
    {  
        Max7219_WriteData(1, 2);
        Max7219_WriteData(2, 0);
        Max7219_WriteData(3, 4);
        Max7219_WriteData(4, 0);
        Max7219_WriteData(5, 2);
        Max7219_WriteData(6, 0);
        Max7219_WriteData(7, 4);
        Max7219_WriteData(8, 0);
    }
    return 0; 
}

max7129.h

#ifndef _MAX7219_H_
#define _MAX7219_H_

#include <reg51.h>
sbit Max7129_DIN  = P1^0;     // Serial-Data Input: rising edge
sbit Max7129_LOAD = P1^1;     // Load-Data Input: rising edge
sbit Max7129_CLK  = P1^2;     // Serial-Clock Input: maximum 10MHz

// commone part
#define HIGH    1
#define LOW     0
#define TRUE    1
#define FALSE   0
#define ZERO    0 
#define MSB     0x80
#define LSB     0x01

// max7129 part
#define DECODE_MODE     0x09    // 译码方式 
#define INTENSITY       0x0A    // 显示亮度 
#define SCAN_LIMIT      0x0B    // 扫描限制
#define SHUT_DOWN       0x0C    // 关断方式
#define DISPLAY_TEST    0x0F    // 显示测试  

//
void Max7219_WriteByte(unsigned char byte);
void Max7219_WriteData(unsigned char addr, unsigned char dat);
void Max7219_Init(void);

#endif /* _MAX7219_H_ */

max7129.c

#include "max7219.h"

/*
 * 发送一个字节的子程序:
 * 上升沿发送数据,
 * MSB first
 */
void Max7219_WriteByte(unsigned char byte)
{
	unsigned char i;
	for (i=0; i<8; i++)     
	{ 
		Max7129_CLK = LOW;
		Max7129_DIN = (bit)(byte & MSB);      
		byte <<= 1;  
		Max7129_CLK = HIGH;
	}
}

/*
 * 向寄存器中写入一个数据
 * 先写地址,后写数据
 */
void Max7219_WriteData(unsigned char addr, unsigned char dat)
{ 
	Max7129_LOAD = HIGH;	            // 使Max7129_LOAD变高,启动串行数据发送 
	Max7219_WriteByte(addr); 
	Max7219_WriteByte(dat);
	Max7129_LOAD = LOW;		            // 使Max7129_LOAD变低,锁存数据
	Max7129_LOAD = HIGH;	            // 使Max7129_LOAD变高,串行数据结束                 
}

/*
 *
 */
void Max7219_Init(void)      
{ 
	Max7219_WriteData(SHUT_DOWN, 	0x01);   // 掉电模式: 1, 正常操作; 0, 睡眠模式
	Max7219_WriteData(DISPLAY_TEST, 0x00);   // 显示测试: 0, 正常模式; 1, 测试模式
	Max7219_WriteData(DECODE_MODE, 	0xff);   // 译码模式:0, 不译码; 1, BCD译码
	Max7219_WriteData(SCAN_LIMIT, 	0x07);   // 扫描限制: 0 ~ 7
	Max7219_WriteData(INTENSITY, 	0x07);   // 显示亮度: 0 ~ F
}

原理 

表1 主要管脚说明

DIN串型数据输入。在时钟的上升沿,数据被载入内置的16位移位寄存器。
LOAD载入数据输入。在LOAD的上升沿,串型数据的后16位被锁存。
CLK串型时钟输入。最大速率10MHz。在时钟的上升沿,数据被移入内置的以为寄存器;在时钟的下降沿,数据从DOUT输出。
DOUT串型数据输出。从DIN输入的数据,于16.5个时钟周期后,在DOUT有效。该引脚用于级联7219,且从不呈现高阻抗状态。

表2 串型数据格式(16 位)

表2 串型数据格式 

表3 寄存器地址映射 

表3 寄存器地址映射

表4 掉电寄存器格式(Address (Hex) = 0xXC)

表4 掉电寄存器格式

表5 译码模式寄存器格式(Address (Hex) = 0xX9)

表5 译码模式寄存器格式

表6 Code B 字体

表6 Code B 字体

* 小数点位由 D7 = 1 设定

表7 非译码模式对应段码

表7 非译码模式对应段码

图8 亮度调整寄存器格式(Address (Hex) = 0xXA)

图8 亮度调整寄存器格式

图9 扫描闲置寄存器格式(Address (Hex) = 0xXB)

图9 扫描闲置寄存器格式

图10 显示测试寄存器格式(Address (Hex) = 0xXF)

图10 显示测试寄存器格式

参考

1. Maxim. MAX7219/MAX7221 datasheet

2. max7219数码管驱动模块

http://www.amy-studio.com/bbs/viewthread.php?tid=923

3. 共享我做的串行8位数码管控制芯片MAX7219的实例,显示0到7,附源文件!

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=656961

相关文章:

  • 做一个懂爱的聪明女人
  • 如何创建一个MVC模式的Joomla组件教程(十五) - 创建管理员界面 增加编辑功能 上...
  • 二招搞定IE快捷方式没法打开
  • StatsPack 使用初解
  • ArcGIS中对一组查询结果同时闪烁的实现
  • 鸟哥的基础学习-习题与答案
  • 我的人生谚语
  • 梅德克领导AMD成功转变,明年或将在中国市场持续发力?
  • 基于网络数据采集系统的社交媒体/网络营销
  • SQL创建用户及角色
  • Net设计模式实例之单例模式( Singleton Pattern)
  • vxvm之卷管理
  • mapextreme 2008 的helloworld (1)
  • 真的要对Sun说道别了……
  • 互联网产品一门户网站奥运频道UI分析
  • 《Java编程思想》读书笔记-对象导论
  • 2019年如何成为全栈工程师?
  • 78. Subsets
  • JavaScript-Array类型
  • js中forEach回调同异步问题
  • Laravel5.4 Queues队列学习
  • PAT A1017 优先队列
  • PHP 小技巧
  • Protobuf3语言指南
  • Redux系列x:源码分析
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue中实现单选
  • 从tcpdump抓包看TCP/IP协议
  • 翻译--Thinking in React
  • 聊聊sentinel的DegradeSlot
  • 我建了一个叫Hello World的项目
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • raise 与 raise ... from 的区别
  • 函数计算新功能-----支持C#函数
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​ArcGIS Pro 如何批量删除字段
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • (31)对象的克隆
  • (LeetCode) T14. Longest Common Prefix
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (多级缓存)多级缓存
  • (翻译)terry crowley: 写给程序员
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (五)MySQL的备份及恢复
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)用.Net的File控件上传文件的解决方案
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .Net Core和.Net Standard直观理解
  • .Net IOC框架入门之一 Unity
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @Autowired多个相同类型bean装配问题
  • @ModelAttribute使用详解
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限