(4) 使用按键和数码管完成计算器设计,利用按键表示0~9键值以及加减乘除运算符号,将按键输入的数值在数码管上显示(操作按键时可以有声光提示),计算结束后,依然使用数码管显示(显示正负)。
半成品,只实现加法,为什么数码管显示不了结果?
#include "reg51.h"
```c
typedef unsigned char u8;
typedef unsigned int u16;
#define tube P0
#define key P1
u8 code guan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u16 save[5]={0};
u8 j;
void delay(u16 i)
{
while(i--)
;
}
void keydown()
{
u8 a=0;
key=0x0f;//0000 1111
if(key!=0x0f)
{
delay(1000);
if(key!=0x0f)
{
switch(key)
{
case(0x07):j=0;break;
case(0x0b):j=1;break;
case(0x0d):j=2;break;
case(0x0e):j=3;break;
}
key=0xf0;//1111 0000
switch(key)
{
case(0x70):j=j;break;
case(0xb0):j=j+4;break;
case(0xd0):j=j+8;break;
case(0xe0):j=j+12;break;
}
while((a<50)&&(key!=0xf0))
{
delay(1000);
a++;
}
}
}
}
void play()
{
if(save[1]==12)
{
u8 s;
s=save[0]+save[2];
tube=guan[s];
}
}
void main()
{
u8 i;
while(1)
{
for(i=0;i<4;i++)
{
keydown();
tube=guan[j];
save[i]=j;
}
if(save[3]==11)
{
play();
}
}
}