引子

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

仿真环境

硬件部分:Proteus 7.5 SP3

软件部分:Keil uVision4

Proteus仿真图

图1 Proteus仿真图

Keil工程

图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 ~ 7Max7219_WriteData(INTENSITY,     0x07);   // 显示亮度: 0 ~ F
}

原理

表1 主要管脚说明

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

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

表3 寄存器地址映射

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

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

表6 Code B 字体

* 小数点位由 D7 = 1 设定

表7 非译码模式对应段码

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

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

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

参考

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

转载于:https://www.cnblogs.com/yuphone/archive/2009/12/11/1621712.html

[笔记].使用Protues仿真Max7129相关推荐

  1. 使用Protues仿真Max7129

    引子 在Nios II上调了好几天的I2C,PCF8563都没有被正常驱动,很是伤感.干脆先用51驱动试试.首先要解决的便是显示问题,用Max7129来驱动七段数码管. 仿真环境 硬件部分:Prote ...

  2. protues仿真51单片机教程

    protues是一款常用的单片机仿真软件,在很多情况下,我们做一些简单的项目,手边没有单片机或者不想麻烦的情况下,可以借助protues来仿真测试程序,protues内集成了几款常用的51内核的单片机 ...

  3. 基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)

    本学期单片机课程要求做课程设计,我选取的课题如下: 基于单片机的电子时钟设计,要求: (1)实时显示当前时间: (2)能够对时间进行设置: (3)包括年月日,小时,分钟,秒. (4)整点提醒功能. 经 ...

  4. 浮沙筑塔——protues仿真C51程序之LED灯闪烁

    零.闲话三两 不得不惊叹于计算机功能的强大且全面,分明与51单片机是不同宗不同源的两样机种,其效用却能在计算机上完美复现.在21世纪的新世代人类眼里,"电脑"或许只是"网 ...

  5. 基于51单片机PT100热电偶AD转换protues仿真设计

    基于51单片机PT100热电偶AD转换protues仿真设计 (源码+仿真) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0023 这里写 ...

  6. 51单片机控制步进电机Protues仿真设计

    一.概述 1.1步进电机简介 步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机.一般步进电机运行稳定,并且精度较高,因此常用于精密仪器.自动化设备 ...

  7. STM32f103+protues仿真(一) 点亮led

    STM32f103+protues仿真(一) 点亮led 文章目录 STM32f103+protues仿真(一) 点亮led 前言 一.程序编写 1.led.c 2.led.h 3.main.c 4. ...

  8. STM32f103+protues仿真(二) OLED显示

    STM32f103+protues仿真(二) OLED显示 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 STM32f103+protues仿真(二) OLED显示 前言 ...

  9. protues仿真扩展51单片机片外RAM的方法

    protues仿真扩展51单片机片外RAM的方法 由于protues仿真stc89c52的单片机时,是使用相近的at89c52.而AT89C52只有256B的RAM,并不能储存巨大的变量.所以,需要更 ...

最新文章

  1. 数据结构[单链表]操作大全(初始化,创建,插入,查询,删除,长度,输出)c++代码实现
  2. 数据库面试题【十四、主键使用自增ID还是UUID】
  3. E - Ignatius and the Princess IV
  4. JS的Touch事件们
  5. dephi(pascal)中修改Label字体的样式(加粗,斜体,下划线)
  6. Cisco正式停止MARS产品的销售
  7. 机器学习项目实战----信用卡欺诈检测(一)
  8. php监控nginx,zabbix php nginx 监控搭建
  9. android webview 字体被放大,Android WebView文字大小调整及页面缩放调整
  10. 爬虫提交form表单中含有(unable to decode value)解决方法
  11. html svg矩形添加文字,SVG 矩形
  12. php解析失败,php – 解析错误:语法错误,意外(T_VARIABLE)
  13. 《算法零基础100讲》(第20讲) 进制转换(二) - 进阶[C语言题解]
  14. EWM-Background and History
  15. Java 8: 元空间(Metaspace)
  16. 数模每日小练习——数据处理——插值
  17. 传感器集成温度传感器(DS1820)温度特性实验
  18. 程序员如何修炼成系统分析员
  19. Python多线程爬虫实例
  20. 流数据分析技术笔记1 流数据简介

热门文章

  1. python 分类算法_python机器学习之KNN分类算法
  2. android关闭蓝牙连接手机号码,Android BLE蓝牙连接要注意的问题
  3. 灵遁者:从引力常数来谈谈广义相对论
  4. Android make脚本简记
  5. 在openEuler底层系统下解压安装mongodb以及搭建单机
  6. Android | 教你如何开发一个证件照DIY小程序
  7. 麦克风阵列语音增强算法——固定波束形成算法
  8. verilog数字电路实验 交通灯
  9. 如果要快速的读写表格,Pandas 并不是最好的选择
  10. js方式调用php_js如何调用php方法参数