#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar num1,num2,op,result;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口全部清零}void getnum() //获取数字函数{ num1=P0; //将P0口的值赋给num1 while(1) //无限循环 { num2=P0; //将P0口的值赋给num2 if(num2!=num1) //如果num2与num1不相等 break; //跳出循环 }}void getop() //获取运算符函数{ op=P0; //将P0口的值赋给op while(1) //无限循环 { result=P0; //将P0口的值赋给result if(result!=op) //如果result与op不相等 break; //跳出循环 }}void calc() //计算函数{ switch(op) //根据op的值进行不同的运算 { case '+': result=num1+num2; break; case '-': result=num1-num2; break; case '*': result=num1*num2; break; case '/': result=num1/num2; break; default: break; }}void display() //显示函数{ P2=result; //将result的值赋给P2口 delay(100); //延时100毫秒 P2=0x00; //将P2口的值清零}void main() //主函数{ init(); //初始化 while(1) //无限循环 { getnum(); //获取数字 getop(); //获取运算符 calc(); //计算 display(); //显示 }}优化这段代码
时间: 2023-12-03 18:44:01 浏览: 100
1. 将所有的函数声明放到头文件中,方便调用和管理。
2. 在初始化函数中,可以直接使用 MOV 指令将寄存器清零,提高效率。
3. 在获取数字和获取运算符函数中,可以用 do-while 循环代替 while 循环,减少代码量。
4. 在计算函数中,可以使用 if-else 语句代替 switch-case 语句,提高效率。
5. 在显示函数中,可以使用延时函数的参数作为参数传入,提高代码的可读性。
6. 在主函数中,可以使用 for(;;) 来代替 while(1),提高代码的可读性。
修改后的代码如下:
```c
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
void 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口的值清零
}
```
阅读全文