优化一下这个代码#include <reg52.h>#include <stdlib.h>#include <time.h>sbit LED1 = P1^0; //将P1.0定义为LED1sbit LED2 = P1^1; //将P1.1定义为LED2void main(){ unsigned char i; srand(time(NULL)); //初始化随机数生成器 while(1) { // 常规闪烁 LED1 = 0; //LED1亮 Delay(500); //延时500毫秒 LED1 = 1; //LED1灭 Delay(500); //延时500毫秒 // 呼吸灯 for(i=0; i<255; i++) { LED2 = i; //LED2亮度逐渐增加 Delay(5); } for(i=255; i>0; i--) { LED2 = i; //LED2亮度逐渐减小 Delay(5); } // 交替闪烁 LED1 = ~LED1; //LED1亮灭交替 LED2 = ~LED2; //LED2亮灭交替 Delay(500); //延时500毫秒 // 随机闪烁 LED1 = rand()%2; //随机设置LED1亮灭 LED2 = rand()%2; //随机设置LED2亮灭 Delay(500); //延时500毫秒 }}void Delay(unsigned int i){ unsigned int j; while(i--) { for(j=0; j<125; j++); }}
时间: 2024-02-06 12:03:26 浏览: 54
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码的优化点有:
1. 使用宏定义代替魔法数:将数字直接写在代码中是不好的习惯。可以使用宏定义来代替,更易读、更易维护。
2. 去掉无用头文件:代码中包含了reg52.h和stdlib.h两个头文件,但是并没有用到其中的函数和变量,可以去掉。
3. 将变量声明放在循环外:变量i在循环中被多次使用,可以将其声明在while循环之前,避免每次循环都重新分配空间。
4. 优化延时函数:延时函数中使用了双重循环,可以考虑使用定时器或者其他更高效的延时方式。
5. 优化随机数生成器:rand函数的产生的随机数不是真正的随机数,可以考虑使用更好的随机数生成器。
6. 添加注释:代码中缺少注释,可以添加注释来解释代码的作用和实现。
下面是优化后的代码:
```c
#include <reg52.h>
#define LED1 P1^0
#define LED2 P1^1
void Delay(unsigned int i);
void main() {
unsigned char i;
srand(time(NULL)); // 初始化随机数生成器
while(1) {
// 常规闪烁
LED1 = 0; // LED1亮
Delay(500); // 延时500毫秒
LED1 = 1; // LED1灭
Delay(500); // 延时500毫秒
// 呼吸灯
for(i=0; i<255; i++) {
LED2 = i; // LED2亮度逐渐增加
Delay(5);
}
for(i=255; i>0; i--) {
LED2 = i; // LED2亮度逐渐减小
Delay(5);
}
// 交替闪烁
LED1 = ~LED1; // LED1亮灭交替
LED2 = ~LED2; // LED2亮灭交替
Delay(500); // 延时500毫秒
// 随机闪烁
LED1 = rand()%2; // 随机设置LED1亮灭
LED2 = rand()%2; // 随机设置LED2亮灭
Delay(500); // 延时500毫秒
}
}
void Delay(unsigned int i) {
while(i--) {
TMOD &= 0xF0; // 设置定时器0为模式1
TMOD |= 0x01;
TH0 = 0xFC; // 定时器初值
TL0 = 0x66;
TR0 = 1; // 启动定时器
while(!TF0); // 等待定时器溢出
TR0 = 0; // 关闭定时器
TF0 = 0; // 清除标志位
}
}
```
阅读全文