利用单片机最小系统控制显示阵列、显示学生姓名缪应虹的程序
时间: 2023-06-19 07:08:40 浏览: 50
这里提供一个基于51单片机的程序,可以控制8x8 LED点阵显示学生姓名“缪应虹”。
```c
#include <reg51.h>
// 定义端口
sbit D1 = P0^0;
sbit D2 = P0^1;
sbit D3 = P0^2;
sbit D4 = P0^3;
sbit D5 = P0^4;
sbit D6 = P0^5;
sbit D7 = P0^6;
sbit D8 = P0^7;
sbit WEI1 = P2^0;
sbit WEI2 = P2^1;
sbit WEI3 = P2^2;
sbit WEI4 = P2^3;
sbit DUAN = P2^7;
// 定义姓名缩写的点阵数组
unsigned char code name[] = {
0x00,0x7C,0x44,0x7C,0x44,0x7C,0x00,0x00, // 缪
0x00,0x3E,0x22,0x7F,0x22,0x22,0x00,0x00, // 应
0x00,0x7F,0x40,0x40,0x40,0x7F,0x00,0x00, // 虹
};
void main() {
unsigned char i, j;
while (1) {
for (i = 0; i < 8; i++) { // 控制位选
switch (i) {
case 0:
WEI1 = 0;
WEI2 = 1;
WEI3 = 1;
WEI4 = 1;
break;
case 1:
WEI1 = 1;
WEI2 = 0;
WEI3 = 1;
WEI4 = 1;
break;
case 2:
WEI1 = 1;
WEI2 = 1;
WEI3 = 0;
WEI4 = 1;
break;
case 3:
WEI1 = 1;
WEI2 = 1;
WEI3 = 1;
WEI4 = 0;
break;
}
for (j = 0; j < 8; j++) { // 控制段选
DUAN = 0;
switch (j) {
case 0:
DUAN = 0x80;
break;
case 1:
DUAN = 0x40;
break;
case 2:
DUAN = 0x20;
break;
case 3:
DUAN = 0x10;
break;
case 4:
DUAN = 0x08;
break;
case 5:
DUAN = 0x04;
break;
case 6:
DUAN = 0x02;
break;
case 7:
DUAN = 0x01;
break;
}
if (name[i * 8 + j] == 0) { // 控制点阵
D1 = D2 = D3 = D4 = D5 = D6 = D7 = D8 = 0;
} else {
if (name[i * 8 + j] & 0x80) D1 = 1;
if (name[i * 8 + j] & 0x40) D2 = 1;
if (name[i * 8 + j] & 0x20) D3 = 1;
if (name[i * 8 + j] & 0x10) D4 = 1;
if (name[i * 8 + j] & 0x08) D5 = 1;
if (name[i * 8 + j] & 0x04) D6 = 1;
if (name[i * 8 + j] & 0x02) D7 = 1;
if (name[i * 8 + j] & 0x01) D8 = 1;
}
DUAN = 1; // 段选输出
D1 = D2 = D3 = D4 = D5 = D6 = D7 = D8 = 0; // 关闭点阵
}
}
}
}
```
这个程序利用了51单片机的8个IO口控制了8x8 LED点阵的位选和段选,通过控制点阵的亮灭来显示姓名缩写。程序中的`name`数组存储了“缪应虹”三个字的点阵信息,通过循环遍历位选和段选来逐个点亮LED点阵,从而显示出姓名缩写。