|
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);//列選
- }
復制代碼
|
|