51单片机简易计算器代码
时间: 2024-12-06 07:15:54 浏览: 47
51单片机实现简易计算器功能
以下是一个基于51单片机的简易计算器代码示例。这个计算器可以执行基本的加、减、乘、除运算。
```c
#include <reg51.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS = P2^6; // 寄存器选择信号
sbit RW = P2^5; // 读写信号
sbit EN = P2^7; // 使能信号
void DelayMs(uint ms) {
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
void LCD_Command(uchar cmd) {
P0 = cmd;
RS = 0;
RW = 0;
EN = 1;
DelayMs(2);
EN = 0;
}
void LCD_Data(uchar dat) {
P0 = dat;
RS = 1;
RW = 0;
EN = 1;
DelayMs(2);
EN = 0;
}
void LCD_Init() {
LCD_Command(0x38); // 8位数据总线,2行显示,5x7点阵
LCD_Command(0x0C); // 显示开,光标关,闪烁关
LCD_Command(0x06); // 写入新数据后光标自动加1
LCD_Command(0x01); // 清屏
DelayMs(2);
}
void LCD_Display(char *str) {
while(*str) {
LCD_Data(*str++);
}
}
void main() {
char buffer[16];
int num1, num2, result;
char operator;
LCD_Init();
while(1) {
LCD_Command(0x80); // 设置光标位置到第一行第一列
LCD_Display("Enter num1:");
LCD_Command(0xC0); // 设置光标位置到第二行第一列
// 输入第一个数字
scanf("%d", &num1);
sprintf(buffer, "%d", num1);
LCD_Display(buffer);
// 输入运算符
LCD_Command(0xC0);
LCD_Display("Operator:");
operator = getchar();
// 输入第二个数字
LCD_Command(0xC0);
LCD_Display("Enter num2:");
scanf("%d", &num2);
sprintf(buffer, "%d", num2);
LCD_Display(buffer);
// 计算结果
switch(operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if(num2 != 0)
result = num1 / num2;
else {
LCD_Command(0xC0);
LCD_Display("Error: Div by 0");
continue;
}
break;
default:
LCD_Command(0xC0);
LCD_Display("Invalid Operator");
continue;
}
// 显示结果
LCD_Command(0xC0);
sprintf(buffer, "Result: %d", result);
LCD_Display(buffer);
}
}
```
这段代码实现了一个简单的计算器功能:
1. 使用LCD显示提示信息和结果。
2. 通过串口接收输入的数字和运算符。
3. 执行加、减、乘、除运算。
4. 显示计算结果。
请注意,这只是一个基本示例,实际应用中可能需要更复杂的输入处理和错误检查。此外,输入方式假设是通过串口接收数据,你可以根据实际情况修改为其他输入方式。
阅读全文