74hc595驱动双 {MOD}点阵中遇到的问题

2019-03-24 19:20发布

初学单片机,最近自己焊接了一个电路,用了六个74hc595级联驱动4个16*16 24脚的双 {MOD}点阵,焊好之后写了个测试程序(如下),结果发现第5级595芯片的Q7脚会自己由低置高,程序刚写入的时候是正常的,但复位几次或开关几次之后就会改变,电源用三节5号电池,电源和地之间没有加滤波电容,595和点阵之间也是直接连的,没有加电容电阻三极管之类,不知道会不会是不稳定、干扰造成的?
大侠们有什么想法呢?求救啊~~

测试程序如下:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SH_CP = P2^7;
sbit ST_CP = P2^6;
sbit  OE = P2^5;
sbit  DS = P2^4;

void In_595_DC(unsigned int NUM);
void Out_595_DC();
void main()
{
        In_595_DC(0xfffe);           //行控制  第1到8行11111110  第9到16行11111111
                                                        /*问题出在这里:第八行明明写入的是低电平,
                                                          但复位几次或者开关几次之后,就自动变高了
                                                        */
        In_595_DC(0x0);           //点阵红 {MOD}
        In_595_DC(0x0);           //点阵绿 {MOD}
        Out_595_DC();
        while(1);
}
void In_595_DC(unsigned int NUM)
{
uchar i;
uint temp;
temp=NUM;
for(i=0;i<16;i++)
{   
  DS=(temp&0x0001); //数据输入端  
  SH_CP = 1;         //SH_CP上升沿数据8位串行移位输入
  _nop_();
  _nop_();
  SH_CP = 0;
  temp >>= 1; //串行输出
}
}
void Out_595_DC()
{
  ST_CP = 0;
_nop_();//可以省略上面两条语句,因为单片机上电复位默认为低电平
ST_CP = 1; //ST_CP上升沿将数据存入存储寄存器
_nop_();
_nop_();
ST_CP = 0;
OE=0; //OE为低电平时数据由存储寄存器并行输出到总线上
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。