#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 数组的编码。

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

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