单片机智能计算器

#include<public.h>
#include<LCD12864.h>
#include<key.h>
u1 jianhaoflag=0;
u1 jiahaoflag=0;
u1 chenhaoflag=0;
u1 chuhaoflag=0;
u1 denghaoflag=0;
u1 stop=0;
u1 a=0;
u1 temp=0;
u1 k=0;
long c=0;
long b=0;
long sum=0;
void main()
{
	u1 key_num=0,num=0,num1=0;
	delay10us(20);
	delay1ms(1);
	LCD12864_inti();
	
	while(1)
	{
		key_num=key_scan();
	if(key_num!=20&&key_num!=3&&key_num!=7&&key_num!=11&&key_num!=12&&key_num!=13&&key_num!=14&&b==0
		&&jiahaoflag!=1&&jianhaoflag!=1&&chenhaoflag!=1&&chuhaoflag!=1&&denghaoflag!=1&&stop!=1)
			num++;
	else if(num!=0&&key_num!=20&&key_num!=3&&key_num!=7&&key_num!=11&&key_num!=12&&key_num!=13&&key_num!=14&&denghaoflag!=1)
		num1++;
		if(key_num==0||key_num==1||key_num==2||key_num==3)
		{
			if(key_num==0)
				a=1;
			else if(key_num==1)
				a=2;
			else if(key_num==2)
				a=3;
			else if(key_num==3)
			jiahaoflag=1;
			if(key_num!=3&&(jiahaoflag==1||jianhaoflag==1||chenhaoflag==1||chuhaoflag==1)&&denghaoflag==0)
			b=b*10+a;
			else  if(key_num!=3&&denghaoflag==0)
			c=c*10+a;
		}
		else if(key_num==4||key_num==5||key_num==6||key_num==7)
	   	{	
			if(key_num==4)
				a=4;
			else if(key_num==5)
				a=5;
			else if(key_num==6)
				a=6;
			else if(key_num==7)
			jianhaoflag=1;
			if(key_num!=7&&(jiahaoflag==1||jianhaoflag==1||chenhaoflag==1||chuhaoflag==1)&&denghaoflag==0)
			b=b*10+a;
			else  if(key_num!=7&&denghaoflag==0)
			c=c*10+a;
		}
		else if(key_num==8||key_num==9||key_num==10||key_num==11)
	   	{	
			if(key_num==8)
				a=7;
			else if(key_num==9)
				a=8;
			else if(key_num==10)
				a=9;
			else if(key_num==11)
			chenhaoflag=1;
			if(key_num!=11&&(jiahaoflag==1||jianhaoflag==1||chenhaoflag==1||chuhaoflag==1)&&denghaoflag==0)
			b=b*10+a;
			else  if(key_num!=11&&denghaoflag==0)
			c=c*10+a;
		}
		else if((key_num==12)||(key_num==13)||(key_num==14)||(key_num==15))
	   	{	
			if(key_num==12)
				denghaoflag=1;
			else if(key_num==13)
				stop=1;
			else if(key_num==14)
				chuhaoflag=1;
			else if(key_num==15)
				a=0;
			if(key_num==15&&(jiahaoflag==1||jianhaoflag==1||chenhaoflag==1||chuhaoflag==1)&&denghaoflag==0)
			b=b*10+a;
			else  if(key_num==15&&denghaoflag==0)
			c=c*10+a;
		}
	   LCD12864_write_cmd(0x80);
		if(key_num!=13)
		{	
			if(num>=7)
			LCD12864_write_dat(c/1000000+0x30);
			if(num>=6)
			LCD12864_write_dat(c%1000000/100000+0x30);
		   	if(num>=5)
			LCD12864_write_dat(c%1000000%100000/10000+0x30);
			if(num>=4)
			LCD12864_write_dat(c%1000000%100000%10000/1000+0x30);
			if(num>=3)
			LCD12864_write_dat(c%1000000%100000%10000%1000/100+0x30);
			if(num>=2)
			LCD12864_write_dat(c%1000000%100000%10000%100/10+0x30);
			LCD12864_write_dat(c%10+0x30);
		if(jiahaoflag==1)
		{
			LCD12864_write_dat('+');
		}
		if(jianhaoflag==1)
		{
			LCD12864_write_dat('-');
		}
	   	if(chenhaoflag==1)
		{
			LCD12864_write_dat('*');
		}
		if(chuhaoflag==1)
		{
			LCD12864_write_dat('/');
		}
	   		if(num1>=7)
			LCD12864_write_dat(b/1000000+0x30);
			if(num1>=6)
			LCD12864_write_dat(b%1000000/100000+0x30);
		   	if(num1>=5)
			LCD12864_write_dat(b%1000000%100000/10000+0x30);
			if(num1>=4)
			LCD12864_write_dat(b%1000000%100000%10000/1000+0x30);
			if(num1>=3)
			LCD12864_write_dat(b%1000000%100000%10000%1000/100+0x30);
			if(num1>=2)
			LCD12864_write_dat(b%1000000%100000%10000%100/10+0x30);
			if(num1>=1)
			LCD12864_write_dat(b%10+0x30);
			if(denghaoflag==1)
			{
				LCD12864_write_cmd(0x90);
				LCD12864_write_dat('=');
				if(jianhaoflag==1)
				{
					if(c<=b)
					{	
						LCD12864_write_dat('-');
						sum=b-c;
						while(sum!=0)
						{						
							sum=sum/10;
							k++;	
						}
						sum=b-c;
					}
					if(c>=b)
					{	
						sum=c-b;
						while(sum!=0)
						{						
							sum=sum/10;
							k++;	
						}
						sum=c-b;
					}
				}
				if(jiahaoflag==1)
				{
					sum=c+b;
					while(sum!=0)
					{						
						sum=sum/10;
						k++;	
					}
					sum=c+b;
				}
				if(chenhaoflag==1)
				{
					sum=c*b;
					if(sum<=0)
					{
						LCD12864_write_dat('-');
						sum=-sum;	
					}
					while(sum!=0)
					{						
						sum=sum/10;
						k++;	
					}
					sum=c*b;
						
				}
			   if(chuhaoflag==1)
				{
					sum=(long)(((float)c/b)*100);
					while(sum!=0)
					{						
						sum=sum/10;
						k++;	
					}
					sum=(long)(((float)c/b)*100);
					if(c<=b)
					k=k+1;
				}
				if(k>=7)
				LCD12864_write_dat(sum/1000000+0x30);
				if(k>=6)
				LCD12864_write_dat(sum%1000000/100000+0x30);
				if(k>=5)
				LCD12864_write_dat(sum%1000000%100000/10000+0x30);
				if(k>=4)
				LCD12864_write_dat(sum%1000000%100000%10000/1000+0x30);
				if(k>=3)
				LCD12864_write_dat(sum%1000000%100000%10000%1000/100+0x30);
				if(k>=2)
				{
					if(chuhaoflag==1)
					LCD12864_write_dat('.');
				LCD12864_write_dat(sum%1000000%100000%10000%100/10+0x30);
				}
				if(k>=1)
				LCD12864_write_dat(sum%10+0x30);
				k=0;		
			}
			}
			if(key_num==13)
			{
				jiahaoflag=0;
				denghaoflag=0;
				chuhaoflag=0;
				chenhaoflag=0;
				jianhaoflag=0;
				sum=0;
				stop=0;
				c=0;
				b=0;
				num=0;
				num1=0;
				LCD12864_write_cmd(0x01);
			}
	}					   
   	
}

无偿分析,QQ1494728092

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值