基于STM32单片机的流水灯控制-74HC595
冰果派-棉花糖V1.0开发板
一 任务
- 实现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 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
+ 以后单片机引脚不够的时候,使用这个芯片进行扩展
+ 我们要学会以后看芯片数据手册
+ 在实现功能之前,首先要把问题分析清除
+ 实现了模拟奥迪车灯