#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(uint xms); //延时函数void init(); //初始化函数uchar getnum(); //获取数字函数uchar getop(); //获取运算符函数void calc(uchar num1, uchar num2, uchar op, uchar *result); //计算函数void display(uchar result, uint delay_time); //显示函数void main() //主函数{ init(); //初始化 uchar num1, num2, op, result; for(;;) //无限循环 { num1 = getnum(); //获取数字 op = getop(); //获取运算符 getnum(); //获取数字 calc(num1, num2, op, &result); //计算 display(result, 100); //显示 }}void delay(uint xms) //延时函数{ uint i,j; for(i=xms;i>0;i--) for(j=112;j>0;j--);}void init() //初始化函数{ P0=0x00; //P0口全部清零 P2=0x00; //P2口全部清零}uchar getnum() //获取数字函数{ uchar num1; do { num1=P0; //将P0口的值赋给num1 } while (num1 == P0); //如果num1与P0不相等,一直循环 return num1;}uchar getop() //获取运算符函数{ uchar op; do { op=P0; //将P0口的值赋给op } while (op == P0); //如果op与P0不相等,一直循环 return op;}void calc(uchar num1, uchar num2, uchar op, uchar *result) //计算函数{ if (op == '+') *result = num1 + num2; else if (op == '-') *result = num1 - num2; else if (op == '*') *result = num1 * num2; else if (op == '/') *result = num1 / num2; else *result = 0;}void display(uchar result, uint delay_time) //显示函数{ P2=result; //将result的值赋给P2口 delay(delay_time); //延时100毫秒 P2=0x00; //将P2口的值清零}优化这段代码
时间: 2023-12-03 22:44:04 浏览: 95
1. 使用宏定义替代常量,增加代码的可读性和可维护性。
```
#define DELAY_TIME 100
#define MAX_DELAY 112
```
2. 将函数中的局部变量定义放在函数开头,增加代码的可读性。
3. 使用位运算替代乘除法,提高代码执行效率。
```
void delay(uint xms) {
uint i,j;
for (i=xms; i>0; i--) {
for (j=MAX_DELAY; j>0; j--) { // 使用宏定义
// do nothing
}
}
}
```
4. 使用 switch 语句替代 if-else 语句,提高代码的可读性和可维护性。
```
void calc(uchar num1, uchar num2, uchar op, uchar *result) {
switch(op) {
case '+':
*result = num1 + num2;
break;
case '-':
*result = num1 - num2;
break;
case '*':
*result = num1 * num2;
break;
case '/':
*result = num1 / num2;
break;
default:
*result = 0;
break;
}
}
```
5. 将常量字符串和数字转换为 ASCII 码,提高代码的可读性和可维护性。
```
#define ADD '+'
#define SUB '-'
#define MUL '*'
#define DIV '/'
```
6. 将循环判断条件改为前置条件,提高代码的可读性。
```
uchar getnum() {
uchar num1 = P0;
while (num1 == P0); // 改为前置条件
return num1;
}
```
7. 将函数名和参数名改为有意义的名称,提高代码的可读性和可维护性。
```
void delay_ms(uint ms) {...}
void init_io(void) {...}
uchar get_number(void) {...}
uchar get_operator(void) {...}
void calculate(uchar num1, uchar num2, uchar op, uchar *result) {...}
void display_result(uchar result, uint delay_time) {...}
```
阅读全文