#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit SRCLK=P3^6;
sbit rCLK=P3^5;
sbit SER=P3^4;
//點(diǎn)陣列控制數(shù)據(jù)1
u8 gled_col[32]=
{0x80,0x00,0x9F,0x10,0x90,0x10,0x90,0x08,0x90,0x04,0x9E,0x02,0x82,0x00,0xE2,0x7F,
0x82,0x02,0x9E,0x04,0x90,0x04,0x90,0x08,0x90,0x10,0x90,0x22,0x8A,0x41,0x84,0x00
};
//點(diǎn)陣列控制數(shù)據(jù)2
u8 gled_co2[32]=
{0x80,0x08,0x82,0x08,0xF4,0x7F,0x84,0x08,0x00,0x02,0xE1,0x3F,0x02,0x22,0xFA,0x7F,
0x08,0x22,0xE4,0x3F,0x07,0x02,
0xA4,0x26,0xA4,0x2A,0x64,0x2A,0x14,0x22,0x08,0x22};
//點(diǎn)陣行控制數(shù)據(jù)
u8 gled_row[32]=
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80};
void delay_10us(u16 ten_us)//當(dāng)傳入Ten_us=1時(shí),大約延時(shí)10us
{
while(ten_us--);
}
void hc595_write_data(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 i=0;
for(i=0;i<8;i++)
{
SER=dat4>>7;
dat4<<=1;
SRCLK=0;
_nop_();
SRCLK=1;
_nop_();
}
for(i=0;i<8;i++)
{
SER=dat3>>7;
dat3<<=1;
SRCLK=0;
_nop_();
SRCLK=1;
_nop_();
}
for(i=0;i<8;i++)
{
SER=dat2>>7;
dat2<<=1;
SRCLK=0;
_nop_();
SRCLK=1;
_nop_();
}
for(i=0;i<8;i++)
{
SER=dat1>>7;
dat1<<=1;
SRCLK=0;
_nop_();
SRCLK=1;
_nop_();
}
rCLK=1;
delay_10us(1);
rCLK=0;
}
void main()
{
u8 i=0;
int j;
while(1)
{
for(j=0;j<100;j++)
for(i=0;i<16;i++)//循環(huán)16次 行,列
{ hc595_write_data(gled_row[i],gled_row[i+16],~gled_col[i*2],~gled_col[i*2+1]);
delay_10us(10);//延遲一段時(shí)間,
hc595_write_data(0x00,0x00,0x00,0x00);//消影
}
for(j=0;j<100;j++)
for(i=0;i<16;i++)//循環(huán)16次 行,列
{
hc595_write_data(gled_row[i],gled_row[i+16],~gled_co2[i*2],~gled_co2[i*2+1]);
}
}
}
|