先上图
如图,通过单片机P2^0,P2^1,P2^3将控制信号通过锁存器传输到LED,从而实现流水灯小程序。
主程序如下:
#include
#include
#include<74HC595.H>
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
void delays(unsigned t) //delay 500ms
{
t=500*t;
while(t--)
Delay1ms();
}
void main(void)
{
unsigned int i;
i=0x01;
while(1)
{
Ser_IN(i); //控制信号传给锁存器
Par_OUT(); //将控制信号传出
delays(1);
i=_crol_(i,1); //循环左移一位
}
}
头文件如下:
//Note: 74HC595驱动
// __ __
//Note: MR 主复位接电源正极, OE 使能端,输出有效接电源负极
/*--------------------------------------------*/
#ifndef __74HC595_H__
#define __74HC595_H__
/*--------------------------------------------*/
sbit SD = P2^1; //串行数据输入
sbit ST_CK = P2^2; //存储寄存器时钟输入
sbit SH_CK = P2^0; //移位寄存器时钟输入
/*--------------------------------------------*/
//函数声明
void Ser_IN(unsigned char Data); //串行数据输入
void Par_OUT(void); //串行数据输出
//void Ser_Par(unsigned char Data); //串行输入,并行输出
/*--------------------------------------------*/
//串行数据输入
void Ser_IN(unsigned char Data)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
SH_CK = 0; //CLOCK_MAX=100MHz
SD = Data & 0x80;
Data <<= 1;
SH_CK = 1;
}
}
/*--------------------------------------------*/
//并行数据输出
void Par_OUT(void)
{
ST_CK = 0;
ST_CK = 1;
}
/*--------------------------------------------*/