. Mình dùng thanh ghi dịch 6B595 loại có đệm dòng, mọi chi tiết về nó...ALLDATASHEET.COM - Datasheet search site for Electronic Components and Semiconductors and other semiconductors. 
#include<at89x52.h>
#define DL1 P2_0
#define CLR1 P2_1
#define G1 P2_2
#define rck1 P2_3
#define CLK1 P2_4
#define DL P1_0
#define CLR P1_1
#define G P1_2
#define rck P1_3
#define CLK P1_4
unsigned char code HELLO[]={0x00,0xFF,0xFF,0x99,0x99,0x66,0x66,0x00,0x00,0x0 FE,0xFE,0x03,0x03,0x03,0xFE,0xFE,0x00,0x00,0x00,0x FF,0xFF,0x00,0x00,0x00,0x00,0x7E,0x7E,0x81,0x83,0x 7F,0x7F,0x01,0x00,0xFE,0xFE,0x03,0x03,0x03,0xFE,0x FE,0x00,0x7F,0x7F,0xC8,0xC8,0x7F,0x7F,0x00,0xFF,0x FF,0x70,0x38,0xFF,0xFF,0x00,0x00,0x00,0x7E,0x7E,0x C3,0xCB,0xCF,0xCE,0x08,0x00,0x00,0xFF,0xFF,0x18,0x 18,0xFF,0xFF,0x00,0xFE,0xFE,0x03,0x03,0xFE,0xFE,0x 00,0xC3,0x67,0x3E,0x18,0x30,0x60,0xC0,0x80,0x7E,0x FF,0x9F,0x9D,0xF9,0xF1,0xE1,0x60,0x7E,0xFF,0x9F,0x 9D,0xF9,0xF1,0xE1,0x60,0x7E,0xFF,0x9F,0x9D,0xF9,0x F1,0xE1,0x60};
unsigned int COT[]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned int i,k,j,a;
void XULI_COT();
void delay(unsigned int x)
{
unsigned int y;
for(y=0;y<x;y++)
{;}
}
void DATA_IN(unsigned char k)
{
DL=k;
CLK=0;
CLK=1;
}
void DATA_IN1(unsigned char k)
{
DL1=k;
CLK1=0;
CLK1=1;
}
void XUAT_DL()
{
rck=0;
rck=1;
}
void XUAT_DL1()
{
rck1=0;
rck1=1;
}
void XULI_COT(unsigned char x)
{
unsigned char byte;
for (i = 0; i < 8; i++)
{
byte = x & 0x80; // L?y bit cu?i
if (byte == 0x80) // Bit cu?i là 1
DATA_IN1(1); // Ngõ ra DATA là High
else
DATA_IN1(0); // Ngõ ra DATA là Low
x*=2; //Ðôn bit 7 lên bit 8
}
}
void XULI_HANG(unsigned char x)
{
unsigned char byte;
for (i = 0; i < 8; i++)
{
byte = x & 0x80; // L?y bit cu?i
if (byte == 0x80) // Bit cu?i là 1
DATA_IN(1); // Ngõ ra DATA là High
else
DATA_IN(0); // Ngõ ra DATA là Low
x*=2; //Ðôn bit 7 lên bit 8
}
}
void ngat_t0()interrupt 1
{
unsigned char BDN;
BDN++; TH0=0x4b; TL0=0xb0;
if(BDN>=5)
{
BDN=BDN-4;
a++;
if(a==84) { a=0;}
}
}
void main()
{ CLR1=1;
G1=0;
CLR=1;
G=0;
TMOD=0x01; TH0=0x40; TL0=0xb0;
TR0=1;
EA=1;
ET0=1;
while(1)
{
for(j=0;j<8;j++)
{
XULI_HANG(0x00);
XULI_HANG(0x00);
XULI_HANG(0x00);
XULI_HANG(0x00);
XUAT_DL();
XULI_COT(COT[j]);
XUAT_DL1();
XULI_HANG(HELLO[(j+24+a)]);
XULI_HANG(HELLO[(j+16+a)]);
XULI_HANG(HELLO[(j+8+a)]);
XULI_HANG(HELLO[j+a]);
XUAT_DL();
XULI_COT(COT[j]);
XUAT_DL1();
}
}
}
#define DL1 P2_0
#define CLR1 P2_1
#define G1 P2_2
#define rck1 P2_3
#define CLK1 P2_4
#define DL P1_0
#define CLR P1_1
#define G P1_2
#define rck P1_3
#define CLK P1_4
unsigned char code HELLO[]={0x00,0xFF,0xFF,0x99,0x99,0x66,0x66,0x00,0x00,0x0 FE,0xFE,0x03,0x03,0x03,0xFE,0xFE,0x00,0x00,0x00,0x FF,0xFF,0x00,0x00,0x00,0x00,0x7E,0x7E,0x81,0x83,0x 7F,0x7F,0x01,0x00,0xFE,0xFE,0x03,0x03,0x03,0xFE,0x FE,0x00,0x7F,0x7F,0xC8,0xC8,0x7F,0x7F,0x00,0xFF,0x FF,0x70,0x38,0xFF,0xFF,0x00,0x00,0x00,0x7E,0x7E,0x C3,0xCB,0xCF,0xCE,0x08,0x00,0x00,0xFF,0xFF,0x18,0x 18,0xFF,0xFF,0x00,0xFE,0xFE,0x03,0x03,0xFE,0xFE,0x 00,0xC3,0x67,0x3E,0x18,0x30,0x60,0xC0,0x80,0x7E,0x FF,0x9F,0x9D,0xF9,0xF1,0xE1,0x60,0x7E,0xFF,0x9F,0x 9D,0xF9,0xF1,0xE1,0x60,0x7E,0xFF,0x9F,0x9D,0xF9,0x F1,0xE1,0x60};
unsigned int COT[]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned int i,k,j,a;
void XULI_COT();
void delay(unsigned int x)
{
unsigned int y;
for(y=0;y<x;y++)
{;}
}
void DATA_IN(unsigned char k)
{
DL=k;
CLK=0;
CLK=1;
}
void DATA_IN1(unsigned char k)
{
DL1=k;
CLK1=0;
CLK1=1;
}
void XUAT_DL()
{
rck=0;
rck=1;
}
void XUAT_DL1()
{
rck1=0;
rck1=1;
}
void XULI_COT(unsigned char x)
{
unsigned char byte;
for (i = 0; i < 8; i++)
{
byte = x & 0x80; // L?y bit cu?i
if (byte == 0x80) // Bit cu?i là 1
DATA_IN1(1); // Ngõ ra DATA là High
else
DATA_IN1(0); // Ngõ ra DATA là Low
x*=2; //Ðôn bit 7 lên bit 8
}
}
void XULI_HANG(unsigned char x)
{
unsigned char byte;
for (i = 0; i < 8; i++)
{
byte = x & 0x80; // L?y bit cu?i
if (byte == 0x80) // Bit cu?i là 1
DATA_IN(1); // Ngõ ra DATA là High
else
DATA_IN(0); // Ngõ ra DATA là Low
x*=2; //Ðôn bit 7 lên bit 8
}
}
void ngat_t0()interrupt 1
{
unsigned char BDN;
BDN++; TH0=0x4b; TL0=0xb0;
if(BDN>=5)
{
BDN=BDN-4;
a++;
if(a==84) { a=0;}
}
}
void main()
{ CLR1=1;
G1=0;
CLR=1;
G=0;
TMOD=0x01; TH0=0x40; TL0=0xb0;
TR0=1;
EA=1;
ET0=1;
while(1)
{
for(j=0;j<8;j++)
{
XULI_HANG(0x00);
XULI_HANG(0x00);
XULI_HANG(0x00);
XULI_HANG(0x00);
XUAT_DL();
XULI_COT(COT[j]);
XUAT_DL1();
XULI_HANG(HELLO[(j+24+a)]);
XULI_HANG(HELLO[(j+16+a)]);
XULI_HANG(HELLO[(j+8+a)]);
XULI_HANG(HELLO[j+a]);
XUAT_DL();
XULI_COT(COT[j]);
XUAT_DL1();
}
}
}





Leave a comment: