求助max7219点阵显示问题

求助max7219点阵显示问题,第1张

我以前项目中用过4个max7219级联,用得比较稳定。你这个现象是因为CLK,LOAD引脚窜入了干扰信号,而7219是边沿触发,容易受到干扰。解决方法:1、可以在靠近7219芯片的地方,给CLK,DIN加101 - 104的滤波电容,效果比较明显。2、在程序中,加入抗干扰的驱动程序,定期重新配置72193、可以选用完全兼容的max7221代替

#include <reg51.h>

#include <intrins.h>

#define uchar unsigned char

sbit pinDIN = P3^0//DIN 串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。

sbit pinLOAD = P3^1//LOAD (MAX7219) 载入数据。连续数据的后16位在LOAD端的上升沿时被锁定。

sbit pinCLK = P3^2//在时钟的上升沿, 数据移入内部移位寄存器。 下降沿时, 数据从DOUT端输出。

uchar code LEDcode[] = { 0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b, 0x00 }

/*

void delay1000( void )

{

unsigned char a, b, c for ( c = 1 c > 0 c-- )

for ( b = 142 b > 0 b-- )

for ( a = 2 a > 0 a-- )

}

*/

//【增加】 延时1秒 函数

void delay1s(void)   //@12MHz

{

    unsigned char a,b,c

    for(c=46c>0c--)

        for(b=152b>0b--)

            for(a=70a>0a--)

    _nop_()  //if Keil,require use intrins.h

}

void sendbyte( uchar dat )

{

uchar i, temp 

_nop_() 

for ( i = 0 i < 8 i++ )

{

temp = dat & 0x80

dat = dat << 1 

if ( temp )

pinDIN = 1

else 

pinDIN = 0

pinCLK 森败= 0

_nop_()

pinCLK = 1

}

}

void sendword( uchar addr, uchar dat )

{

pinLOAD = 0

_nop_()

sendbyte( addr )

_nop_()

sendbyte( dat )

_nop_()

pinLOAD 姿春孙= 1 

delay1000()

}

void init7219( void )

{

sendword( 0x0c, 0x01 )

sendword( 0x0a, 0x09 )

sendword( 0x0b, 0x03 )

sendword( 0x09, 0x00 )

sendword( 0x0f, 0x00 )

}

void clear7219( void )

{

uchar i for ( i = 8 i > 0 i-- )

{

sendword( i, 0x00 )

}

}

void main( void )

{

int n = 60 

int s = 0 

int g = 0 

init7219() 

while ( 1 )

{

//clear7219() //【屏蔽】不然不显示

if ( n > 0 )

{

n = n - 1 

s = n / 10 

g = n % 10 

//LEDcode[s] //【屏蔽】

//LEDcode[g] //【屏蔽】

}

sendword( 0x01, LEDcode[s] )//【增迹链加】显示十位数

sendword( 0x02, LEDcode[g] )//【增加】 显示个位数

delay1s()//【增加】 延时一下,不然变化太快,看不到效果

/* //【屏蔽以下语句】

sendword( 0x01, LEDcode[1] )

sendword( 0x02, LEDcode[2] | 0x80 )

sendword( 0x03, LEDcode[3] )

sendword( 0x04, LEDcode[4] )

sendword( 0x05, LEDcode[5] )

sendword( 0x06, LEDcode[6] )

sendword( 0x07, LEDcode[7] )

sendword( 0x08, LEDcode[8] )

//*/

}

}

已在protues中仿真通过。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/12509911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存