7segone sẽ chia sẻ code C viết cho dòng 8051 giao tiếp với
74HC595 để điều khiển LED đơn nhằm tiết kiệm chân cho vi điều khiển.
Nội dung chính.
Code mẫu giao tiếp AT89C5X với 74HC595 điều khiển 8LED đơn
//-------------------------------------------------- // LAP TRINH 74HC595 DIEU KHIEN 8 LED DON //-------------------------------------------------- #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(); }
Video demo