
用的是英特尔的80/87c52
使用数组和函数调用的方式,完成如下花样灯设计
1.没有按键按下时,8个led灯交叉亮灭(01010101---10101010)
2.按键s1按下时,led灯从左往右,从右往左点亮一遍
3.按键s2按下时,led左循环三次
4.按键s3按下时,led灯由中间两个灯开始依次向两边显示,再从两边向中间依次点亮两个灯

该回答引用自GPT-3.5,由博主GISer Liu编写:
首先,你可以使用 Keil C51 编写这个程序。下面是一个基本的程序框架,你可以根据需求进行修改和完善。
cCopy code
#include <reg52.h>
sbit S1 = P1^0; // 定义按键 S1
sbit S2 = P1^1; // 定义按键 S2
sbit S3 = P1^2; // 定义按键 S3
sbit LED = P2; // 定义 LED 灯端口
void delay(unsigned int i) {
while (i--);
}
// 交叉灯
void cross_led() {
unsigned char i, led_data;
for (i = 0; i < 8; i++) {
led_data = 0x55 << i | 0xAA >> i;
LED = led_data;
delay(10000);
}
}
// 从左往右,从右往左
void left_right_left() {
unsigned char i;
for (i = 0; i < 8; i++) {
LED = 1 << i;
delay(10000);
}
for (i = 6; i > 0; i--) {
LED = 1 << i;
delay(10000);
}
}
// 左循环三次
void left_cycle() {
unsigned char i, j;
for (j = 0; j < 3; j++) {
for (i = 0; i < 8; i++) {
LED = 1 << i;
delay(10000);
}
}
}
// 从中间向两边
void middle_to_side() {
unsigned char i, led_data;
led_data = 0x06;
for (i = 0; i < 3; i++) {
LED = led_data << i;
delay(10000);
}
for (i = 1; i < 4; i++) {
LED = led_data >> i;
delay(10000);
}
}
void main() {
while (1) {
if (!S1) {
// S1 按下,从左往右,从右往左点亮一遍
left_right_left();
} else if (!S2) {
// S2 按下,左循环三次
left_cycle();
} else if (!S3) {
// S3 按下,从中间向两边
middle_to_side();
} else {
// 没有按键按下,交叉亮灭
cross_led();
}
}
}
以上是一个基本的程序框架,实现了你描述的四种功能。你可以根据具体需求进行修改和扩展。
如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订
