打印

关于max7219级联程序问题

[复制链接]
4659|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
byk2005|  楼主 | 2007-3-15 06:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
max7219级联程序,proteus软件仿真通过, 实际连接硬件出错,只有第一片显示正常,第二片不显示,请参见附件

//********************************************************************
//*  文件名:1.c
//*  文件描述:PIC16F877,max7219级联显示1-8
//*  创建人:byk2005 2007年3月14日
//*  版本号:1.0
//*  修改记录:
//*******************************************************************/
//包含单片机内部资源预定义

#include  "pic.h"
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
#define nop    asm("NOP")
#define sleep    asm("sleep")
#define din    RB7
#define clk_1    RB5=1
#define clk_0    RB5=0
#define load_1   RB6=1
#define load_0   RB6=0
// 声明本模块中所调用的函数类型
//*************************************//
void delay1s()//延迟1S
{
ulong d=177200;
while(--d);

//延时5ms
void delay5ms()
{
unsigned int d=500;
while(--d);
}
//MAX7219驱动
void send(uchar data)  

uchar    i=8;
nop;
for (i=8;i>0;i--)
    {   
  clk_0;
        data<<=1;
        din=CARRY;
        clk_1;
     }
}
void write(uchar add1,uchar dat1,uchar add2,uchar dat2)
{
  load_0; //当LOAD为低电平时,芯片接收来自DIN的数据,接收完毕,
  send(add1);
  send(dat1);
  nop;
  clk_0;delay5ms();
  nop;
  clk_1;delay5ms();     //从DIN输入的数据经过16.5个CLK脉冲后移到DOUT引脚上。
             //所以发完16个数据后必须加一个脉冲,否则数据传不到第二片
  send(add2);
  send(dat2);
  load_1;   //LOAD回到高电平时,接收的数据将被锁定
}

void init7219()  //先设置后面一片的工作方式,再设置前面一片的工作方式
{write(0x09,0xff,0x09,0xff);  //设置译码方式,使用bcd译码
write(0x0a,0x08,0x0a,0x08);  //设置亮度
write(0x0b,0x07,0x0b,0x07);  //设置扫描的位数
write(0x0c,0x01,0x0c,0x01);  //设置待机方式

//*************************************//  
void test()    //设置7219并测试其好坏

  write(0x01,2,0x01,1);//先送位,再送段/先发送给第2片 
  write(0x02,15,0x02,15);
  write(0x03,3,0x03,3);
  write(0x04,4,0x04,4);
  write(0x05,5,0x05,5);
  write(0x06,6,0x06,6);
  write(0x07,7,0x07,7);
  write(0x08,8,0x08,8);

//*************************************//
//系统各I/O口初始化子程序
void  initial()

OPTION=0b01000010; //1.6us=TMRO
TRISB=0;     
INTCON=0b00000000;
PORTB=0;
GIE=0;//总中断使能
PEIE=0; T0IE=0;
T0IF=0;INTF=0;  

}

// 主函数

void main()


initial();  //系统初始化
init7219();
delay1s();  //延时
test();
re: 
write(0x01,2,0x01,1);
nop;
delay1s();
goto re;


}


相关链接:https://bbs.21ic.com/upfiles/img/20073/200731565121906.rar

相关帖子

沙发
otisyf| | 2007-3-15 09:19 | 只看该作者

re

第2片不亮(黑),表示第2片的 数据全部是FH
问题在
clk_0;delay5ms();
  nop;
clk_1;delay5ms(); 建议改成:clk_0;nop;clk_1;nop;clk_0    

使用特权

评论回复
板凳
polang2007| | 2014-10-17 00:35 | 只看该作者
我最近也在用这个MAX7219芯片
我觉得你的问题也是在
clk_0;delay5ms();
  nop;
clk_1;delay5ms();
数据手册上说,LOAD/ cs 端在第 16 个时钟的上升沿同时或之后,下个时钟上升沿之前
变为高电平,否则数据将会丢失。你前面已经有16个上升沿了,再加一个上升沿,数据就丢失了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

20

帖子

1

粉丝