你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HC595

[复制链接]
lugf 提问时间:2019-8-7 15:51 /
如何用一个HC595做流水灯,我是初学者,请各位大神指点一下。最好有代码来看一下,多谢了。
收藏 评论23 发布时间:2019-8-7 15:51

举报

23个回答
lugf 回答时间:2019-8-8 10:58:11

                void LED_HC595(void)
{

//volatile unsigned char LED_data=0x0f;
volatile unsigned char LED_data[8]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};

                //数据传输//
               
                unsigned char c,b,num;
                num= LED_data[8];
                for(b=0;b<8;b++)
                delay_ms(100);       
                {
                        CLR_HC595_RCK;
                        delay_us(500);
       
       
                                for(c=0;c<8;c++)
                                {
                                        CLR_HC595_SCK;
                                       
                                         delay_us(500);
                                        if((num&0x80)==0x80)
                                        SET_HC595_DS;
               
                                        else
                                        CLR_HC595_DS;
                                        delay_us(500);
                                        num<<=1;
       
       
       
                                        SET_HC595_SCK;
                                        delay_us(500);       
                               
                                }
                               
                                        SET_HC595_RCK;
                                        delay_us(500);

                }
       
}
TLLED 回答时间:2019-8-8 17:41:13
lugf 发表于 2019-8-8 15:00
按照你的方式试了和我上面的一样,能在详细点吗?多谢了

void main()
{

                unsigned char a;
                unsigned char LED_data[8]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
               
                disableInterrupts();
                CLK_Configuration();
                GPIO_Configuration();
                TIME2_Init();        
                enableInterrupts();
                                
        while(1)

                {
                        //KEY_Demo();
                        //KEY_Demo2();
                        //KEY_Demo1();
        
                        for(a=0;a<8;a++)
                        {
                                //LED_HC595( );
                                SendByte(LED_data[a]);
                                OutCtrl595();
                                delay_ms(1000);   
                        }
                       // delay_ms(100);        
                }
}


大概流程就是这样的
lugf 回答时间:2019-8-8 10:58:35
void main()
{

                unsigned char a;
               
                disableInterrupts();
                CLK_Configuration();
                GPIO_Configuration();
                TIME2_Init();       
                enableInterrupts();
                               
        while(1)

                {
                        //KEY_Demo();
                        //KEY_Demo2();
                        //KEY_Demo1();
       
                        for(a=0;a<8;a++)

                        {

                                LED_HC595( );
                               
                        }

                        delay_ms(100);       
                }
}
zcl201207 回答时间:2019-8-7 21:58:52
这个网上很多的呀,建议先看595数据手册。。。
maxtch 回答时间:2019-8-8 01:45:53
你的 595 是怎么接的?595 可以作为 SPI 从设备用,也可以直接操纵 GPIO。如果接成 SPI 从设备的话,直接向 SPI 写字节就可以了。GPIO 的话那照着数据手册里面的时序操纵 I/O。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

lugf 回答时间:2019-8-8 10:55:20
BTAR KEY LED.pdf (131.01 KB, 下载次数: 8)
lugf 回答时间:2019-8-8 11:00:36
各位大神帮忙看一下,这个程序做流水灯有什么问题
lugf 回答时间:2019-8-8 11:03:18
maxtch 发表于 2019-8-8 01:45
你的 595 是怎么接的?595 可以作为 SPI 从设备用,也可以直接操纵 GPIO。如果接成 SPI 从设备的话,直接向 ...

我发了一个程序上来,麻烦大哥有时间帮忙看一下哪里出问题
lugf 回答时间:2019-8-8 11:04:28
zcl201207 发表于 2019-8-7 21:58
这个网上很多的呀,建议先看595数据手册。。。

我发了一个程序上来,麻烦大哥有时间帮忙看一下哪里出问题
TLLED 回答时间:2019-8-8 11:44:41
给你一个参考程序


#define nop _nop_

sbit RCLK1=P1^2;  //控制位信号
sbit DAT=P1^5;          //数据输出
sbit SRCLK=P1^4;  //左移时钟
sbit ENC=P1^3;          //芯片使能


//发送字节
void SendByte(uchar num)
{   
        uchar  i;
        for(i=0;i<8;i++)
        {
                SRCLK=0;
                DAT=num&0x80;
                num=num<<1;         
                SRCLK=1;                 
        }         
}
//输出控制信号
void OutCtrl595(void)
{
        RCLK1=0;
        nop();
        RCLK1=1;
}

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

lugf 回答时间:2019-8-8 15:00:01
TLLED 发表于 2019-8-8 11:44
给你一个参考程序

按照你的方式试了和我上面的一样,能在详细点吗?多谢了
TLLED 回答时间:2019-8-8 17:42:08
lugf 发表于 2019-8-8 15:00
按照你的方式试了和我上面的一样,能在详细点吗?多谢了

延时的时间要稍长些,
lugf 回答时间:2019-8-8 18:02:33
TLLED 发表于 2019-8-8 17:42
延时的时间要稍长些,

感谢兄弟的热情帮助,我多试几次应该可以了
lugf 回答时间:2019-8-8 18:09:55
TLLED 发表于 2019-8-8 17:42
延时的时间要稍长些,

按照你的思路已经可以了,谢谢
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版