51单片机计算器加减乘除两位数在lcd中实现代码
时间: 2023-12-06 16:01:13 浏览: 112
51单片机是一种常用的微控制器,可以用来实现计算器的功能。下面是一个简单的在LCD中实现加减乘除两位数计算的代码示例:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
void delay(uint x){
uint i, j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void LCD_wcmd(uchar cmd){
LCD_RS = 0;
P0 = cmd;
delay(1);
LCD_EN = 1;
delay(5);
LCD_EN = 0;
}
void LCD_wdat(uchar dat){
LCD_RS = 1;
P0 = dat;
delay(1);
LCD_EN = 1;
delay(5);
LCD_EN = 0;
}
void initLCD(){
LCD_wcmd(0x38);
LCD_wcmd(0x0c);
LCD_wcmd(0x06);
LCD_wcmd(0x01);
}
void main(){
int num1, num2, result;
char op;
initLCD();
LCD_wdat('P');
LCD_wdat('l');
LCD_wdat('e');
LCD_wdat('a');
LCD_wdat('s');
LCD_wdat('e');
LCD_wdat(' ');
LCD_wdat('i');
LCD_wdat('n');
LCD_wdat('p');
LCD_wdat('u');
LCD_wdat('t');
LCD_wdat(' ');
LCD_wdat('t');
LCD_wdat('w');
LCD_wdat('o');
LCD_wdat(' ');
LCD_wdat('n');
LCD_wdat('u');
LCD_wdat('m');
LCD_wdat('b');
LCD_wdat('e');
LCD_wdat('r');
LCD_wdat('s');
LCD_wdat(':');
while(1){
while(1){
num1 = P0; //读取第一个数字
if(num1 >= 0 && num1 <= 99){
break;
}
LCD_wcmd(0x01); //清屏
LCD_wdat('I');
LCD_wdat('n');
LCD_wdat('v');
LCD_wdat('a');
LCD_wdat('l');
LCD_wdat('i');
LCD_wdat('d');
LCD_wdat(' ');
LCD_wdat('i');
LCD_wdat('n');
LCD_wdat('p');
LCD_wdat('u');
LCD_wdat('t');
LCD_wdat('!');
delay(1000);
LCD_wcmd(0x01);
LCD_wdat('P');
LCD_wdat('l');
LCD_wdat('e');
LCD_wdat('a');
LCD_wdat('s');
LCD_wdat('e');
LCD_wdat(' ');
LCD_wdat('i');
LCD_wdat('n');
LCD_wdat('p');
LCD_wdat('u');
LCD_wdat('t');
LCD_wdat(' ');
LCD_wdat('t');
LCD_wdat('w');
LCD_wdat('o');
LCD_wdat(' ');
LCD_wdat('n');
LCD_wdat('u');
LCD_wdat('m');
LCD_wdat('b');
LCD_wdat('e');
LCD_wdat('r');
LCD_wdat('s');
LCD_wdat(':');
}
while(1){
op = P0; //读取操作符
if(op == '+' || op == '-' || op == '*' || op == '/'){
break;
}
LCD_wcmd(0x01); //清屏
LCD_wdat('I');
LCD_wdat('n');
LCD_wdat('v');
LCD_wdat('a');
LCD_wdat('l');
LCD_wdat('i');
LCD_wdat('d');
LCD_wdat(' ');
LCD_wdat('o');
LCD_wdat('p');
LCD_wdat('e');
LCD_wdat('r');
LCD_wdat('a');
LCD_wdat('t');
LCD_wdat('o');
LCD_wdat('r');
LCD_wdat('!');
delay(1000);
LCD_wcmd(0x01);
LCD_wdat('P');
LCD_wdat('l');
LCD_wdat('e');
LCD_wdat('a');
LCD_wdat('s');
LCD_wdat('e');
LCD_wdat(' ');
LCD_wdat('i');
LCD_wdat('n');
LCD_wdat('p');
LCD_wdat('u');
LCD_wdat('t');
LCD_wdat(' ');
LCD_wdat('o');
LCD_wdat('p');
LCD_wdat('e');
LCD_wdat('r');
LCD_wdat('a');
LCD_wdat('t');
LCD_wdat('o');
LCD_wdat('r');
LCD_wdat(':');
}
while(1){
num2 = P0; //读取第二个数字
if(num1 >= 0 && num1 <= 99){
break;
}
LCD_wcmd(0x01); //清屏
LCD_wdat('I');
LCD_wdat('n');
LCD_wdat('v');
LCD_wdat('a');
LCD_wdat('l');
LCD_wdat('i');
LCD_wdat('d');
LCD_wdat(' ');
LCD_wdat('i');
LCD_wdat('n');
LCD_wdat('p');
LCD_wdat('u');
LCD_wdat('t');
LCD_wdat('!');
delay(1000);
LCD_wcmd(0x01);
LCD_wdat('P');
LCD_wdat('l');
LCD_wdat('e');
LCD_wdat('a');
LCD_wdat('s');
LCD_wdat('e');
LCD_wdat(' ');
LCD_wdat('i');
LCD_wdat('n');
LCD_wdat('p');
LCD_wdat('u');
LCD_wdat('t');
LCD_wdat(' ');
LCD_wdat('t');
LCD_wdat('w');
LCD_wdat('o');
LCD_wdat(' ');
LCD_wdat('n');
LCD_wdat('u');
LCD_wdat('m');
LCD_wdat('b');
LCD_wdat('e');
LCD_wdat('r');
LCD_wdat('s');
LCD_wdat(':');
}
LCD_wcmd(0x01); //清屏
switch(op){
case '+': result = num1 + num2; break;
case '-': result = num1 - num2; break;
case '*': result = num1 * num2; break;
case '/': result = num1 / num2; break;
}
LCD_wdat('R');
LCD_wdat('e');
LCD_wdat('s');
LCD_wdat('u');
LCD_wdat('l');
LCD_wdat('t');
LCD_wdat(':');
LCD_wdat(result/10+'0');
LCD_wdat(result%10+'0');
}
}
```
该代码中,我们使用了51单片机的GPIO口来模拟LCD屏幕的控制和数据输入,通过P0口读取用户输入的数字和操作符,然后进行相应的运算并在LCD上显示结果。这个示例实现了一个非常基础的计算器功能,可以帮助用户进行两位数的加减乘除运算。当然,这只是一个简单的示例,实际的计算器功能可能需要更多的代码和优化。