本片需利用到LCD_1602的头函数(可自行网上搜索:lcd1602.h),需插上lcd液晶屏。并自定义了一个控制矩阵键盘的头文件,会附在下方。
具体实现如图:
主要的总代码:
#include
#include "LCD1602.h"
#include "matrixkey.h"
unsigned int keynum=0,k,c=0,i=0,a[2]={0};
int result=0;
char op;
void main()
{
LCD_Init();
while(1)
{
keynum=matrixkey();
k=keynum;
if(k)
{
if(k<11)
{
k=k%10;
a[i]=(int)k;
i++;
c++;
if(c<=3)
LCD_ShowNum(1,c,k,1);
}
if(k==11)
{
c++;
if(c<=3)
{
LCD_ShowString(1,c,"+");
}
op='+';
}
if(k==12)
{
c++;
if(c<=3)
{
LCD_ShowString(1,c,"-");
}
op='-';
}
if(k==13)
{
c++;
if(c<=3)
{
LCD_ShowString(1,c,"*");
}
op='*';
}
if(k==14)
{
c++;
if(c<=3)
{
LCD_ShowString(1,c,"/");
}
op='/';
}
if(k==16)
{
c++;
LCD_ShowString(1,c,"=");
c++;
switch (op){
case '+':result=a[0]+a[1];break;
case '-':result=a[0]-a[1];break;
case '*':result=a[0]*a[1];break;
case '/':result=a[0]/a[1];break;
}
LCD_ShowSignedNum(1,c,result,3);
}
}
}
}
matrixkey.h代码如下(利用的是列判断按键,判断完成之后返回该按键值):
#include
#include "delay.h"
unsigned char matrixkey()
{
unsigned char keynumber=0;
P1=0xFF;
P1_3=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=1;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=5;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=9;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=13;}
P1=0xFF;
P1_2=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=2;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=6;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=10;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=14;}
P1=0xFF;
P1_1=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=3;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=7;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=11;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=15;}
P1=0xFF;
P1_0=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=4;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=8;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=12;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=16;}
return keynumber;
}