📄 47hc595.c
字号:
#include <reg52.h>
#include <intrins.h>
sbit sdi = P3^2;
sbit shcp = P3^1;
sbit stcp = P3^0;
sbit eo = P3^7;
#define hang P1
unsigned char aa;
unsigned char g_data[16][2*3];
unsigned char F=0;
code unsigned char character_state[16][2*7]=
{
{0x01,0x00,0x08,0x08,0x01,0x04,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x08,},
{0x11,0x00,0x0B,0xFC,0x07,0x84,0x02,0x04,0x7D,0xFC,0x00,0x80,0x3F,0xFC,},
{0x11,0x10,0x12,0x08,0x7C,0x04,0xFF,0xFE,0x45,0x08,0x04,0x80,0x00,0x08,},
{0x1F,0xF8,0x13,0xF8,0x04,0x24,0x04,0x00,0x49,0x08,0x04,0x40,0x00,0x48,},
{0x11,0x00,0x22,0x08,0x04,0x24,0x04,0x10,0x49,0xF8,0x08,0x40,0xFF,0xE8,},
{0x21,0x00,0x4B,0xF8,0x05,0x24,0x0F,0xF8,0x51,0x08,0x08,0x20,0x00,0x08,},
{0x01,0x04,0x88,0x00,0xFF,0xA4,0x08,0x10,0x49,0x08,0x11,0x10,0x00,0x88,},
{0xFF,0xFE,0x17,0xFC,0x0C,0x24,0x18,0x10,0x49,0xF8,0x21,0x0E,0x3F,0xC8,},
{0x04,0x80,0x30,0x10,0x0E,0x24,0x2F,0xF0,0x45,0x04,0xC2,0x04,0x20,0x88,},
{0x04,0x80,0x50,0x14,0x15,0xA4,0x48,0x10,0x45,0x88,0x02,0x00,0x20,0x88,},
{0x04,0x80,0x9F,0xFE,0x14,0xA4,0x88,0x10,0x45,0x50,0x04,0x00,0x20,0x88,},
{0x08,0x80,0x12,0x10,0x24,0x24,0x0F,0xF0,0x69,0x20,0x08,0x40,0x20,0x88,},
{0x08,0x82,0x11,0x10,0x44,0x04,0x08,0x10,0x51,0x10,0x10,0x20,0x3F,0x88,},
{0x10,0x82,0x11,0x10,0x04,0x04,0x08,0x10,0x41,0x4E,0x1F,0xF0,0x20,0x88,},
{0x20,0x7E,0x10,0x50,0x04,0x14,0x08,0x50,0x41,0x84,0x00,0x10,0x00,0x28,},
{0x40,0x00,0x10,0x20,0x04,0x08,0x08,0x20,0x41,0x00,0x00,0x00,0x00,0x10,},
};
void dleay(unsigned char t)
{
unsigned char i,j;
for(i=0;i<t;i++)
for(j=0;j<255;j++);
}
void sendbyte(unsigned char dat)
{
unsigned char j;
for(j=0;j<8;j++)
{
shcp = 0;
if(dat&0x80)
sdi = 1;
else
sdi = 0;
shcp = 1;
dat = dat<<1;
}
}
void display()
{
unsigned char i;
for(i=0;i<16;i++)//g_data
{
sendbyte(g_data[i][0]);
sendbyte(g_data[i][1]); sendbyte(g_data[i][2]);
sendbyte(g_data[i][3]); sendbyte(g_data[i][4]);sendbyte(g_data[i][5]);
stcp = 0;
hang = ~i;
stcp = 1;
//dleay(1);
}
}
void updat (void) interrupt 1
{
TH0 = -50000/255;
TL0 = -50000%255;
aa++;
}
void ledinit(void)
{
unsigned char s;
TMOD=0x01;
TH0 = -50000/255;
TL0 = -50000%255;
TR0=1;
ET0=1;
EA=1;
for(s=0;s<16;s++)
{
g_data[s][0]=character_state[s][0];
g_data[s][1]=character_state[s][1];
g_data[s][2]=character_state[s][2];
g_data[s][3]=character_state[s][3];
g_data[s][4]=character_state[s][4];
g_data[s][5]=character_state[s][5];
}
}
/*
void left(unsigned char *s,unsigned char length)
{
unsigned char cur=s[0];
unsigned char m;
unsigned char c;
for( m=0;m<length-1;m++ )
{
c=s[m+1];
c=c>>7;
s[m]=(s[m]<<1);
s[m]=s[m]|c;
}
s[m]=(s[m]<<1);
cur=cur>>7;
s[m]=s[m]|cur;
}*/
void left(unsigned char *s,unsigned char length,unsigned char n)
{
unsigned char cur=s[0];
unsigned char m;
unsigned char c;
for( m=0;m<length-1;m++ )
{
c=s[m+1];
c=c>>(8-n);
s[m]=(s[m]<<n);
s[m]=s[m]|c;
}
s[m]=(s[m]<<n);
cur=cur>>(8-n);
s[m]=s[m]|cur;
}
void convert(void)
{
unsigned char s;
unsigned char g_line[8];
unsigned char s1,s2,s3;
aa=0;
eo=1;
/*
for(s=0;s<16;s++)
{
left(&(g_data[s][0]),6);
}
*/
F++;
if( F== 14*8 ) F=0;
//F=F%(14*8);
s1=F/8;
s2=F%8;
for(s=0;s<16;s++)
{
for( s3=0;s3<7;s3++)
g_line[s3]=character_state[s][(s1+s3)%14];
left(&(g_line[0]),7,s2);
for( s3=0;s3<6;s3++)
g_data[s][s3]=g_line[s3];
}
eo=0;
}
void main(void)
{
F=0;
ledinit();
while(1)
{
if(aa>0)
{
convert();
}
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -