驱动点阵有很多方法,比如单用HC138,单用HC595以及它两混用均可,本坛也有许多例子供大家参考,但是它们都是采用级联的方式来做,出于初学者的好奇心,想用一片595控制列,一片控制行,而不采用级联,然而程序无法运行。不知是程序问题还是硬件本身不支持这种接法,请高手们指教!
程序:
#include <reg51.H>
//#define uint unsigned int
//#define uchar unsigned char
typedef unsigned char u8;
typedef unsigned int u16;
sbit ds1 =P2^0;
sbit shcp = P2^1;
sbit stcp = P2^2;
sbit ds2 = P2^3;
u8 code display[]={
0x66,0x99,0x81,0x81,0x42,0x24,0x18,0x00};//“心”图案
u8 code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay(u8 b)//延时
{
while(b--);
}
/**************** 向HC595发送一个字节函数 ******************/
void Send1(u8 dat)
{
u8 i;
for(i=0;i<8;i++)
{
ds1 =dat&0x01;
dat>>=1;
shcp = 1;
shcp = 0;
}
stcp = 1;
stcp = 0;
}
void Send2(u8 ddat)
{
u8 j;
for(j=0;j<8;j++)
{
ds2 =ddat&0x80;
ddat<<=1;
shcp = 1;
shcp = 0;
}
stcp = 1;
stcp = 0;
}
void main()
{
u8 k;
while(1)
{
for(k=0;k<8;k++)
{
Send2(wei[k]);
Send1(display[k]);
delay(100);
}
}
}
|