|
#include <reg51.H>
#define uchar unsigned char
#define uint unsigned int
#define duan P2//數碼管顯示段選定義
#define wei P2//數碼管顯示位選定義
#define key P1//鍵盤接口定義
sbit xwei=P3^5;
sbit xduan=P3^4;
unsigned long
shu,shz,shuz,shuz1,shu1,i,shu2,shz3,shuz3,shz5,shuz5,shz4,shuz4,shz6,shuz6,xshu,shz7,shuz7;//進行運算的兩個變量數
uchar num;////鍵盤掃描返回值
uchar flag1,fuhao,fhao ,flag2,flagf,flagl,flagLJ1,flagLJ2;//fuhao運符
unsigned char code Wela[]={0x20,0x10,0x08,0x04,0x02,0x01};//六位數碼管的位選
unsigned char code Duan[]={0x3f,0x06,0x5b,// 0 1 2
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};// 3 4 5 6 7 8 9 無顯示共陰極數碼管
uchar keyscan();//鍵盤掃描函數
void weixz();
void duanxz();
void displayshu(unsigned long);
void delay(uint i)//延時函數
{
while(i--);
}
/***********************************************主函數************************************************/
void main()
{
shu=100;
xshu=0;
shu1=0;
shu2=0;
flag1=0;
flag2=0;
flagf=0;
flagl=0;
while(1)
{
////////////////////////////////////////////////
shu=keyscan();
if((shu<10)&&flag1==0&&flag2==0&&flagf==0&&flagLJ1==0)
{
shu1=shu;
flag1=1;
displayshu(shu1);
flagLJ1=1;
for (i=1;i<200;i++)
{
delay(500);
}
}
else if((shu<10)&&flag1==1&&flag2==0&&flagf==0&&flagLJ1==1)
{
shu1=shu1*10;
shu1=shu+shu1;
flag1=1;
displayshu(shu1);
flagLJ1=1;
}
//////////////////////////////////////////////////
if(shu==13&&flag1==1&&flagf==0)
{
fuhao=shu;
wei=0xef;
weixz();
duan=Duan[0];
duanxz();
flagf=1;
}
if(shu==12&&flag1==1&&flagf==0)
{
fuhao=shu;
wei=0xdf;
weixz();
duan=Duan[0];
duanxz();
flagf=1;
}
////////////////////
if(shu==15&&flag1==1&&flagf==0)
{
fuhao=shu;
wei=0xdf;
weixz();
duan=Duan[0];
duanxz();
flagf=1;
}
/////////chu///////////////
if(shu==11&&flag1==1&&flagf==0)
{
fuhao=shu;
wei=0xdf;
weixz();
duan=Duan[0];
duanxz();
flagf=1;
}
/////////////////////////////////////////////////
if((shu<10)&&flag1==1&&flagf==1&&flagLJ2==0)
{
shu2=shu;
flag2=1;
flagLJ2=1;
displayshu(shu2);
}
else if
((shu<10)&&flag1==1&&flag2==1&&flagf==1&&flagLJ2==1)
{
shu2=shu2*10;
shu2=shu+shu2;
flag2=1;
displayshu(shu2);
}
/////////////////////////////////////////////
if(shu==10&&flag1==1&&flag2==1&&flagf==1)
{
switch(fuhao)
{
case13:shu1=shu2+shu1; break;
case12:shu1=shu1-shu2; break;
case15:shu1=shu1*shu2; break;
case11:shu1=shu1/shu2; break;
}
shu2=0;
flag1=1;
flag2=0;
flagf=0;
flagLJ1=0;
flagLJ2=0;
displayshu(shu1);
}
if(shu==14)
{
shu1=0;
shu2=0;
flag1=0;
flag2=0;
flagf=0;
flagLJ1=0;
flagLJ2=0;
displayshu(0);
}
}
}
///////////////鍵盤掃描/////////////////
uchar keyscan()
{
//////1
key=0xfe;
if(key!=0xfe)
{
delay(500);
if(key!=0xfe)
{
switch(key)
{
case 0xee:num=7 break;
case 0xde:num=8 break;
case 0xbe:num=9 break;
case 0x7e:num=13;break; //"/"
}
return num;
}
}
////// 1
////// 2
key=0xfd;
if(key!=0xfd)
{
delay(500);
if(key!=0xfd)
{
switch(key)
{
case 0xed:num=4 break;
case 0xdd:num=5 break;
case 0xbd:num=6 break;
case 0x7d:num=12;break; //*
}
return num
}
}
//////2
//////3
key=0xfb;
if(key!=0xfb)
{
delay(500);
if(key!=0xfb)
{
switch(key)
{
case 0xeb:num=1 break;
case 0xdb:num=2;break;
case 0xbb:num=3;break;
case 0x7b:num=11;break;
}
return num
}
}
//////3
//////4
key=0xf7;
if(key!=0xf7)
{
delay(500);
if(key!=0xf7)
{
switch(key)
{
case 0xe7:num=0;break;
case 0xd7:num=15;break;
case 0xb7:num=14;break;
case 0x77:num=10;break;
}
return num
}
}
for(i=1;i<30;i++)
{
delay(1600);
}
}
/////////////////////////////////////////////////////////////////
void weixz()
{
xwei=1;
delay(1);
xwei=0;
}
void duanxz()
{
xduan=1;
delay(1);
xduan=0;
}
void displayshu(shu)
{ if(shu<10)
{
wei=0xfe;
weixz()
duan=Duan[shu];
duanxz();
delay(5000);
}
else if(shu>9&&shu<100)
{
for (i=1;i<100;i++ )
{
wei=0xfe;
shuz=shu%10;
weixz();
duan=Duan[shuz];
duanxz();
delay(200);
shz=shu/10;
wei=0xfd;
shuz1=shz%10;
weixz()
duan=Duan[shuz1];
duanxz();
delay(200);
wei=0xff;
weixz();
}
}
//////////////3wei/////
else if(shu>99&&shu<1000)
{
for (i=1;i<100;i++ )
{
wei=0xfe;
shuz=shu%10;
weixz();
duan=Duan[shuz];
duanxz();
delay(100);
shz=shu/10;
wei=0xfd;
shuz1=shz%10;
weixz()
duan=Duan[shuz1];
duanxz();
delay(100);
shz3=shu/100;
wei=0xfb;
shuz3=shz3%10;
weixz();
duan=Duan[shuz3];
duanxz();
delay(100);
wei=0xff;
weixz();
}
}
//////////////4////////////
else if(shu>999&&shu<10000)
{
for(i=1;i<100;i++)
{
wei=0xfe;
shuz=shu%10;
weixz();
duan=Duan[shuz];
duanxz();
delay(120);
shz=shu/10;
wei=0xfd;
shuz1=shz%10;
weixz()
duan=Duan[shuz1];
duanxz();
delay(120);
shz3=shu/100;
wei=0xfb;
shuz3=shz3%10;
weixz();
duan=Duan[shuz3];
duanxz();
delay(120);
shz4=shu/1000;
wei=0xf7;
shuz4=shz4%10;
weixz();
duan=Duan[shuz4];
duanxz();
delay(120);
wei=0xff;
weixz();
}
}
////////////5///////////////////////
else if(shu>9999&&shu<100000)
{
for(i=1;i<100;i++)
{
wei=0xfe;
shuz=shu%10;
weixz();
duan=Duan[shuz];
duanxz();
delay(180);
shz=shu/10;
wei=0xfd;
shuz1=shz%10;
weixz()
duan=Duan[shuz1];
duanxz();
delay(180);
shz3=shu/100;
wei=0xfb;
shuz3=shz3%10;
weixz();
duan=Duan[shuz3];
duanxz();
delay(180);
shz4=shu/1000;
wei=0xf7;
shuz4=shz4%10;
weixz();
duan=Duan[shuz4];
duanxz();
delay(180);
shz5=shu/10000;
wei=0xef;
shuz5=shz5%10;
weixz();
duan=Duan[shuz5];
duanxz();
delay(180);
wei=0xff;
weixz();
}
}
////////////6///////////////////////
else if(shu>99999&&shu<1000000)
{
for(i=1;i<100;i++)
{
wei=0xfe;
shuz=shu%10;
weixz();
duan=Duan[shuz];
duanxz();
delay(180);
shz=shu/10;
wei=0xfd;
shuz1=shz%10;
weixz();
duan=Duan[shuz1];
duanxz();
delay(180);
shz3=shu/100;
wei=0xfb;
shuz3=shz3%10;
weixz();
duan=Duan[shuz3];
duanxz();
delay(180);
shz4=shu/1000;
wei=0xf7;
shuz4=shz4%10;
weixz();
duan=Duan[shuz4];
duanxz();
delay(180);
shz5=shu/10000;
wei=0xef;
shuz5=shz5%10;
weixz();
duan=Duan[shuz5];
duanxz();
delay(180);
shz6=shz5/10;
wei=0xdf;
shuz6=shz6%10;
weixz();
duan=Duan[shuz6];
duanxz();
delay(180);
wei=0xff;
weixz();
}
}
}
|
|