普中51单片机实现流水灯、数码管和 点阵的同时显示的C语言代码
时间: 2024-05-06 12:15:47 浏览: 121
以下是普中51单片机实现流水灯、数码管和点阵的同时显示的C语言代码:
```
#include <reg51.h>
// 定义数码管显示的数据
unsigned char code ledChar[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98 };
// 定义点阵显示的数据
unsigned char code ledMatrix[] = {
0x00, 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x00, 0x00, // 显示字母A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x00, // 显示字母B
// 其他字母的点阵数据
};
// 定义流水灯的引脚
sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit led5 = P1^4;
sbit led6 = P1^5;
sbit led7 = P1^6;
sbit led8 = P1^7;
// 定义数码管的引脚
sbit dig1 = P2^3;
sbit dig2 = P2^2;
sbit dig3 = P2^1;
sbit dig4 = P2^0;
// 数码管位选
void selectDigit(unsigned char digit) {
dig1 = 1;
dig2 = 1;
dig3 = 1;
dig4 = 1;
switch(digit) {
case 1: dig1 = 0; break;
case 2: dig2 = 0; break;
case 3: dig3 = 0; break;
case 4: dig4 = 0; break;
}
}
// 数码管显示
void displayLed(unsigned char num) {
P0 = ledChar[num];
}
// 点阵显示
void displayMatrix(unsigned char num) {
unsigned char i;
for(i = 0; i < 8; i++) {
P0 = ledMatrix[num * 8 + i];
delay(1);
}
}
// 延时函数
void delay(unsigned int time) {
unsigned int i, j;
for(i = 0; i < time; i++)
for(j = 0; j < 125; j++);
}
// 主函数
void main() {
unsigned char i = 0;
while(1) {
// 流水灯
led1 = 0;
delay(100);
led1 = 1;
led2 = 0;
delay(100);
led2 = 1;
// 其他灯的流水灯
// 数码管显示
selectDigit(1);
displayLed(i % 10);
delay(5);
selectDigit(2);
displayLed(i / 10 % 10);
delay(5);
selectDigit(3);
displayLed(i / 100 % 10);
delay(5);
selectDigit(4);
displayLed(i / 1000 % 10);
delay(5);
// 点阵显示
displayMatrix(i % 26);
delay(100);
i++;
}
}
```
需要注意的是,这只是一个简单的示例代码,具体实现还需要根据硬件设计进行修改。另外,点阵的数据只给出了字母A和B的显示数据,如果需要显示其他字符,需要自行添加数据。
阅读全文