13393|12

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

用C51编写的MAX7219的问题 [复制链接]

我用MAX7219 驱动LED 显示时间倒计时  用8051
可驱动不能用  
看看这段程序有问题没有void max7219_reset(void)                //初始化MAX7219
{
   write_reg(DIS_TEST,0x0);             //正常操作,不进行显示测试
   write_reg(SHUTDOWN,0x01);            //正常显示
   write_reg(DECODE_MODE,0x0);          // 不用自动编码
   write_reg(SCAN_LIMIT,0x02);          //
   write_reg(INTENSITY,0x08);           //亮度为17/32



这个初始化不太明白!????
时不是有高手指导一下














}
void write_reg(uchar reg,uchar sdata)   //写入命令
{
   LD=0;                                //拉低LOAD
   byte=reg;                            //将寄存器地址串行送入
   send_data(byte);
   byte=sdata;                          //将控制字节串行送入
   send_data(byte);
   LD=1;                                 //置高LOAD,输入的数据生效
}
void write_digit(uchar digit,uchar number)  //显示数字
{
   LD=0;                                 //拉低LOAD
   byte=digit;                           //将寄存器地址串行送入
   send_data(byte);
   byte=LED_code[number];                //查表,取出对应的字型编码
   send_data(byte);                      //将字型编码送入MAX7219
   LD=1;                                 //置高LOAD,输入的数据生效
}
void send_data(uchar byte)              //MAX7219的驱动程序
{
   uchar i;
   CLK=0;                              //拉低CLK,为产生上升沿作准备
   for(i=0;i<=7;i++)                  //发送8bit的数据
    {
       DIN=byte_7;
       CLK=1;                          //产生CLK的上升沿将1bit数据送入
       byte<<=1;
       CLK=0;
     }
}
此帖出自51单片机论坛

最新回复

在MAX7219的DIN、CLK、LOAD三个引脚分别对地并接一个30---1000pF的瓷片电容,可以有效的抑制7219的失控。 用MAX7219做LED显示,使用非常方便,接口简单,对于I/O口有限的单片机来说是一种非常简便的LED显示方案。但不适用于干扰较强的场合使用,在干扰的环境下使用会出现7219失控现象, 且一旦失控,只有断电,重新上电才能恢复正常!所以,在使用7219这一类器件时,一定要注意DIN、CLK、LOAD引脚干扰抑制与防范。 对于7219出现的上述问题,本人请教过MAXIM的技术支持,一旦7219失控,也只有重新上电才能恢复! [em18]  详情 回复 发表于 2009-10-8 20:10
点赞 关注
 

回复
举报

229

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
write_reg(DIS_TEST,0x0);             //正常操作,不进行显示测试
   write_reg(SHUTDOWN,0x01);            //正常显示
   write_reg(DECODE_MODE,0x0);          // 不用自动编码
   write_reg(SCAN_LIMIT,0x02);          //
   write_reg(INTENSITY,0x08);           //亮度为17/32


你仔细看一下程序 里面的变量基本都是有定义的 DIS_TEST有等于什么数据之类的命令 好好看看
此帖出自51单片机论坛
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
在max7219管脚附近并联一个0.1u和一个10u或更大的电容
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

4
 
不会啦 !找不到原因
上面的程序是
我用8051 来实现 MAX7219驱动 数码管显示0 1 2  三个数字
8051芯片是可以用的

可MAX7219 引脚一直没有反应   数码管也不能亮的

用proteus 来做的仿真的  、 怎么办啊
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

5
 
程序是这样的 不知道有没有错误 啦
我不台懂 MAX7219 这个东西
#include
typedef unsigned char uchar;
#define DIGIT0 0x01
#define DIGIT1 0x02
#define DIGIT2 0x03
#define DECODE_MODE 0x09
#define INTENSITY 0x0a
#define SCAN_LIMIT 0x0b
#define SHUTDOWN 0x0c
#define DIS_TEST 0x0f
uchar bdata byte;
sbit byte_7=byte^7;
sbit DIN=P2^5;
sbit LD=P2^4;
sbit CLK=P2^3;
uchar code led_code[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x50,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x4f,0x47};
void max7219_reset(void);
void write_reg(uchar,uchar);
void write_digit(uchar,uchar);
void send_data(uchar);

