简易计算器
//完成两个一位十进制数的四则运算
#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系列单片机的编程能力。