51单片机74hc595驱动四位共阳数码管程序
以下是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;
}
}
}
程序思路:
- 定义74hc595的数据输入、时钟输入和存储器时钟输入引脚;
- 定义数码管0~9的编码数组;
- 编写发送一个字节到74hc595的函数;
- 编写显示一个数字的函数,先发送个位的编码,然后存储器时钟输入引脚拉低,然后再拉高,使数据存入寄存器,同时清除之前的数据;
- 在主函数中循环调用显示一个数字的函数,依次显示千位、百位、十位和个位,每次显示完毕后i加1,当i等于10000时,重置为0。
注意:
- 确保74hc595的输出引脚连接到数码管的共阳端,否则需要修改数码管的编码(共阴数码管的编码与共阳数码管相反);
- 确保74hc595的Vcc和GND引脚连接到正负电源,否则无法工作;
- 数码管的阴极共阳极需要根据实际情况修改代码中的NUM数组的编码
原文地址: http://www.cveoy.top/t/topic/hsX7 著作权归作者所有。请勿转载和采集!