Lập trình 74hc595 89cxx
Hôm nay mình sẽ giới thiệu các bạn IC 595 để mở rộng đầu ra cho chíp MCU
Trong mạch ứng dụng thực tế IC595 dùng rất nhiều trong công nghiệp như điều khiển led 7 đoạn
Mở rộng đầu ra cho MCU
Mình đã từng nghiên cứu mạch chạy công nghiệp của nhật dùng 89 nhưng chạy tương đối tốt
-Vấn đề khi ra chợ trời mua linh kiện toàn hàng chất lượng kém khi mua chạy kém không rõ lý do
-Đối với mạch thiết kế tương đối quan trọng ,
-IC 595 chuyển tư nối tiếp sang song song
-ở đây mình dùng 3 đường tín hiệu bao gồm clk.data,load
-Data đẩy dữ liệu từ MCU
-Clk cấp xung
-Load load data
Sơ đồ xung
Về code :
//-------------------------------------------------- #include<reg52.h> #include<stdio.h> #include<intrins.h> // khao bao cac chan 74hc595 de lap trinh sbit dulieu = P2^1; // chan du lieu sbit xung = P2^0; // chan xung dich tung bit sbit chot = P2^2; // chan chot du lieu unsigned int n,m,k; //****Chuong trinh tao tre**********/ void delay(unsigned char ms ) { int i,j; for(i=0;i<ms;i++) { for(j=0;j<125;j++); } } // chuong trinh lap trinh cho 74hc595 chuyen noi tiep sang song song void convert(unsigned char x) { // do chuc nang ghi dich 8 bit vao noi tiep ra song song // do do vong for duoi se cho dich 8 lan de du 8 chan dau ra cho vdk int i,tam; for(i=0;i<8;i++) // 8 lan dich de co 8 bit { tam=x; tam=tam&0x80; if(tam==0x80) dulieu=1; else dulieu=0; x=x<<1; // dich bit nhu sau xung=0; xung=1; } } //********************Hieu ung sang duoi******************************************/ void sangduoi() { int j; unsigned char mang[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; for(j=0;j<8;j++) { convert(mang[j]); chot=0; // khi dich du 8 biut thi chot du lieu va xuat ra output chot=1; delay(1000); } } //*******************Hieu ung sang dan******************************/ void sangdan() { int j; unsigned char mang[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; for(j=0;j<8;j++) { convert(mang[j]); chot=0; chot=1; delay(1000); } } //*******************hieu ung chop tat led************* void choptat() { int j; unsigned char mang[]={0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff}; for(j=0;j<8;j++) { convert(mang[j]); chot=0; // khi dich du 8 biut thi chot du lieu va xuat ra output chot=1; delay(1000); } } //*****************hieu ung sang chan le****************// void chanle() { int j; unsigned char mang[]={0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa}; for(j=0;j<8;j++) { convert(mang[j]); chot=0; chot=1; delay(1000); } } //*************chuong trinh chinh*************** void main(void) { sangdan(); chanle(); choptat(); sangduoi(); }
Thank you !