代码在keil软件中正常显示
#include"reg51.h"
#define GPIO_KEY P1
#define GPIO_DIG P0
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2; //74HC138¶ÎÑ¡
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P3^0;
sbit k=P3^1;
u16 KeyValue; //´æ¼üÖµ
u16 KeySwitch; //ÅжÏÊÇ·ñ°´Ï°´¼ü
u8 code duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x00}; //¶ÎÑ¡0-0xff
u16 i;
u16 box[8]={0,11,11,11,11,11,11,11}; //ÓÃÊý×é´æ·Åÿһλ¶ÎÑ¡µÃµ½µÄÊý×Ö
void delay(u16 i) //ÑÓʱ
{
while(i--);
}
void display() //ÏÔʾ³ÌÐò
{
LSA=0; LSB=0; LSC=0;
GPIO_DIG=duanxuan[box[7]];
delay(50); GPIO_DIG=0x00; //·ÀƵÉÁ
LSA=1; LSB=0; LSC=0;
GPIO_DIG=duanxuan[box[6]];
delay(50); GPIO_DIG=0x00;
LSA=0; LSB=1; LSC=0;
GPIO_DIG=duanxuan[box[5]];
delay(50); GPIO_DIG=0x00;
LSA=1; LSB=1; LSC=0;
GPIO_DIG=duanxuan[box[4]];
delay(50); GPIO_DIG=0x00;
LSA=0; LSB=0; LSC=1;
GPIO_DIG=duanxuan[box[3]];
delay(50); GPIO_DIG=0x00;
LSA=1; LSB=0; LSC=1;
GPIO_DIG=duanxuan[box[2]];
delay(50); GPIO_DIG=0x00;
LSA=0; LSB=1; LSC=1;
GPIO_DIG=duanxuan[box[1]];
delay(50); GPIO_DIG=0x00;
LSA=1; LSB=1; LSC=1;
GPIO_DIG=duanxuan[box[0]];
delay(50); GPIO_DIG=0x00;
}
void ring() //¾¯±¨³ÌÐò
{
while(1)
{
beep=~beep;
delay(99);
display();
}
}
void Withdrew() //ÍËλ³ÌÐò
{
if(k==0)
{
delay(1000);
if(k==0)
{
for(i=0;i<8;i++) //ÊäÈëÒ»¸öÊý£¬Êý×Ö¾ÍÓÒÒƶ¯Ò»Î»
{
box[i-1]=box[i];
}
box[7]=0;
while(!k); //¼ì²â°´¼üÊÇ·ñËÉ¿ª
}
}
}
void KeyDown()
{
u16 a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
delay(1000);
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0x0f;
switch(GPIO_KEY) //¼üÅ̲¼¾Ö
{
case(0X07): KeyValue=7;break;
case(0X0b): KeyValue=8;break;
case(0X0d): KeyValue=9;break;
case(0X0e): KeyValue=21;break;
}
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue; break;
case(0Xb0): KeyValue=KeyValue-3; break;
case(0Xd0): KeyValue=KeyValue-6; break;
case(0Xe0): KeyValue=KeyValue-9; break;
}
if(KeyValue==0 || KeyValue==1 || KeyValue==2 || KeyValue==3 || KeyValue==4 || KeyValue==5 || KeyValue==6 || KeyValue==7 || KeyValue==8 || KeyValue==9)
{
KeySwitch=1;
}
while((a<50)&&(GPIO_KEY!=0xf0)) //ËÉÊÖ¼à²â
{
delay(1000);
a++;
}
}
}
}
void main()
{
u16 a=0,b=0,c=0;
beep=0;
while(1)
{
display();
KeyDown();
Withdrew();
if(KeySwitch==1)
{
for(i=7;i>0;i--) //ÊäÈëÒ»¸öÊý£¬Êý×Ö¾ÍÏò×óÒƶ¯Ò»Î»
{box[i]=box[i-1];}
box[0]=KeyValue;
KeySwitch=0;
}
else if(KeyValue==-2) //¹éÁã¼ü
{
for(i=0;i<8;i++)
box[i]=0;
display();
}
else if(KeyValue==21) //¼Ó·¨
{
a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
//¼ÆËãµÚÒ»¸öÊýµÄÖµ´æµ½aÀï
for(i=0;i<8;i++)
box[i]=0; //Çå¿ÕÖµ£¬×¼±¸È¡ÏÂÒ»¸öÊý
while(1)
{
display();
KeyDown();
Withdrew();
if(KeySwitch==1)
{
for(i=7;i>0;i--)
{box[i]=box[i-1];}
box[0]=KeyValue;
KeySwitch=0;
}
if(KeyValue==-1) break; //°´µÈÓںźó½áÊøÑ»·
}
b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
//¼ÆËãµÚ¶þ¸öÊýµÄÖµ´æµ½b
c=a+b;
if(c>=10000) //³¬Öµ±¨¾¯
ring();
else
beep=0;
box[0]=c%10;
box[1]=c/10%10;
box[2]=c/100%10;
box[3]=c/1000%10;
box[4]=c/10000%10;
box[5]=c/100000%10;
box[6]=c/1000000%10;
box[7]=c/10000000%10;
display();
}
else if(KeyValue==18) //¼õ·¨
{
a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
for(i=0;i<8;i++)
box[i]=0;
while(1)
{
display();
KeyDown();
Withdrew();
if(KeySwitch==1)
{
for(i=7;i>0;i--)
{box[i]=box[i-1];}
box[0]=KeyValue;
KeySwitch=0;
}
if(KeyValue==-1) break;
}
b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000; //??b??
c=a-b;
if(c>=10000) //³¬Öµ±¨¾¯
ring();
else
beep=0;
box[0]=c%10;
box[1]=c/10%10;
box[2]=c/100%10;
box[3]=c/1000%10;
box[4]=c/10000%10;
box[5]=c/100000%10;
box[6]=c/1000000%10;
box[7]=c/10000000%10;
display();
}
else if(KeyValue==15) //³Ë·¨
{
a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
for(i=0;i<8;i++)
box[i]=0;
while(1)
{
display();
KeyDown();
Withdrew();
if(KeySwitch==1)
{
for(i=7;i>0;i--)
{box[i]=box[i-1];}
box[0]=KeyValue;
KeySwitch=0;
}
if(KeyValue==-1) break;
}
b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
c=a*b;
if(c>=10000) //³¬Öµ±¨¾¯
ring();
else
beep=0;
box[0]=c%10;
box[1]=c/10%10;
box[2]=c/100%10;
box[3]=c/1000%10;
box[4]=c/10000%10;
box[5]=c/100000%10;
box[6]=c/1000000%10;
box[7]=c/10000000%10;
display();
}
else if(KeyValue==12) //³ý·¨
{
a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
for(i=0;i<8;i++)
box[i]=0;
while(1)
{
display();
KeyDown();
Withdrew();
if(KeySwitch==1)
{
for(i=7;i>0;i--)
{box[i]=box[i-1];}
box[0]=KeyValue;
KeySwitch=0;
}
if(KeyValue==-1) break;
}
b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
c=a/b;
if(c>=10000) //³¬Öµ±¨¾¯
ring();
else
beep=0;
box[0]=c%10;
box[1]=c/10%10;
box[2]=c/100%10;
box[3]=c/1000%10;
box[4]=c/10000%10;
box[5]=c/100000%10;
box[6]=c/1000000%10;
box[7]=c/10000000%10;
display();
}
}
}