|
20黑币
我现在做16*32的点阵,电路找的资料自己搭建的,点阵行是阳极,用74hc154加PNP三极管做驱动,列是阴极,用74hc595加330Ω的限流电阻做驱动。现在在仿真的时候,比如我要点亮第4行第1列的led灯,但第16行第1列的led也会发光,修改程序选择其他行的led,16行总是会亮。我现在154的地址端接的是P0口,是16行常亮,我如果接到P1口就是第1行常亮。
仿真结果如图,最右下角驱动第16行的三极管的集电极为什么会一直是高电平呢,应该是没有导通的才对吧。
程序如下
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit DS=P1^0;
- sbit SH=P1^1;
- sbit ST=P1^2;
- sbit E1=P1^3;
- //列选码,595发送数据
- void Sendbyte(uchar dat1,uchar dat2,uchar dat3,uchar dat4)//高八,次高八,次低八,低八
- {
- uchar i;
- ST=0;
- for(i=0;i<8;i++)
- {
- SH=0;
- if(dat4&0x01)
- DS=1;
- else
- DS=0;
- SH=1;
- dat4=dat4>>1;
- }
- for(i=0;i<8;i++)
- {
- SH=0;
- if(dat3&0x01)
- DS=1;
- else
- DS=0;
- SH=1;
- dat3=dat3>>1;
- }
- for(i=0;i<8;i++)
- {
- SH=0;
- if(dat2&0x01)
- DS=1;
- else
- DS=0;
- SH=1;
- dat2=dat2>>1;
- }
- for(i=0;i<8;i++)
- {
- SH=0;
- if(dat1&0x01)
- DS=1;
- else
- DS=0;
- SH=1;
- dat1=dat1>>1;
- }
- ST=1;
- }
- void main()
- {
- E1=0;//打开154
- P0=3;//行选
- Sendbyte(0x7f,0xff,0xff,0xff);//列选
- }
复制代码
|
|