[笔记].使用Protues仿真Max7129
引子
在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相关推荐
- 使用Protues仿真Max7129
引子 在Nios II上调了好几天的I2C,PCF8563都没有被正常驱动,很是伤感.干脆先用51驱动试试.首先要解决的便是显示问题,用Max7129来驱动七段数码管. 仿真环境 硬件部分:Prote ...
- protues仿真51单片机教程
protues是一款常用的单片机仿真软件,在很多情况下,我们做一些简单的项目,手边没有单片机或者不想麻烦的情况下,可以借助protues来仿真测试程序,protues内集成了几款常用的51内核的单片机 ...
- 基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)
本学期单片机课程要求做课程设计,我选取的课题如下: 基于单片机的电子时钟设计,要求: (1)实时显示当前时间: (2)能够对时间进行设置: (3)包括年月日,小时,分钟,秒. (4)整点提醒功能. 经 ...
- 浮沙筑塔——protues仿真C51程序之LED灯闪烁
零.闲话三两 不得不惊叹于计算机功能的强大且全面,分明与51单片机是不同宗不同源的两样机种,其效用却能在计算机上完美复现.在21世纪的新世代人类眼里,"电脑"或许只是"网 ...
- 基于51单片机PT100热电偶AD转换protues仿真设计
基于51单片机PT100热电偶AD转换protues仿真设计 (源码+仿真) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0023 这里写 ...
- 51单片机控制步进电机Protues仿真设计
一.概述 1.1步进电机简介 步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机.一般步进电机运行稳定,并且精度较高,因此常用于精密仪器.自动化设备 ...
- STM32f103+protues仿真(一) 点亮led
STM32f103+protues仿真(一) 点亮led 文章目录 STM32f103+protues仿真(一) 点亮led 前言 一.程序编写 1.led.c 2.led.h 3.main.c 4. ...
- STM32f103+protues仿真(二) OLED显示
STM32f103+protues仿真(二) OLED显示 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 STM32f103+protues仿真(二) OLED显示 前言 ...
- protues仿真扩展51单片机片外RAM的方法
protues仿真扩展51单片机片外RAM的方法 由于protues仿真stc89c52的单片机时,是使用相近的at89c52.而AT89C52只有256B的RAM,并不能储存巨大的变量.所以,需要更 ...
最新文章
- 数据结构[单链表]操作大全(初始化,创建,插入,查询,删除,长度,输出)c++代码实现
- 数据库面试题【十四、主键使用自增ID还是UUID】
- E - Ignatius and the Princess IV
- JS的Touch事件们
- dephi(pascal)中修改Label字体的样式(加粗,斜体,下划线)
- Cisco正式停止MARS产品的销售
- 机器学习项目实战----信用卡欺诈检测(一)
- php监控nginx,zabbix php nginx 监控搭建
- android webview 字体被放大,Android WebView文字大小调整及页面缩放调整
- 爬虫提交form表单中含有(unable to decode value)解决方法
- html svg矩形添加文字,SVG 矩形
- php解析失败,php – 解析错误:语法错误,意外(T_VARIABLE)
- 《算法零基础100讲》(第20讲) 进制转换(二) - 进阶[C语言题解]
- EWM-Background and History
- Java 8: 元空间(Metaspace)
- 数模每日小练习——数据处理——插值
- 传感器集成温度传感器(DS1820)温度特性实验
- 程序员如何修炼成系统分析员
- Python多线程爬虫实例
- 流数据分析技术笔记1 流数据简介