thấy mấy bạn đang băn khoăn về 74HC595 và lặp lại nhiều câu hỏi. nay mình đưa ra một bài hướng dẫn làm việc với 74hc595 một cách đơn giản, mình viết bằng Keil C:
#include<regx51.h>
sbit ds=P2^1; // chân dữ liệu ds
sbit cl=P2^0; // chân clock sh_cp
sbit st=P2^2; // chân store st_cp
void delayms(int time) // hàm này có thời gian trễ cỡ time * 1 ( ms )
{
int n;
for(n=0;n<time;n++)
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
TR0=1;
while(TF0==0)
{}
TF0=0;
TR0=0;
}
}
void send595(unsigned char byte) // hàm gửi một byte ra 74hc595
{ unsigned char i;
for(i=0;i<8;i++) // số lần lặp lại là 8 bởi 1 byte thì có 8 bit, mỗi lần gửi 1 bit
{
byte=byte<<1; // lệnh dịch trái 1 đơn vị, khi thực hiện lệnh này thì cờ nhớ CY = bit cao nhất của byte
ds=CY; // gửi giá trị của cờ CY vào chân dữ liệu
cl=1; // cl cung cấp 1 xung thì dữ liệu sẽ được gửi vào 74hc595
cl=0; // chú ý trong quá trình này mình để chân st=0 ( chưa chốt dữ liệu ra ngoài)
}
}
main()
{ unsigned char n;
for( ; ; )
{
send595(0);send595(0);st=1;delayms(1000);st=0; // gửi 2 byte có giá trị 0 ra 74hc595 và chốt dữ liệu (st=1)
for(n=0;n<16;n++) // lặp lại 16 lần.
{
ds=1; // đặt mức cao vào chân ds
cl=1; // cấp xung ở chân clock
cl=0;
st=1; // chốt dữ liệu ra ngoài
delayms(1000);
st=0; // ngừng chốt dữ liệu
}
}
}
#include<regx51.h>
sbit ds=P2^1; // chân dữ liệu ds
sbit cl=P2^0; // chân clock sh_cp
sbit st=P2^2; // chân store st_cp
void delayms(int time) // hàm này có thời gian trễ cỡ time * 1 ( ms )
{
int n;
for(n=0;n<time;n++)
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
TR0=1;
while(TF0==0)
{}
TF0=0;
TR0=0;
}
}
void send595(unsigned char byte) // hàm gửi một byte ra 74hc595
{ unsigned char i;
for(i=0;i<8;i++) // số lần lặp lại là 8 bởi 1 byte thì có 8 bit, mỗi lần gửi 1 bit
{
byte=byte<<1; // lệnh dịch trái 1 đơn vị, khi thực hiện lệnh này thì cờ nhớ CY = bit cao nhất của byte
ds=CY; // gửi giá trị của cờ CY vào chân dữ liệu
cl=1; // cl cung cấp 1 xung thì dữ liệu sẽ được gửi vào 74hc595
cl=0; // chú ý trong quá trình này mình để chân st=0 ( chưa chốt dữ liệu ra ngoài)
}
}
main()
{ unsigned char n;
for( ; ; )
{
send595(0);send595(0);st=1;delayms(1000);st=0; // gửi 2 byte có giá trị 0 ra 74hc595 và chốt dữ liệu (st=1)
for(n=0;n<16;n++) // lặp lại 16 lần.
{
ds=1; // đặt mức cao vào chân ds
cl=1; // cấp xung ở chân clock
cl=0;
st=1; // chốt dữ liệu ra ngoài
delayms(1000);
st=0; // ngừng chốt dữ liệu
}
}
}
Comment