51单片机74HC595数码管显示
时间: 2023-09-18 11:08:11 浏览: 146
用51单片机的3个IO口与2片74HC595构成的8位数码管显示电路,前5位固定、后3位可递增跳变显示
51单片机控制74HC595驱动数码管的显示,一般需要以下步骤:
1. 定义数码管的连接引脚,如数码管的A-G引脚和DP引脚的连接引脚,以及74HC595的串行数据引脚(DS)、时钟引脚(SHCP)和输出使能引脚(STCP)。
2. 定义数码管显示的字符集,可以将数字0~9、字母A~F和DP转换为相应的二进制码,存储在一个数组中。
3. 编写移位函数,将待显示的数字依次存入74HC595中。
4. 在主函数中,通过调用移位函数,将要显示的数字存入74HC595中,然后通过STCP引脚的高电平脉冲,将数据输出到数码管上。
以下是一个简单的51单片机控制74HC595驱动数码管显示的代码示例:
```c
#include <reg51.h>
sbit DS = P2^0; //74HC595的串行数据引脚
sbit SHCP = P2^1; //74HC595的时钟引脚
sbit STCP = P2^2; //74HC595的输出使能引脚
unsigned char code num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管字符集
void delay(unsigned int t) //延时函数
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 125; j++);
}
void shift(unsigned char dat) //移位函数
{
unsigned char i;
SHCP = 0;
for (i = 0; i < 8; i++)
{
DS = dat & 0x80;
dat <<= 1;
SHCP = 1;
SHCP = 0;
}
STCP = 1;
STCP = 0;
}
void main()
{
unsigned char i;
while (1)
{
for (i = 0; i < 10; i++)
{
shift(num[i]);
delay(100);
}
}
}
```
在上述代码中,我们定义了一个数码管字符集数组num[],通过移位函数shift()将待显示的数字存入74HC595中,最后通过STCP引脚的高电平脉冲,将数据输出到数码管上。在主函数中,我们通过循环调用移位函数,将数字0~9显示在数码管上。
阅读全文