怎么用单片机控制74hc595,做成流水灯?
5个回答
展开全部
给你一段 我以前编写的程序,希望对你能有帮助
//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) ;
}
}
给你段程序参考
希望对你能帮助
//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) ;
}
}
给你段程序参考
希望对你能帮助
宿兴电子
2024-11-28 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
展开全部
#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--);
}
#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--);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里有个参考设计,提供参考原理图和源代码,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
//初始化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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的程序是正确的,就是定时使用控制锁存刷新数据段就是了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询