void main(void)
{
    max7219_reset();
    write_digit(DIGIT0,0);
    write_digit(DIGIT1,1);
    write_digit(DIGIT2,2);
    while(1)
    {}  
}


void max7219_reset(void)                //初始化MAX7219
{
   write_reg(DIS_TEST,0x0);             //正常操作,不进行显示测试
   write_reg(SHUTDOWN,0x01);            //正常显示
   write_reg(DECODE_MODE,0x0);          // 不用自动编码
   write_reg(SCAN_LIMIT,0x02);          //
   write_reg(INTENSITY,0x08);           //亮度为17/32
}

void write_reg(uchar reg,uchar sdata)   //写入命令
{
   LD=0;                                //拉低LOAD
   byte=reg;                            //将寄存器地址串行送入
   send_data(byte);
   byte=sdata;                          //将控制字节串行送入
   send_data(byte);
   LD=1;                                 //置高LOAD,输入的数据生效
}

void write_digit(uchar digit,uchar number)  //显示数字
{
   LD=0;                                 //拉低LOAD
   byte=digit;                           //将寄存器地址串行送入
   send_data(byte);
   byte=led_code[number];                //查表,取出对应的字型编码
   send_data(byte);                      //将字型编码送入MAX7219
   LD=1;                                 //置高LOAD,输入的数据生效
}

void send_data(uchar byte)              //MAX7219的驱动程序
{
   uchar i;
   CLK=0;                              //拉低CLK,为产生上升沿作准备
   for(i=0;i<=7;i++)                  //发送8bit的数据
    {
       DIN=byte_7;
       CLK=1;                          //产生CLK的上升沿将1bit数据送入
       byte<<=1;
       CLK=0;
     }
}
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

6
 
帮帮忙啦 !!

难道没有人呢 能帮忙看一下这个程序有没有错误码 !


谢谢啦 !
此帖出自51单片机论坛
 
 
 

回复

229

帖子

0

TA的资源

纯净的硅(初级)

7
 
void send_data(uchar byte)              //MAX7219的驱动程序
这段程序里面将脉冲的频率延时加长一点 这样你看一下是否可行 如果还不行,请检查一下硬件。一般有问题出现的时候:
1、检查硬件 是否按照手册说明去接
2、检查软件 是否按照时序等要求进行编写
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

8
 
谢谢啦 !

我回去试试!
此帖出自51单片机论坛
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

9
 

建议我们论坛团结起来!!!!!

中国加油!四川加油!汶川加油!相信人间有爱!好好活着. 生命是上帝租给你感受命运的唯一机会。无论命运如何,都应珍惜!只要有一线希望,我们绝不要放弃!行动就是希望!毁灭不代表结束!生命从此刻点燃新的冉冉之火!!!
此帖出自51单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

10
 
建议加上_nop_延时,我曾经有过类似的情况。试着在相应的CLK和DIN变化之后适当的延时,以确保管脚的电压已经稳定,这样会好点。你试试吧……
此帖出自51单片机论坛
 
 
 

回复

22

帖子

0

TA的资源

纯净的硅(初级)

11
 

我遇到了和楼主一样的问题

如题,请教一下楼主你解决了没?怎么解决的啊?急
此帖出自51单片机论坛
 
 
 

回复

188

帖子

0

TA的资源

五彩晶圆(中级)

12
 

Re: [求助] 用C51编写的MAX7219的问题

lou zhu shou lei,
du  zhe zhou hui.
lun tan xing  wang,
shou ru wang qian.
此帖出自51单片机论坛
 
 
 

回复

97

帖子

0

TA的资源

纯净的硅(初级)

13
 
在MAX7219的DIN、CLK、LOAD三个引脚分别对地并接一个30---1000pF的瓷片电容,可以有效的抑制7219的失控。

用MAX7219做LED显示,使用非常方便,接口简单,对于I/O口有限的单片机来说是一种非常简便的LED显示方案。但不适用于干扰较强的场合使用,在干扰的环境下使用会出现7219失控现象,

且一旦失控,只有断电,重新上电才能恢复正常!所以,在使用7219这一类器件时,一定要注意DIN、CLK、LOAD引脚干扰抑制与防范。
对于7219出现的上述问题,本人请教过MAXIM的技术支持,一旦7219失控,也只有重新上电才能恢复! [em18]
此帖出自51单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表