為什么這個用數碼管顯示的簡易計算器程序無法顯示,按下鍵后數碼管沒反應,按等號直接顯示235
求各位大佬救急
/*
1 2 3 *
4 5 6 /
7 8 9 無
+ 0 - =
*/
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LS1=P2^2;
sbit LS2=P2^3;
sbit LS3=P2^4;
uint key,flag=0,x1=0,y1=0,x=10,a=0,b=0,fuhao=0,answer=0,m_1=0,m_2=0,m_3=0,m_4=0;
char led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
void delay_ms(uint time)
{
int i,j;
for(i=0;i<100;i++)
{
for(j=0;j<time;j++);
}
}
void output(uint answer,uint a//顯示函數
{
if(answer>=0&&answer<=9)
{
LS1=0;
LS2=0;
LS3=0;
while(1)
{
P0=led[answer];
if(a==1)
break;
}
}
if(answer>=10&&answer<=99)
{
m_1=answer%10;
m_2=answer/10;
while(1)
{
LS1=0;LS2=0;LS3=0;
P0=led[m_1];
delay_ms(1);
LS2=0;
P0=led[m_2];
delay_ms(1);
if(a==1)
break;
}
}
if(answer>=100&&answer<=999)
{
m_1=answer%10;
m_3=answer/100;
m_2=(answer-m_3*100)/10;
while(1)
{
LS1=0;LS2=0;LS3=0;
P0=led[m_1];
delay_ms(1);
LS1=1;LS2=0;LS3=0;
P0=led[m_2];
delay_ms(1);
LS1=0;LS2=1;LS3=0;
P0=led[m_3];
delay_ms(1);
if(a==1)
break;
}
}
if(answer>=1000&&answer<=9999)
{
m_1=answer%10;
m_2=(answer/100)%10;
m_4=answer/1000;
m_3=(answer-m_4*1000)/100;
while(1)
{
LS1=0;LS2=0;LS3=0;
P0=led[m_1];
delay_ms(1);
LS1=1;LS2=0;LS3=0;
P0=led[m_2];
delay_ms(1);
LS1=0;LS2=1;LS3=0;
P0=led[m_3];
delay_ms(1);
LS1=1;LS2=1;LS3=0;
P0=led[m_4];
delay_ms(1);
if(a==1)
break;
}
}
}
void computer()
{
P1=0xf0;
if(P1!=0xf0)
{
delay_ms(100);
a=P1;
}
P1=0x0f;
if(P1!=0x0f)
{
b=P1;
key=a|b;
}
switch(key)
{
case 0x77:x=1;flag=0;break;
case 0x7b:x=2;flag=0;break;
case 0x7d:x=3;flag=0;break;
case 0xb7:x=4;flag=0;break;
case 0xbb:x=5;flag=0;break;
case 0xbd:x=6;flag=0;break;
case 0xd7:x=7;flag=0;break;
case 0xdb:x=8;flag=0;break;
case 0xdd:x=9;flag=0;break;
case 0xeb:x=0;flag=0;break;
case 0xe7:fuhao=1;break;// +
case 0xed:fuhao=2;break;// -
case 0xbe:fuhao=3;break;// *
case 0xde:fuhao=4;break;// /
case 0xee:
if(fuhao==1)
{
answer=a+b;
output(answer,0);
}
if(fuhao==2)
{
answer=a-b;
output(answer,0);
}
if(fuhao==3)
{
answer=a*b;
output(answer,0);
}
if(fuhao==4)
{
answer=a/b;
output(answer,0);
}
break;// =
}//掃描出鍵的值
if(x>=0&&x<=9)
{
if(flag==0) //沒有按下符號鍵
{
a=a*10+x;
output(a,1);
}
else
{
b=b*10+x;
output(b,1);
}
}
else
{
flag=1;
}
}
void main()
{
while(1)
{
computer();
}
}
|