目录
1.实现功能
通过4片595级联方式实现16*16点阵屏行流水灯
2.代码
c
#include <reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit DS = P3^4;
sbit SH_CP = P3^6; //输入时钟脉冲
sbit ST_CP = P3^5; //输出
u8 ghc595_buf[8] = { 0XFE, 0XFD, 0XFB, 0XF7, 0XEF, 0XDF, 0XBF, 0X7F };
void delay_50us(u16 us) {
while(us--);
}
void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void hc595_write_data(u8 dat1, u8 dat2, u8 dat3, dat4) {
u8 i = 0;
for (i = 0; i < 8; i++) {
DS = dat4 >> 7;
dat4 <<= 1;
SH_CP = 0;
delay_50us(1);
SH_CP = 1;
delay_50us(1);
}
for (i = 0; i < 8; i++) {
DS = dat3 >> 7;
dat3 <<= 1;
SH_CP = 0;
delay_50us(1);
SH_CP = 1;
delay_50us(1);
}
for (i = 0; i < 8; i++) {
DS = dat2 >> 7;
dat2 <<= 1;
SH_CP = 0;
delay_50us(1);
SH_CP = 1;
delay_50us(1);
}
for (i = 0; i < 8; i++) {
DS = dat1 >> 7;
dat1 <<= 1;
SH_CP = 0;
delay_50us(1);
SH_CP = 1;
delay_50us(1);
}
ST_CP = 0;
delay_50us(1);
ST_CP = 1;
delay_ms(500);
}
void main() {
u8 i = 0;
while(1) {
for (i = 0; i < 8; i++) {
hc595_write_data(ghc595_buf[i], 0XFF, 0XFF, 0XFF);
delay_ms(500);
}
for (i = 0; i < 8; i++) {
hc595_write_data(0XFF, ghc595_buf[i], 0XFF, 0XFF);
delay_ms(500);
}
}
}
3.原理图
