关于#单片机#的问题:整数计算器c51单片机编程、C语言、proteus仿真图1、加减乘除运算2、整数运算,不要求小数3、要求用LCD1602显示4、使用等号或第二个运算符号作为结果计数指令符号

整数计算器
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进行显示,你需要根据自己的硬件连接情况进行相应的调整。