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.
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();
}
Không có nhận xét nào:
Đăng nhận xét