本来做出来之后时间也是比较久了,具体代码的意义我暂时没有再回看,给标注出来,相信读者也是看了就明白,主要是当初在调试折腾的过程需要下一些功夫,因为当时是初学者,完成慢,成品也不好,还请多多包涵。
功能概述
这里使用的是普中的HC6800-ES V2.0开发板(根据B站up主江科大自化协的教程学习,讲得很好,他用的是这块板子),count1跟count2用的都是unsigned char的类型,结果也需要是unsigned char(太大了就溢出了所以这里都限制着,只能计算比较小的数),功能有加、减、乘、除、退格、清零(其实就是复位)。
代码实现
主要代码块如下所示,LCD屏的驱动用的是开发板资料带的,特别说明这里“10”对应的是数字0,“11”对应退格功能。
void main()
{
unsigned char num;
unsigned char count1=0,count2=0,flag=0,flag2=0;
unsigned int sum1=0,sum2=0,sum=0;
LCD_Init();
while(1)
{
num = MatrixKey();
if(num)
{
if(num>=1&&num<=11&&count1<5&&flag==0)
{
if(num==11){sum1=sum1/10;count1--;if(count1<0){count1=0;}}
else if(num==10){sum1=sum1*10;count1++;}
else {sum1=sum1*10+num;count1++;}
LCD_ShowNum(1,1,sum1,5);
}
if(num>=1&&num<=11&&count2<5&&flag==1)
{
if(num==11){sum2=sum2/10;count2--;if(count2<0){count2=0;}}
else if(num==10){sum2=sum2*10;count2++;}
else {sum2=sum2*10+num;count2++;}
LCD_ShowNum(1,7,sum2,5);
}
if('+'==num)
{
LCD_ShowChar(1,6,'+');
flag=1;
flag2='+';
}
if('-'==num)
{
LCD_ShowChar(1,6,'-');
flag=1;
flag2='-';
}
if('x'==num)
{
LCD_ShowChar(1,6,'x');
flag=1;
flag2='x';
}
if('/'==num)
{
LCD_ShowChar(1,6,'/');
flag=1;
flag2='/';
}
if('='==num)
{
count2=5;
if(flag2=='+'&&sum2!=0){sum=sum1+sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
if(flag2=='-'&&sum2!=0){sum=sum1-sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
if(flag2=='x'&&sum2!=0){sum=sum1*sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
if(flag2=='/'&&sum2!=0){sum=sum1/sum2;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
if(flag2=='+'&&sum2==0){sum=sum1;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
if(flag2=='-'&&sum2==0){sum=sum1;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
if(flag2=='x'&&sum2==0){sum=0;LCD_ShowChar(2,1,'=');LCD_ShowNum(2,2,sum,5);}
if(flag2=='/'&&sum2==0){LCD_ShowString(2,1,"ERROR");}
}
}
}
}
相关链接
b站视频,功能实现之效果:
51单片机实现简单计算器----bilibili弹幕网