【Proteus仿真】【Arduino单片机】简易计算器设计


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使用PCF8574、LCD1602液晶、4*4矩阵键盘等。
主要功能:
系统运行后,操作矩阵按键可实现简单四则运算。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/

#include <Keypad.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

long x,time,timex,a,b,c;
int menu;/*定义变量*/

LiquidCrystal_I2C lcd(0x27,16,2);/*定义LCD地址*/ 
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = 
{
  {'1','2','3','+'},
  {'4','5','6','-'},
  {'7','8','9','*'},
  {'C','0','=','/'}
};
byte rowPins[ROWS] = {9,8,7,6}; 
byte colPins[COLS] = {5,4,3,2}; /*初始化4*4小键盘*/
 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );/*定义4*4小键盘*/
void cleanxy(int x,int y)
{
  for(int i=0;i<x;i++)
  {
    lcd.setCursor(i,y);
    lcd.print(" ");
  }
}
void clean()
{
    b=0;
    a=0;
    c=0;
    Serial.println("clean");
    x=0;
    lcd.setCursor(0,0);
    lcd.print("                ");
    lcd.setCursor(0,1);
    lcd.print("                ");  
}
void compute(char key)
{
  if(key>='0'&&key<='9')
  {
    a=a*10+(key-'0');
    Serial.println(a);
    lcd.setCursor(0,0);
    lcd.print(a);
  }
  if(key=='+')
  {
    b=a;
    a=0;
    Serial.println("+");
    x=1;
    lcd.setCursor(12,0);
    lcd.print("+");
    cleanxy(11,0);
  }
  if(key=='-')
  {
    b=a;
    a=0;
    Serial.println("-");
    x=2;
    lcd.setCursor(12,0);
    lcd.print("-");
    cleanxy(11,0);
  }
  if(key=='*')
  {
    b=a;
    a=0;
    Serial.println("*");
    x=3;
    lcd.setCursor(12,0);
    lcd.print("*");
    cleanxy(11,0);
  }
  if(key=='/')
  {
    b=a;
    a=0;
    Serial.println("/");
    x=4;
    lcd.setCursor(12,0);
    lcd.print("/");
    cleanxy(11,0);
  }
  if(key=='=')
  {
    cleanxy(16,0);
    Serial.println("=");
    lcd.setCursor(0,1);
    lcd.print("=");
    if(x==1)
    {
      Serial.println(a+b);
      lcd.setCursor(1,1);
      lcd.print(a+b);
    }
    if(x==2)
    {
      Serial.println(b-a);
      lcd.setCursor(1,1);
      lcd.print(b-a);
    }
    if(x==3)
    {
      Serial.println(a*b);
      lcd.setCursor(1,1);
      lcd.print(a*b);
    }
    if(x==4)
    {
      Serial.println(b/a);
      lcd.setCursor(1,1);
      lcd.print(b/a);
    }
    a=0;
    b=0;
    x=0;
  }
  if(key=='C')
  {
      clean();
      lcd.setCursor(0,0);
      lcd.print("clean");
      delay(1000);
      clean();
  }
}
void compute2(char key)
{
  if(key>='0'&&key<='9')
  {
    a=a*10+(key-'0');
    Serial.println(a);
    lcd.setCursor(0,0);
    lcd.print(a);
  }
  if(key=='+')
  {
    b=a;
    a=0;
    Serial.println("^");
    x=1;
    lcd.setCursor(12,0);
    lcd.print("^");
    cleanxy(11,0);
  }
  if(key=='-')
  {
    b=a;
    a=0;
    Serial.println("sqrt");
    x=2;
    lcd.setCursor(0,0);
    lcd.print("stop input please");
    delay(2000);
    cleanxy(12,0);
    lcd.setCursor(12,0);
    lcd.print("sqrt");
  }
  if(key=='*')
  {
    b=a;
    a=0;
    Serial.println("sin");
    x=3;
    lcd.setCursor(0,0);
    lcd.print("stop input please");
    delay(2000);
    cleanxy(13,0);
    lcd.setCursor(13,0);
    lcd.print("sin");
  }
  if(key=='/')
  {
    b=a;
    a=0;
    Serial.println("tan");
    x=4;
    lcd.setCursor(0,0);
    lcd.print("stop input please");
    delay(2000);
    cleanxy(13,0);
    lcd.setCursor(13,0);
    lcd.print("tan");
  }
  if(key=='=')
  {
    cleanxy(16,0);
    Serial.println("=");
    lcd.setCursor(0,1);
    lcd.print("=");
    if(x==1)
    {
      Serial.println(pow(b,a));
      lcd.setCursor(1,1);
      lcd.print(pow(b,a));
    }
    if(x==2)
    {
      double sum;
      sum=sqrt(b);
      Serial.println(sum);
      lcd.setCursor(1,1);
      lcd.print(sum);
    }
    if(x==3)
    {
      Serial.println(sin(b));
      lcd.setCursor(1,1);
      lcd.print(sin(b));
    }
    if(x==4)
    {
      Serial.println(tan(b));
      lcd.setCursor(1,1);
      lcd.print(tan(b));
    }
    a=0;
    b=0;
    x=0;
  }
  if(key=='C')
  {
      clean();
      lcd.setCursor(0,0);
      lcd.print("clean");
      delay(1000);
      clean();
  }
}



三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Proteus是一种强大的电子电路仿真软件,可用于电子电路的设计与验证。在Proteus中使用51单片机进行计算器仿真时,我们可以通过以下步骤来实现。 首先,我们需要创建一个新的Proteus项目,并在项目中添加一个51单片机器件。然后,我们可以使用Proteus提供的元件库中的电子元器件来构建计算器的电路。例如,我们可以使用LED显示器、按钮开关和蜂鸣器等来实现计算器的基本功能。 接下来,我们需要编写51单片机的程序代码。在Proteus中,编写51单片机的程序代码可以使用类C语言编程语言来实现。我们可以使用Keil C51等集成开发环境编写代码,并导入到Proteus项目中。 在编写代码时,需要考虑计算器的功能和操作。我们可以实现基本的加减乘除等运算功能,并通过按钮开关来模拟用户输入。例如,当用户按下数字按钮时,相应的数值将被存储到寄存器中;当用户按下运算按钮时,相应的运算将被执行,并将结果显示在LED显示器上。 完成代码编写后,我们可以在Proteus中进行仿真。在仿真过程中,可以通过模拟输入按钮开关的状态来模拟用户的操作。通过观察仿真结果,我们可以验证计算器的功能和正确性。 总之,通过Proteus仿真51单片机计算器,我们可以实现计算器的功能和操作的验证。这种仿真方法节约了成本和时间,并且可以帮助我们更好地理解和调试电子电路设计

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值