uchar g1,g2,g3,g4;
void display() //计算器
{
P3 = 0xef; //令第一行为0,然后判断是哪一列按下
if(P3 != 0xef)
{
delay(200);
if(P3 != 0xef)
{
k = P3 & 0xff;
switch(k)
{
case 0xee:k_value = 7;break;
case 0xed:k_value = 8;break;
case 0xeb:k_value = 9;break;
case 0xe7:k_value = 14;break;
}
}while(P3 != 0xef);
if(k_value == 7 || k_value == 8 || k_value == 9)
{
if(flag == 0)
{
num1 = num1 * 10 + num[k_value];
}
if(flag == 1)
{
num2 = num2 * 10 + num[k_value];
}
if(flag == 2)
{
num3 = num3 * 10 + num[k_value];
}
}
if(k_value == 14) //加
{
g1++;
flag++;
fuhao = 1;
}
write_data(0x30 + num[k_value]);
}
P3 = 0xdf;
if(P3 != 0xdf)
{
delay(200);
if(P3 != 0xdf)
{
k = P3 & 0xff;
switch(k)
{
case 0xde:k_value = 4;break;
case 0xdd:k_value = 5;break;
case 0xdb:k_value = 6;break;
case 0xd7:k_value = 13;break;
}
}while(P3 != 0xdf);
if(k_value == 4 || k_value == 5 || k_value == 6)
{
if(flag == 0)
{
num1 = num1 * 10 + num[k_value];
}
if(flag == 1)
{
num2 = num2 * 10 + num[k_value];
}
if(flag == 2)
{
num3 = num3 * 10 + num[k_value];
}
}
if(k_value == 13) //减
{
g2++;
flag++;
fuhao = 2;
}
write_data(0x30 + num[k_value]);
}
P3 = 0xbf; //令第三行为0,判断哪一列按下
if(P3 != 0xbf)
{
delay(200);
if(P3 != 0xbf)
{
k = P3 & 0xff;
switch(k)
{
case 0xbe:k_value = 1;break;
case 0xbd:k_value = 2;break;
case 0xbb:k_value = 3;break;
case 0xb7:k_value = 12;break;
}
}while(P3 != 0xbf);
if(k_value == 1 || k_value == 2 || k_value == 3)
{
if(flag == 0)
{
num1 = num1 * 10 + num[k_value];
}
if(flag == 1)
{
num2 = num2 * 10 + num[k_value];
}
if(flag == 2)
{
num3 = num3 * 10 + num[k_value];
}
}
if(k_value == 12) //乘
{
g3++;
flag++;
fuhao = 3;
}
write_data(0x30 + num[k_value]);
}
P3 = 0x7f; //令第四行为0,判断哪一列按下
if(P3 != 0x7f)
{
delay(200);
if(P3 != 0x7f)
{
k = P3 & 0xff;
switch(k)
{
case 0x7e:k_value = 10;break; //清除
case 0x7d:k_value = 0;break; // 0
case 0x7b:k_value = 15;break; //等号
case 0x77:k_value = 11;break; //除/
}
}while(P3 != 0x7f);
if(k_value == 11) //除
{
g4++;
flag++;
fuhao = 4;
write_data(0x2f);
}
if(k_value == 0)
{
if(flag == 0)
{
num1 = num1 * 10 + num[k_value];
write_data(0x30);
}
if(flag == 1)
{
num2 = num2 * 10 + num[k_value];
write_data(0x30);
}
if(flag == 2)
{
num3 = num3 * 10 + num[k_value];
}
}
if(k_value == 15) //等于
{
if(fuhao == 0){mode = 1;}
if(fuhao == 1) //加
{
write_command(0x4f + 0x80);
write_command(0x04); //光标左移
result = num1 + num2;
if(g1 == 2)result = num1 + num2 + num3;
if(g2 == 1)result = num1 - num2 + num3;
if(g3 == 1)result = num1 * num2 + num3;
if(g4 == 1)result = num1 / num2 + num3;
while(result != 0)
{
write_data(0x30 + result % 10); //显示结果最后一位在0x4f处
result = result / 10;
}
gotoxy(2,0);display_string("=");
}
if(fuhao == 2) //减
{
write_command(0x4f + 0x80);
write_command(0x04);
if(num1 > num2)result = num1 - num2;
if(num1 < num2)result = num2 - num1;
if(g1 == 1)result = num1 + num2 - num3;
if(g2 == 2)result = num1 - num2 - num3;
if(g3 == 1)result = num1 * num2 - num3;
if(g4 == 1)result = num1 / num2 - num3;
while(result != 0)
{
write_data(0x30 + result % 10); //显示结果最后一位在0x4f处
result = result / 10;
}
if(num1 + num2 < num3)write_data(0x2d);
gotoxy(2,0);display_string("=");
}
if(fuhao == 3) //乘
{
write_command(0x4f + 0x80);
write_command(0x04);
result = num1 * num2;
if(g1 == 1)result = num1 + num2 * num3;
if(g2 == 1)result = num1 - num2 * num3;
if(g3 == 2)result = num1 * num2 * num3;
if(g4 == 1)result = num1 / num2 * num3;
while(result != 0)
{
write_data(0x30 + result % 10); //显示结果最后一位在0x4f处
result = result / 10;
}
gotoxy(2,0);display_string("=");
}
if(fuhao == 4) //除
{
xiao = 0;
write_command(0x4f + 0x80);
write_command(0x04);
result = num1 / num2;
if(g1 == 1)result = num1 + num2 / num3;
if(g2 == 1)result = num1 - num2 / num3;
if(g3 == 1)result = num1 * num2 / num3;
if(g4 == 2)result = num1 / num2 / num3;
while(result != 0)
{
xiao++;
write_data(0x30 + result % 10); //显示结果最后一位在0x4f处
result = result / 10;
if(xiao == 3)
{
write_data(0x2e);
xiao = 0;
}
}
gotoxy(2,0);display_string("=");
}
save_result = result;
}
if(k_value == 10) //清除
{
FLCD1602_clear();
num1 = 0;
num2 = 0;
num3 = 0;
g1 = 0;
g2 = 0;
g3 = 0;
g4 = 0;
flag = 0;
fuhao = 0;
}
}
}
void display_time() //时间
{
if(P3 == 0x7b)
{
delay(200);
if(P3 == 0x7b)
{
mode = 0;
}while(P3 == 0x7b);
}
gotoxy(1,0);
display_string("Time:");display_num(2);display_string("-");display_num(min);display_string("-");display_num(sec);
gotoxy(2,0);
display_string("Date:");display_num(year);display_string("/");display_num(month);display_string("/");display_num(day);
// gotoxy(1,0);display_num(year);display_string("Time:");
}
- 1
- 2
前往页