用51单片机数码管g段做显示,写一个流水灯程序,一共八个数码管
时间: 2024-02-05 09:14:12 浏览: 94
好的,以下是使用51单片机的C语言代码:
```c
#include <reg52.h> //头文件
#define uint unsigned int
#define uchar unsigned char
// 数码管段码定义
uchar code smgduan[17] = { // 0~F
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f,
0x77, 0x7c, 0x39, 0x5e, 0x79,
0x71, 0x00 // 空白
};
// 数码管位码定义
uchar code smgwei[8] = { // 8位数码管的8个位
0xfe, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xbf, 0x7f
};
void delay(uint i) { // 延时函数
while(i--);
}
void main() {
uchar i, j;
while(1) {
for(i = 0; i < 8; i++) { // i 表示位索引
for(j = 0; j < 16; j++) { // j 表示段索引
P0 = smgduan[j]; // 显示第 j 段
P2 = smgwei[i]; // 显示第 i 位
delay(1000); // 延时一段时间
}
}
}
}
```
该程序通过控制 P0 和 P2 的输出,来控制数码管的显示。其中,smgduan 数组存放了每个数字对应的数码管段码,smgwei 数组存放了每个数码管的位码。程序中使用两层循环控制流水灯的效果,第一层循环表示位的索引,第二层循环表示段的索引。具体实现的效果是每隔一段时间,依次点亮所有数码管的每个段。
阅读全文