基于51单片机编程让74HC573驱动8*8点阵显示“月”
时间: 2023-12-22 07:05:52 浏览: 39
假设你已经将8*8点阵的行列分别接到了P0口和P2口,并且连接了一个74HC573锁存器用于控制点阵显示的开关。
以下是基于51单片机的程序:
```c
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LATCH=P3^4; //锁存器锁存引脚
uchar code table[]={
0x00,0x3C,0x42,0x81,0x81,0x42,0x3C,0x00, //月字码表
/* 0x00: 空白,0x3C: 00111100, 0x42: 01000010, 0x81: 10000001 */
};
void writeByte(uchar dat){
uchar i;
for(i=0;i<8;i++){
P0=dat&0x01; //先将最低位输出到P0口
dat>>=1; //将数据右移一位,准备输出下一位
P2=(P2&0xFE)|0x01; //将P2口第0位(即74HC573的SER引脚)设为1,将数据输入74HC573
P2=P2<<1; //将P2口左移一位,准备输出下一位
}
}
void main(){
uchar i;
while(1){
for(i=0;i<8;i++){
LATCH=0; //锁存器使能
writeByte(table[i]); //输出点阵每一列的数据
LATCH=1; //锁存器禁能
P0=0xFF; //清空P0口,避免显示上一次的残留
delay(1); //延时一段时间,让人眼可以看清每一列的显示
}
}
}
void delay(uint z){
uint x,y;
for(x=z;x>0;x--){
for(y=110;y>0;y--);
}
}
```
这段程序实现了一个简单的点阵显示效果,每隔一段时间(通过`delay`函数模拟)刷新一次点阵,显示出“月”字。其中,`writeByte`函数用于将一列数据输出到点阵上,而`main`函数则不断循环,输出每一列的数据。需要注意的是,由于点阵是共阴极的,所以需要将数据取反后再输出。