打印
[DemoCode下载]

新唐M051单片机 驱动 74HC595 的详细指南

[复制链接]
1262|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、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连接

2. 74HC595与数码管连接
段选:Q0-Q7 → 数码管的a-dp段(需串联220Ω限流电阻)。

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


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

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

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

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

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

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

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 | 只看该作者
非常不错,改天我买几个试试看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

1700

帖子

4

粉丝