基于STM32单片机的流水灯控制-74HC595
冰果派-棉花糖V1.0开发板

文章目录
- 基于STM32单片机的流水灯控制-74HC595
- 冰果派-棉花糖V1.0开发板
- @[toc]
- 一 任务
- 二 硬件电路如何设计
- 1. IO口不够用
- 2.74HC595D
- 三 程序怎么编写
- 1.单片机怎么把数据给595
- 2.写程序(595驱动)
- 3.流水灯程序的实现
- 3.1 任务要求
- 3.2 实现逻辑
- 3.3 代码实现逻辑
- 四 总结
文章目录
- 基于STM32单片机的流水灯控制-74HC595
- 冰果派-棉花糖V1.0开发板
- @[toc]
- 一 任务
- 二 硬件电路如何设计
- 1. IO口不够用
- 2.74HC595D
- 三 程序怎么编写
- 1.单片机怎么把数据给595
- 2.写程序(595驱动)
- 3.流水灯程序的实现
- 3.1 任务要求
- 3.2 实现逻辑
- 3.3 代码实现逻辑
- 四 总结
一 任务
- 实现8个灯的流水灯控制
二 硬件电路如何设计
1. IO口不够用
能够预留给灯的IO只有4个
2.74HC595D

-
作用
-
IO口扩展
串口转并口芯片(跟单片机采用串口方式进行通信,然后将单片机发来的数据转换成并口输出)
-
提高驱动能力
STM32F103C8T6:MCU 微控制器(主要功能是:控制 不能用作驱动)
-
-
引脚简介

- 一共16个引脚

- 一共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 1111TI74HC595_SendByte(a);HAL_Delay(300);}a = 0x00;TI74HC595_SendByte(a);HAL_Delay(300);
}
四 总结
- 串口转并口芯片74HC595D
- 以后单片机引脚不够的时候,使用这个芯片进行扩展
- 我们要学会以后看芯片数据手册
- 在实现功能之前,首先要把问题分析清除
300);
}
a = 0x00;
TI74HC595_SendByte(a);
HAL_Delay(300);
}
# 四 总结+ 串口转并口芯片74HC595D+ 以后单片机引脚不够的时候,使用这个芯片进行扩展
+ 我们要学会以后看芯片数据手册
+ 在实现功能之前,首先要把问题分析清除
+ 实现了模拟奥迪车灯














