基于STM32单片机的流水灯控制-74HC595

基于STM32单片机的流水灯控制-74HC595

冰果派-棉花糖V1.0开发板

在这里插入图片描述


一 任务

  • 实现8个灯的流水灯控制

二 硬件电路如何设计

1. IO口不够用

能够预留给灯的IO只有4个

2.74HC595D

在这里插入图片描述

  • 作用

    1. IO口扩展

      串口转并口芯片(跟单片机采用串口方式进行通信,然后将单片机发来的数据转换成并口输出)

    2. 提高驱动能力

      STM32F103C8T6:MCU 微控制器(主要功能是:控制 不能用作驱动)

  • 引脚简介

    在这里插入图片描述

    • 一共16个引脚
      在这里插入图片描述
  • 硬件电路设计

    单片机一共就3个引脚,如何控制8路LED

    • 595连接LED电路

在这里插入图片描述

  • 转换开关

在这里插入图片描述

  • 芯片端

在这里插入图片描述

三 程序怎么编写

1.单片机怎么把数据给595

  • SER

    数据引脚

    比如:0x80 1000 0000 给74HC595

  • SCR

    双方同步时钟信号

  • RCK

    当数据传输完成后,RCK来一个上升沿之后595就把接收到的串行数据转成并行数据输出

  • 总结

    单片机和595通过SER和SCK两个引脚配合,就可以把数据从单片机传送给595,传送完成让RCK出现一个上升沿,595就把接受的数据输出

  • 核心

    单片机(主器件) 74HC595(受控器件)

2.写程序(595驱动)

  • 驱动源文件

    #include "TI74HC595.h"
    
    void TI74HC595_SendByte(uint8_t dat)
    {
    	uint8_t mid;
    	HAL_GPIO_WritePin(HC595_SCK_PORT, HC595_SCK_PIN, GPIO_PIN_SET);
    	HAL_GPIO_WritePin(HC595_RCK_PORT, HC595_RCK_PIN, GPIO_PIN_SET);
    	for(mid=0;mid<8;mid++) //发送 8 位数
    	{
    		if((dat >> 7) == 0x01){
    			HAL_GPIO_WritePin(HC595_SER_PORT, HC595_SER_PIN, GPIO_PIN_SET);
    		}else{
    			HAL_GPIO_WritePin(HC595_SER_PORT, HC595_SER_PIN, GPIO_PIN_RESET);
    		}
    		dat <<= 1;
    		HAL_GPIO_WritePin(HC595_SCK_PORT, HC595_SCK_PIN, GPIO_PIN_RESET);
    		HAL_Delay(1);
    		HAL_GPIO_WritePin(HC595_SCK_PORT, HC595_SCK_PIN, GPIO_PIN_SET);
    	}
    	HAL_GPIO_WritePin(HC595_RCK_PORT, HC595_RCK_PIN, GPIO_PIN_RESET);
    	HAL_Delay(1);
    	HAL_GPIO_WritePin(HC595_RCK_PORT, HC595_RCK_PIN, GPIO_PIN_SET);
    }
    
  • 驱动头文件

    #ifndef TI74HC595_H_
    #define TI74HC595_H_
    /* ------------------------------------------------------------------*/
    #include "main.h"
    #include "gpio.h"
    /* ------------------------------------------------------------------*/
    #define HC595_SER_PORT  GPIOA
    #define HC595_SER_PIN   GPIO_PIN_0
    
    #define HC595_SCK_PORT  GPIOA
    #define HC595_SCK_PIN   GPIO_PIN_8
    
    #define HC595_RCK_PORT  GPIOB
    #define HC595_RCK_PIN   GPIO_PIN_1
    /* ------------------------------------------------------------------*/
    void TI74HC595_SendByte(uint8_t dat);
    /* ------------------------------------------------------------------*/
    #endif 
    

3.流水灯程序的实现

3.1 任务要求

在这里插入图片描述

3.2 实现逻辑

单片机给74HC595发:

  • 1000 0000 0x80

  • 1100 0000 0xC0

  • 1110 0000

  • 1111 1111

  • 0000 0000

3.3 代码实现逻辑

uint8_t a = 0x00,i = 0;

while(1)
{
    for(i = 0;i<8;i++){
        a = (a>>1) + 0x80;   // 1000 0000 | 1100 0000 | 1110 0000 | 1111 0000 | 1111 1000 | 1111 1100 |
                             // 1111 1110 | 1111 1111
        TI74HC595_SendByte(a);
        HAL_Delay(300);
    }
    a = 0x00;
    TI74HC595_SendByte(a);
    HAL_Delay(300);
}

四 总结

  • 串口转并口芯片74HC595D
    • 以后单片机引脚不够的时候,使用这个芯片进行扩展
  • 我们要学会以后看芯片数据手册
  • 在实现功能之前,首先要把问题分析清除
    300);
    }
    a = 0x00;
    TI74HC595_SendByte(a);
    HAL_Delay(300);
    }

# 四 总结

+ 串口转并口芯片74HC595D
  + 以后单片机引脚不够的时候,使用这个芯片进行扩展
+ 我们要学会以后看芯片数据手册
+ 在实现功能之前,首先要把问题分析清除
+ 实现了模拟奥迪车灯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工控小机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值