|
1芯积分
初学单片机,最近自己焊接了一个电路,用了六个74hc595级联驱动4个16*16 24脚的双色点阵,焊好之后写了个测试程序(如下),结果发现第5级595芯片的Q7脚会自己由低置高,程序刚写入的时候是正常的,但复位几次或开关几次之后就会改变,电源用三节5号电池,电源和地之间没有加滤波电容,595和点阵之间也是直接连的,没有加电容电阻三极管之类,不知道会不会是不稳定、干扰造成的?
大侠们有什么想法呢?求救啊~~
测试程序如下:
#include
#include
#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); //点阵红色
In_595_DC(0x0); //点阵绿色
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为低电平时数据由存储寄存器并行输出到总线上
} |
|