51单片机总线扩展用74hc573写控制4位共阴数码管的代码
时间: 2024-02-15 12:05:29 浏览: 175
基于51单片机的四位数字频率计数码管显示设计
5星 · 资源好评率100%
下面是基于51单片机和74hc573芯片的控制4位共阴极数码管的代码,同时使用总线扩展方式:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
// 数码管段码表
uchar code segTable[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
// 数码管位码表
uchar code bitTable[]={0x01,0x02,0x04,0x08};
sbit LATCH=P3^5; //74HC573锁存脚
// 数码管刷新延时函数
void delay(uint t)
{
while(t--);
}
// 总线写函数
void write_data(uchar dat)
{
uchar i;
LATCH = 0; // 拉低锁存脚
for(i=0;i<4;i++)
{
P0 = dat; // 先输出数据
P2 &= 0xf0; // 位码清零
P2 |= bitTable[i]; // 设置位码
_nop_(); // 延时一定时间
LATCH = 1; // 拉高锁存脚
_nop_(); // 延时一定时间
LATCH = 0; // 拉低锁存脚
}
}
// 数码管显示函数
void display(uchar num)
{
uchar i;
for(i=0;i<4;i++)
{
write_data(segTable[num%10]); // 设置段码
delay(10); // 延时一定时间
write_data(0x00); // 段码清零
num /= 10;
}
}
// 主函数
void main()
{
uchar i;
while(1)
{
for(i=0;i<100;i++)
{
display(i);
}
}
}
```
此代码中,使用了74hc573芯片来控制4位共阴极数码管的显示,同时使用总线扩展方式,其中`write_data()`函数用于总线写操作,`display()`函数用于数码管的显示,`segTable[]`数组为数码管的段码表,`bitTable[]`数组为数码管的位码表。在主函数中,通过循环调用`display()`函数来实现数码管的显示。注意,在进行总线写操作时,需要将74hc573的锁存脚拉低,设置完位码后再拉高锁存脚,以保证数据的正确传输。
阅读全文