怎么用单片机控制74hc595,做成流水灯?

如题所述

给你一段 我以前编写的程序,希望对你能有帮助

//74HC595 走马灯演示程序

#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

uchar code dat[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;

sbit DAT=P2^0 ; //串行数据输入
sbit CLK =P2^1 ; //移位时钟脉冲
sbit RCK =P2^2 ; //输出锁存器控制脉冲

uchar temp ;

void delay(int ms)
{
while(ms--);

}

/********************************************************/
/*将显示数据送入74HC595内部移位寄存器 */
/********************************************************/

void Write(void)
{
uchar j ;
for (j=0 ;j< ;8 ;j++)
{
temp << = 1 ;
DAT=CY ;
CLK=1 ; //上升沿发生移位
_nop_() ;
_nop_() ;
CLK=0 ;
}
}

/********************************************************/
/********************************************************/

void OUT_DAT(void)
{
RCK=0 ;
_nop_() ;
_nop_() ;
RCK=1 ; //上升沿将数据送到输出锁存器
_nop_() ;
_nop_() ;
_nop_() ;
RCK=0 ;
}

/********************************************************
* 主程序 *
*********************************************************/

main()
{
uchar i ;
CLK=0 ;
RCK=1 ;
while(1)
{
for (i=0 ; i< ;8 ; i++)
{
temp=dat[ i ] ; //取显示数据
Write() ;
OUT_DAT() ;
delay(100) ;
}
}

给你段程序参考
希望对你能帮助
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-12
#include<stc89.h>
#define uchar unsigned char
sbit si=P1^0; //串行数据输入端
sbit rclk=P1^1; //上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
sbit srclk=P1^2;//上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。)
unsigned char cc[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char dd;
void delay(uchar a0); //延时函数
void ss(unsigned char aa);
void main()
{

while(1)
{ for(dd=0;dd<8;dd++)
{ss(cc[dd]);
ss(cc[dd]);
delay(255);delay(255);delay(255);

}

}

}
void ss(unsigned char aa)
{unsigned char b0,b1;
rclk=0;
srclk=0;
for(b0=0;b0<8;b0++)
{ b1=aa;
b1=b1&0x01;
si=b1;
srclk=1;
srclk=0;
aa=(aa >>= 1);
}
rclk=1;
rclk=0;

}
void delay(uchar a0)
{ uchar a1,a2;
for(a2=a0;a2>0;a2--)
for(a1=255;a1>0;a1--);
}
第2个回答  2018-08-24
这里有个参考设计,提供参考原理图和源代码,stm32f4通过hc595控制96个LED,可通过修改数组数据修改点亮或者熄灭任意一个LED灯,程序方便移植

//初始化hc595参数

uint8_t hc595_buf1[6] = {0x00,0x00,0x00,0x00,0x00,0x00,};

uint8_t hc595_buf2[6] = {0x00,0x00,0x00,0x00,0x00,0x00,};

上面两个数组每一位代表一个灯,假如灯是低电平点亮,该位就置0,否则置1,

12个字节,一共96个bit位,代表96个灯,可无限扩展灯的数量

http://www.cirmall.com/circuit/9921/stm32f4%E9%80%9A%E8%BF%87hc595%E6%8E%A7%E5%88%B696%E4%B8%AALED#/details
第3个回答  2011-02-12
楼上的程序是正确的,就是定时使用控制锁存刷新数据段就是了
第4个回答  2018-09-22

单片机初学者,求老师写一个74hc595控制两个数码管或流水灯的简单程序...
既然要用到74hc595,那么就要写一个595的驱动程序,以便后面的操作简单化。sbit hc595_si =P2^5; \/\/数据引脚sbit hc595_sck =P2^4; \/\/移位寄存器sbit hc595_rck =P2^7; \/\/输出寄存器\/***595驱动***\/void HC595(unsigned char ch){ unsigned char i; for (i = 0; i...

【51单片机系列】74HC595实现对LED点阵的控制
实现流水灯效果时,在proteus中设计硬件,采用74HC595芯片进行控制。代码实现包含DS引脚输入串行数据、SHCP上升沿进行移位操作与STCP上升沿输出数据至并行端口。仿真结果显示了流水灯效果的实现。在另一应用中,利用74HC595控制LED点阵实现对角线灯亮的功能。proteus设计中的代码实现与仿真结果展示了对角线点亮效...

编写单片机的流水灯。8个流水灯。先从左向右亮再从左向右灭。求代码...
函数名称:SendData 函数功能:74HC595数据的发送 入口参数:unsigned int uiDataOne, unsigned int uiDataTwo 出口参数:void \/ void SendData(unsigned int uiDataOne, unsigned int uiDataTwo){ unsigned int i = 0;\/* 将片选信号置为低电平 *\/ HC595RCK = 0;\/* 输入第一个数据:uiDataOne ...

51单片机控制74hc595输出进而控制发光二极管点亮?
51单片机控制74hc595输出进而控制发光二极管点亮:74hc595是一个反极性驱动,也就是说如果用的是共阴数码管,段选端本应高电平点亮,如果在单片机的p口送个高电平,但是经过74hc595后你的高电平就变成低电平了,所以要在单片机那面往595送低电平,共阳相反,然后在将位选选通,如果想固定显示某个数或者循...

【51单片机系列】74HC595实现对LED点阵的控制
如在Proteus中,可以实现流水灯效果,其工作原理基于74HC595的串行输入和并行输出功能。在软件代码层面,通过控制DS、SHCP和STCP引脚,数据在上升沿进入移位寄存器并输出到并行端口。此外,文章还展示了如何使用74HC595控制LED点阵实现对角线亮,通过编程实现特定的点阵点亮顺序,如从左上角到右下角逐点亮亮。

51单片机,用级联的74HC595驱动8个数码管。程序写完了,但是延时有问题...
sbit ST_CP=P2^1;char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsigned char code DSB[]={2,0,1,5,0,7,2,6};void Delay(unsigned char ...

“原子法”一步一步74HC595分解学习
具体操作如下:首先,通过单片机实现16个LED灯的交叉亮起。然后,简化代码以使操作更简洁、实用。封装函数以实现LED灯按照特定意图工作的功能,实现中间四个LED灯亮起的效果。最后,连贯操作实现流水灯的实验,效果显著。值得注意的是,Arduino自带移位函数,同样能够实现数据传输和LED灯控制功能。总结而言,...

用52单片机控制两个74HC595芯片使16个LED灯流水点亮,怎么设计程序?求高 ...
把两个595级联,再把控制信号按位传给595,级联后可以传16位。传完后再传送给LED,进行控制。分享个控制8个流水灯的做参考网页链接

用单片机switch语句实现汽车转换灯控制
74hc573的好处就是可以并口输出,这样可以一次控制8个灯 程序里实现流水灯也很简单,假如你只控制8个灯,对应P0口的P0.0到P0.7,74hc595直接输出驱动led 程序:MOV A,#00000001B LOOP:MOV P0,A ;LCALL DELAY ;延时保持点亮状态 RR A JMP LOOP ...

利用74HC138和74HC595驱动16*16点阵完成上下左右滚动的功能的51单片机程...
\/\/74HC595练习程序 \/\/串入并出实现16流水灯效果 \/\/2009.12.28 includereg52.h sbit shcp=P2^0; \/\/数据在上升沿进入移位寄存器 sbit date1=P2^1; \/\/串行数据输入端 sbit clock=P2^2; \/\/上升沿时将数据输出到并行端口 unsigned char tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe...

相似回答