#include<Keypad.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(13,12,11,A3,A2,A1,A0); //定义lcd液晶屏456引脚
unsigned int data_t=0; //对按键进行计数,确定光标位置
char num2=‘b’; //对第二个数的第一个数字进行标记,如果标记不改变,则按键数字为第一个数字
//数字的算法不同,第一个输入的就是直接赋值,后面输入的都是前面的数字10再加按键值
int num1,num22,num; //定义数一数二以及计算结果,int有取值范围,注意!
char count =‘0’; //对运算符号进行标记,第一次出现运算符后标记改变
char count1=‘0’;
const byte ROWS = 4; //44按键
const byte COLS = 4;
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};
//Created instances
Keypad myKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); //定义
void setup()
{
lcd.begin(16,2); //lcd定义
lcd.home(); //lcd初始化
//各变量再次赋值,用来重置
data_t=0;
num1=0;
num=0;
num2=‘a’;
num22=0;
count=‘0’;
}
void loop()
{
char Key=myKeypad.getKey();
if(Key)
{
data_t++;
lcd.setCursor(data_t-1,0);
if(Key==‘C’) setup();
else{
if(data_t1&&Key’0’||Key==‘1’||Key==‘2’||Key==‘3’||Key==‘4’||Key==‘5’||Key==‘6’||Key==‘7’||Key==‘8’||Key==‘9’))
{num1=Key-‘0’;
lcd.print(Key);
delay(50);}
if(data_t>1&&(Key==‘0’||Key==‘1’||Key==‘2’||Key==‘3’||Key==‘4’||Key==‘5’||Key==‘6’||Key==‘7’||Key==‘8’||Key==‘9’)&&count==‘0’)
{num1=num110+(Key-‘0’);
lcd.print(Key);
delay(50);}
if(data_t>1&&(Key==’+’||Key==’-’||Key==’’||Key==’/’))
{if(count==‘0’)
{count=Key;
lcd.print(Key);
delay(50);}
else setup();
}
if(data_t>1&&(Key==‘0’||Key==‘1’||Key==‘2’||Key==‘3’||Key==‘4’||Key==‘5’||Key==‘6’||Key==‘7’||Key==‘8’||Key==‘9’)&&count!=‘0’)
{
if(num2==‘b’){num22=Key-‘0’;lcd.print(Key);}
else {num22=num2210+(Key-‘0’);lcd.print(Key);}
}
if(data_t<17&&Key==’=’)
{if(count1==‘0’&&count!=‘0’&&num1!=0&&num2!=‘b’){
lcd.setCursor(0,1);
if(count==’+’) {num=num1+num22;lcd.print(num);}
if(count==’-’) {num=num1-num22;lcd.print(num);}
if(count==’’) {num=num1*num22;lcd.print(num);}
if(count==’/’) {num=num1/num22;lcd.print(num);}}
else setup();
}
else
{
lcd.home();
}
}
}
}