本项目为基于51单片机开发的一款串口计算器程序,用户可通过串口输入数学表达式,实现基本运算功能。适合于嵌入式系统中的计算需求。
#include
#include
unsigned char tmp;
unsigned char data1 = 0;
unsigned int num1 = 0, num2 = 0, num3 = 0, fu = 0;
int q[100] = {0};
int printf_flag = 0;
int a = 0;
int c = 0;
void send_char(unsigned char txd);
void send(unsigned int u);
void main() {
// EA = 1; //总开关
// ES = 1; //IE寄存器 通信开关
SCON = 0x50; // 设定串行口工作方式,工作模式为1
TMOD = 0x20; // 定时器1配置为8位自动重载模式,用于波特率生成
TH1 = 0xFD; // 波特率为9600
TL1 = 0xFD;
PCON = 0x00; // 不进行波特率倍增
TR1 = 1; // 启动定时器1
while (1) {
if (RI == 1) { // 检查是否有数据到来
RI = 0;
data1 = SBUF;
if ((data1 >= 0) && (data1 <= 9)) {
num1 = 10 * num1 + (data1 - 0);
} else if (data1 == + || data1 == - || data1 == * || data1 == /) {
fu = data1;
num2 = num1;
num1 = 0;
} else if ((data1 == =) && (fu == +)) { // 等于号判断加法
num3 = num2 + num1;
printf_flag = 1;
} else if ((data1 == =) && (fu == -)) {
num3 = num2 - num1;
printf_flag = 1;
} else if ((data1 == =) && (fu == *)) { // 等于号判断乘法
num3 = num2 * num1;
printf_flag = 1;
} else if ((data1 == =) && (fu == /)) {
num3 = num2 / num1;
printf_flag = 1;
}
if (printf_flag == 1) { // 发送结果
send(num3);
num1 = 0;
num2 = 0;
num3 = 0;
// fu=0;
data1 = 0;
printf_flag = 0;
}
}
}
}