整数计算器
c51单片机编程、C语言、proteus仿真图
1、加减乘除运算
2、整数运算,不要求小数
3、要求用LCD1602显示
4、使用等号或第二个运算符号作为结果计数指令符号。
5、运算支持混合运算,考虑加减乘除的计算优先级
例如输入2+4*5结果为22不能是30,
#include <reg52.h>
#include <stdio.h>
// LCD1602相关定义
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_DATA P0
// 函数声明
void LCD_Init();
void LCD_WriteCommand(unsigned char command);
void LCD_WriteData(unsigned char data);
void LCD_WriteString(char *string);
void LCD_Clear();
void LCD_SetCursor(unsigned char row, unsigned char col);
// 整数计算器相关定义
#define MAX_EXPRESSION_LENGTH 20
// 函数声明
void CalculateExpression();
// 主函数
void main()
{
// 初始化LCD1602
LCD_Init();
// 显示欢迎信息
LCD_Clear();
LCD_SetCursor(0, 0);
LCD_WriteString("Integer Calculator");
LCD_SetCursor(1, 0);
LCD_WriteString("Enter expression:");
// 进入循环,等待用户输入表达式
while (1)
{
// 在这里读取用户输入的表达式并进行计算
CalculateExpression();
}
}
// LCD1602初始化函数
void LCD_Init()
{
// 初始化LCD1602
LCD_WriteCommand(0x38); // 设置16x2显示,5x7点阵,8位数据总线
LCD_WriteCommand(0x0C); // 开显示,不显示光标
LCD_WriteCommand(0x06); // 光标右移,不移动显示
LCD_WriteCommand(0x01); // 清屏
}
// 向LCD写入命令
void LCD_WriteCommand(unsigned char command)
{
LCD_RS = 0; // 设置为命令模式
LCD_RW = 0; // 设置为写入模式
LCD_DATA = command;
LCD_EN = 1;
LCD_EN = 0;
// 延时一段时间,确保命令被执行
// 这里可以根据实际情况调整延时时间
for (unsigned int i = 0; i < 1000; i++);
}
// 向LCD写入数据
void LCD_WriteData(unsigned char data)
{
LCD_RS = 1; // 设置为数据模式
LCD_RW = 0; // 设置为写入模式
LCD_DATA = data;
LCD_EN = 1;
LCD_EN = 0;
// 延时一段时间,确保数据被写入
// 这里可以根据实际情况调整延时时间
for (unsigned int i = 0; i < 1000; i++);
}
// 向LCD写入字符串
void LCD_WriteString(char *string)
{
while (*string)
{
LCD_WriteData(*string++);
}
}
// 清屏
void LCD_Clear()
{
LCD_WriteCommand(0x01);
}
// 设置光标位置
void LCD_SetCursor(unsigned char row, unsigned char col)
{
unsigned char address;
if (row == 0)
{
address = 0x80 + col;
}
else
{
address = 0xC0 + col;
}
LCD_WriteCommand(address);
}
// 计算表达式并显示结果
void CalculateExpression()
{
char expression[MAX_EXPRESSION_LENGTH];
char result[10];
int num1, num2, answer;
char operator;
// 读取用户输入的表达式
// 这里可以根据实际情况修改获取用户输入的方法
gets(expression);
// 解析表达式
sscanf(expression, "%d %c %d", &num1, &operator, &num2);
// 根据运算符计算结果
switch (operator)
{
case '+':
answer = num1 + num2;
break;
case '-':
answer = num1 - num2;
break;
case '*':
answer = num1 * num2;
break;
case '/':
answer = num1 / num2;
break;
default:
LCD_Clear();
LCD_SetCursor(1, 0);
LCD_WriteString("Invalid operator");
return;
}
// 将结果转换为字符串
sprintf(result, "%d", answer);
// 显示结果
LCD_Clear();
LCD_SetCursor(1, 0);
LCD_WriteString(result);
}
这个示例代码使用了LCD1602进行显示,你需要根据自己的硬件连接情况进行相应的调整。