自动控制

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

时间:2021-12-17 22:36:04   作者:未知   来源:网络文摘   阅读:559   评论:0

先上图

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

}

 

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


免责申明:我要玩起网旨在提供一个相互学习交流的平台,是一个完全免费的网站,部分原创作品,欢迎转载,部分内容来自互联网,如果侵犯了您的权利请尽快通知我们!邮箱:834308595@qq.com Copyright 2018-2021我要玩起网  湘ICP备17006802号-2