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

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

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


二、软件设计

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

*/

#include 
#include  
#include 

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

【Proteus仿真】【Arduino单片机】简易计算器设计_第1张图片
【Proteus仿真】【Arduino单片机】简易计算器设计_第2张图片
【Proteus仿真】【Arduino单片机】简易计算器设计_第3张图片

联系作者

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

你可能感兴趣的:(proteus,单片机,mongodb,Arduino,简易计算器,LCD1602)