优化这段代码#include<reg51.h> sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^2; unsigned char tab2[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; char i; void delay(unsigned int t) { while(t--); } void motor_forward() { for(i=0;i<8;i++) { P2=tab2[i]; delay(50000); } if(i==8) {i=0;} } void motor_reverse() { for(i=7;i>=0;i--) { P2=tab2[i]; delay(50000); } } void motor_stop() { P2=0x0f; } void scan() { if(key1==0) { motor_forward(); }else if(key2==0) { motor_reverse(); }else if(key3==0) { motor_stop(); } } void main() { while(1) { scan(); } }
时间: 2023-12-01 09:03:25 浏览: 267
这段代码可以进行如下优化:
1. 将头文件包含放在代码的最顶部,并添加注释说明头文件的作用。
2. 将全局变量 i 改为局部变量,这样可以减少对内存的占用。
3. 在 motor_forward() 和 motor_reverse() 中,使用 for 循环的时候,可以将循环条件提取出来,这样可以减少循环判断的次数。
4. 在 motor_forward() 和 motor_reverse() 中,可以将 delay() 函数的参数改为宏定义,这样可以提高代码的可读性。
5. 在 scan() 中,可以使用 switch-case 语句代替 if-else 语句,这样可以提高代码的可读性。
改进后的代码如下:
```c
#include <reg51.h> // 8051芯片头文件
#define DELAY_TIME 50000 // 延时时间
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2;
unsigned char tab2[] = {0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, 0x09};
void delay(unsigned int t) {
while (t--);
}
void motor_forward() {
char i;
for (i = 0; i < 8; i++) {
P2 = tab2[i];
delay(DELAY_TIME);
}
}
void motor_reverse() {
char i;
for (i = 7; i >= 0; i--) {
P2 = tab2[i];
delay(DELAY_TIME);
}
}
void motor_stop() {
P2 = 0x0f;
}
void scan() {
switch (P3) {
case 0xfe: // key1
motor_forward();
break;
case 0xfd: // key2
motor_reverse();
break;
case 0xfb: // key3
motor_stop();
break;
default:
break;
}
}
void main() {
while (1) {
scan();
}
}
```
阅读全文