基于51单片机的74hc573+74hc138实现8位数码管动态显示代码
时间: 2024-05-01 17:22:54 浏览: 171
下面是基于51单片机的74hc573+74hc138实现8位数码管动态显示的代码:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 数码管位选控制
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
// 数码管段选控制
sbit A = P1^0;
sbit B = P1^1;
sbit C = P1^2;
sbit D = P1^3;
sbit E = P1^4;
sbit F = P1^5;
sbit G = P1^6;
sbit DP = P1^7;
// 数据锁存控制
sbit HC573_OE = P3^4;
sbit HC573_LE = P3^5;
sbit HC573_CLK = P3^6;
sbit HC573_DAT = P3^7;
uchar code table[] = { // 数码管显示字符对应的编码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
void delay(uint t)
{
while(t--);
}
void HC573_Write(uchar dat)
{
uchar i;
HC573_OE = 1;
for(i = 0; i < 8; i++)
{
HC573_DAT = (dat >> i) & 0x01;
HC573_CLK = 0;
delay(1);
HC573_CLK = 1;
}
HC573_LE = 0;
delay(1);
HC573_LE = 1;
HC573_OE = 0;
}
void Display_Digit(uchar digit, uchar num)
{
uchar i;
for(i = 0; i < 8; i++)
{
if(i == digit)
HC573_Write(table[num]);
else
HC573_Write(0xff);
delay(100);
}
}
void main()
{
uchar i, j;
while(1)
{
for(i = 0; i < 8; i++)
{
LSA = i & 0x01;
LSB = (i >> 1) & 0x01;
LSC = (i >> 2) & 0x01;
for(j = 0; j < 10; j++)
{
Display_Digit(i, j);
}
}
}
}
```
该代码实现了一个简单的数码管动态显示效果,使用了74hc573作为数据锁存器,74hc138作为位选控制芯片。其中,函数`HC573_Write`用于将数据写入74hc573,函数`Display_Digit`用于在指定位置显示指定数字。在`main`函数中,不断循环,依次控制位选,然后在每个位置上循环显示数字0~9。需要注意的是,数码管的位选控制和段选控制引脚需要根据具体的硬件连接进行修改。
阅读全文