2021-07-20

简易计算器

在这里插入图片描述

//完成两个一位十进制数的四则运算
#include<reg51.h>
sbit row0=P1^0;
sbit row1=P1^1;
sbit row2=P1^2;
sbit row3=P1^3;
sbit colomn0=P1^4;
sbit colomn1=P1^5;
sbit colomn2=P1^6;
sbit colomn3=P1^7;
int n;//存放按键值
int m1,m2;//存放参与运算的两个数据
int t;//存放运算编号,1-求和,2求差,3求积,4求商
int left,right;//显示结果的左右两位
int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9共阳极七段码
void key1();//判断按键是否按下
void key2();//行列扫描确定按键位置并赋值

void delay( int i){
	int k,j;
	for(k=0;k<i;k++)
	for(j=0;j<300;j++);
}
void key1()
{
	while(1)
	{
		P1=0x0f;
		if(P1!=0x0f);
		delay(10);
		if(P1!=0x0f)
		{
			break;
		}
	}
}
void key2()
{
		P1=0xff;
		colomn0=0;
		if(row0==0)n=0;
		if(row1==0)n=1;
		if(row2==0)n=2;
		if(row3==0)n=3;
		
		P1=0xff;
		colomn1=0;
		if(row0==0)n=4;
		if(row1==0)n=5;
		if(row2==0)n=6;
		if(row3==0)n=7;
		
		P1=0xff;//释放键
		colomn2=0;
		if(row0==0)n=8;
		if(row1==0)n=9;
		if(row2==0){m1=n;t=1;}//+
		if(row3==0){m1=n;t=2;}//-
		
		P1=0xff;
		colomn3=0;
		if(row0==0){m1=n;t=3;}//*
		if(row1==0){m1=n;t=4;}// /
		if(row2==0){m2=n;n=10;}//=
		
	}

void display1(){
		P2=0xfe;
		P0=seg[n];
	}
void display2(){
		while(1)
		{
			P2=0xfd;//对左位查七段码
			if(t!=4)
			P0=seg[left];
			else
				P0=seg[left]&0x7f;//01111111将七段码最高位清零
			delay(1);
			P2=0xfe;
			P0=seg[right];
			delay(1);
		}
	}
void main(){
	
	{
		while(1)
		{
			key1();
			key2();
			if(n<10)
			display1();
			else
			{
				switch(t)
				{
					case 1:left=(m1+m2)/10;right=(m1+m2)%10;break;
					case 2:if(m1>m2){left=10;right=m1-m2;}else {left=11;right=m2-m1;}break;
					case 3:left=m1*m2/10;right=m1*m2%10;break;
					case 4:left=m1/m2;right=10*m1/m2%10;
		}
				display2();
	}
	}
}

总结

通过该计算器的设计我深入学习数码管扫描和键盘控制,提高对了 51系列单片机的实际应用能力。同时也掌握应用程序控制51系列单片机进行简单的数 学运算。提高了对51系列单片机的编程能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值