我写的比较烂,能想到的都写了,结果显示还没有写
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code shumaguan[]={0x3f,0x06,0x5b,0x4f, //0~3
0x66,0x6d,0x7d,0x07, //4~7
0x7f,0x6f,0x00,0x00, //8~b
0x00,0x00,0x00,0x00 }; //c-f
#define keychoice P1
#define keyoutput P0
u8 keyvalue;
u8 a=0;
int a; //第一个数字
int b; //第二个数字
int c; //结果
char flag;
void delay(u8 i)
{
while(i--);
}
void interrupt0()
{
EA=1;
INT0=1;
EX0=1;
}
void dtdisplay()
{
u8 i;
for(i=1;i<9;i++)
{
switch(result)
{
case(1):LSA=0;LSB=0;LSC=0;break;
case(2):LSA=1;LSB=0;LSC=0;break;
case(3):LSA=0;LSB=1;LSC=0;break;
case(4):LSA=1;LSB=1;LSC=0;break;
case(5):LSA=0;LSB=0;LSC=1;break;
case(6):LSA=1;LSB=0;LSC=1;break;
case(7):LSA=0;LSB=1;LSC=1;break;
case(8):LSA=1;LSB=1;LSC=1;break;
}
P0=shumaguan;
delay(100);
P0=0x00;
}
}
void keydown()
{
keychoice=0x0f;
if(keychoice!=0x0f)
{
delay(1000);
if(keychoice!=0x0f)
{
keychoice=0x0f;
switch(keychoice)
{
case(0x07):keyvalue=0;break;
case(0x0b):keyvalue=1;break;
case(0x0d):keyvalue=2;break;
case(0x0e):keyvalue=3;break;
}
keychoice=0xf0;
switch(keychoice)
{
case(0x70):keyvalue=keyvalue;break;
case(0xb0):keyvalue=keyvalue+4;break;
case(0xd0):keyvalue=keyvalue+8;break;
case(0xe0):keyvalue=keyvalue+12;break;
}
//加法
if(keyvalue==10)
{
keyvalue='+';
}
//减法
if(keyvalue==11)
{
keyvalue='-';
}
//乘法
if(keyvalue==12)
{
keyvalue='*';
}
//除法
if(keyvalue==13)
{
keyvalue='/';
}
//小数点
if(keyvalue==14)
{
keyvalue='.';
}
//等于
if(keyvalue==15)
{
keyvalue='=';
}
while((a<50)&&(keychoice!=0xf0))
{
delay(1000);
a++;
}
}
}
}
void keydeal()
{
if(keyvalue==10)
{
result=D_shu+E_shu;
}
if(keyvalue==11)
{
result=D_shu-E_shu;
}
if(keyvalue==12)
{
result=D_shu*E_shu;
}
if(keyvalue==13)
{
result=D_shu/E_shu;
}
if(keyvalue==15)
{
interrupt0();
}
}
void main()
{
LSA=0;
LSB=0;
LSC=0;
while(1)
{
keydown();
keyoutput=shumaguan[keyvalue];
}
}
void Int0() interrupt 0
{
if(keyvalue==15)
{
delay(1000);
}
} |