[DemoCode下载] 新唐M051单片机 驱动 74HC595 的详细指南

[复制链接]
2440|6
 楼主| 小灵通2018 发表于 2025-4-30 14:51 | 显示全部楼层 |阅读模式
一、74HC595 简介
功能:8位串行输入→并行输出移位寄存器,带输出锁存器。

关键引脚:

SER(DS, 14脚):串行数据输入。

SRCLK(SHCP, 11脚):移位寄存器时钟(上升沿触发数据移位)。

RCLK(STCP, 12脚):存储寄存器时钟(上升沿触发数据锁存到输出)。

OE(13脚):输出使能(低电平有效,通常直接接地)。

Q0-Q7(15脚、1-7脚):并行输出(驱动数码管段选)。

Q7'(9脚):级联输出(接下一片74HC595的SER)。

二、硬件连接(以驱动共阴数码管为例)
1. M051单片机与74HC595连接
743746811c82df1725.png
2. 74HC595与数码管连接
段选:Q0-Q7 → 数码管的a-dp段(需串联220Ω限流电阻)。

位选:若驱动多位数码管,用另一片74HC595或三极管控制公共端。


三、驱动程序(Keil C)
1. 初始化GPIO
  1. #include "M051Series.h"

  2. #define SER_PIN     P1_0    // 数据线
  3. #define SRCLK_PIN   P1_1    // 移位时钟
  4. #define RCLK_PIN    P1_2    // 锁存时钟

  5. void GPIO_Init() {
  6.     GPIO_SetMode(P1, 0x07, GPIO_PMD_OUTPUT); // P1.0~P1.2设为输出
  7.     SER_PIN = 0;
  8.     SRCLK_PIN = 0;
  9.     RCLK_PIN = 0;
  10. }
2. 74HC595写入函数(单字节)
  1. void HC595_SendByte(uint8_t data) {
  2.     for (uint8_t i = 0; i < 8; i++) {
  3.         SER_PIN = (data >> (7 - i)) & 0x01; // 从高位到低位发送
  4.         SRCLK_PIN = 1; // 上升沿移位
  5.         __nop();       // 短暂延时(根据时钟速度调整)
  6.         SRCLK_PIN = 0;
  7.     }
  8.     RCLK_PIN = 1; // 上升沿锁存数据到输出
  9.     __nop();
  10.     RCLK_PIN = 0;
  11. }
3. 示例:显示数字0-9(共阴数码管段码表)
  1. const uint8_t seg_table[] = {
  2.     0x3F, // 0
  3.     0x06, // 1
  4.     0x5B, // 2
  5.     0x4F, // 3
  6.     0x66, // 4
  7.     0x6D, // 5
  8.     0x7D, // 6
  9.     0x07, // 7
  10.     0x7F, // 8
  11.     0x6F  // 9
  12. };

  13. void DisplayNumber(uint8_t num) {
  14.     if (num <= 9) {
  15.         HC595_SendByte(seg_table[num]);
  16.     }
  17. }
4. 主函数调用

  1. int main() {
  2.     SYS_Init();        // 新唐M051系统初始化
  3.     GPIO_Init();       // 初始化GPIO

  4.     while (1) {
  5.         for (uint8_t i = 0; i < 10; i++) {
  6.             DisplayNumber(i);
  7.             CLK_SysTickDelay(1000000); // 延时约1秒(根据时钟调整)
  8.         }
  9.     }
  10. }
四、关键注意事项
时序要求:

74HC595在3.3V下工作正常,但需确保时钟频率不过高(建议<10MHz)。

__nop() 延时可根据实际调试调整(若显示乱码,增加延时)。

级联多片74HC595:

将第一片的Q7'接第二片的SER,共用SRCLK和RCLK。

发送数据时,先发送远端芯片的数据(如两片则发送2字节)。

数码管类型适配:

若为共阳数码管,段码取反(~seg_table),且公共端接VCC。




 楼主| 小灵通2018 发表于 2025-4-30 14:51 | 显示全部楼层
扩展应用
动态扫描多位数码管:
用两片74HC595,一片控制段选,一片控制位选,快速轮询实现多位数显。

亮度控制:
通过PWM控制OE引脚(需断开接地),调节占空比改变亮度。
 楼主| 小灵通2018 发表于 2025-4-30 14:52 | 显示全部楼层
通过上述代码和连接方式,即可用M051单片机稳定驱动74HC595控制数码管。如需进一步优化(如中断驱动扫描),可结合定时器模块实现。
643757107 发表于 2025-4-30 21:03 | 显示全部楼层
非常不错,改天我买几个试试看。
四十四次日落 发表于 2025-8-28 13:11 | 显示全部楼层
新唐 M051 驱动 74HC595:硬件上,将 M051 的 GPIO 分别接 74HC595 的 SER(数据)、SCK(移位时钟)、RCK(锁存时钟)。软件中,先初始化对应 GPIO 为输出,然后按位发送数据,每发一位触发 SCK,全部发送后触发 RCK 锁存,实现串转并输出,可级联扩展更多 IO。
一点点晚风 发表于 2025-9-16 16:35 | 显示全部楼层
新唐 M051 驱动 74HC595:连接 SPI 或 GPIO 模拟时序,MCU 的 SCK 接 595 的 SHCP,MOSI 接 DS,另用一 GPIO 接 STCP。初始化对应引脚为输出,发送数据时,先移位写入(SHCP 脉冲),再锁存(STCP 脉冲)。注意电平匹配,可加上拉电阻,按数据手册时序控制,实现串转并输出。
 楼主| 小灵通2018 发表于 2025-9-16 17:28 | 显示全部楼层
最重要的是搞清楚这个芯片的使用规则。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

158

主题

1732

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部