以下是51单片机74hc595驱动四位共阳数码管的程序:

#include <reg52.h>

sbit DS = P3^4; // 74hc595数据输入引脚
sbit SHCP = P3^5; // 74hc595时钟输入引脚
sbit STCP = P3^6; // 74hc595存储器时钟输入引脚

unsigned char code NUM[] = { // 数码管0~9的编码
    0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};

void hc595_send(unsigned char dat) { // 发送一个字节到74hc595
    unsigned char i;
    for (i = 0; i < 8; i++) {
        SHCP = 0;
        DS = dat & 0x80;
        dat <<= 1;
        SHCP = 1;
    }
}

void display(unsigned char n) { // 显示一个数字
    hc595_send(NUM[n]);
    STCP = 0;
    STCP = 1;
}

void main() {
    unsigned char i = 0;
    while (1) {
        display(i % 10);
        display((i / 10) % 10);
        display((i / 100) % 10);
        display((i / 1000) % 10);
        i++;
        if (i == 10000) {
            i = 0;
        }
    }
}

程序思路:

  1. 定义74hc595的数据输入、时钟输入和存储器时钟输入引脚;
  2. 定义数码管0~9的编码数组;
  3. 编写发送一个字节到74hc595的函数;
  4. 编写显示一个数字的函数,先发送个位的编码,然后存储器时钟输入引脚拉低,然后再拉高,使数据存入寄存器,同时清除之前的数据;
  5. 在主函数中循环调用显示一个数字的函数,依次显示千位、百位、十位和个位,每次显示完毕后i加1,当i等于10000时,重置为0。

注意:

  1. 确保74hc595的输出引脚连接到数码管的共阳端,否则需要修改数码管的编码(共阴数码管的编码与共阳数码管相反);
  2. 确保74hc595的Vcc和GND引脚连接到正负电源,否则无法工作;
  3. 数码管的阴极共阳极需要根据实际情况修改代码中的NUM数组的编码
51单片机74hc595驱动四位共阳数码管程序

原文地址: http://www.cveoy.top/t/topic/hsX7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录