特色专栏 > 机械控制
+

AT89C51通过74HC595锁存器控制流水灯

2020/5/7    作者:未知    来源:网络文摘    阅读:499

先上图

AT89C51通过74HC595锁存器控制流水灯

如图,通过单片机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;

}

 

/*--------------------------------------------*/

  • 相关文章
  • 热门文章
免责申明:天天CAD教程网旨在相互学习交流,是一个完全免费的网站,部分原创作品,欢迎转载,部分内容来自互联网,如果侵犯了您的权利请尽快通知我们!邮箱:qm198794@gmail.com天天CAD教程网湘ICP备17006802号
【回到顶部】