#include
#include
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit CLK=P2^2; //时钟线
sbit DAT=P2^0; //数据线
sbit LCK=P2^1; //锁存线
void delay(uint z) //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void sendbyte(unsigned char temp) //向595发送一字节数据,顺序从高位到低位
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
DAT=temp&0x80;
temp<<=1;
CLK=1;
}
}
void out595(void) //将移位寄存器数据锁存至输出显示寄存器
{
LCK=1;
_nop_();
_nop_();
LCK=0;
}
void main()
{
unsigned char i;
for(i=0;i<16;i++)
{
P0=i;
sendbyte(0x00); //送低8位
sendbyte(0x00); //再送高8位
out595(); //开片选
delay(500); //延时0.5ms
}
}
点阵有分共阴和共阳的,还有得看你是行扫描和列扫描,硬件电路可以由串行控制和并行控制,如果单片机IO口够用的话,用并口是最简便的啦,如果是串行的,那可以欧诺个74HC154和74HC573,控制好移位数据就可以的了,不懂可以问我,乐意为你解答。
16*16的点阵电路复杂是一方面,程序也不好理解的