51单片机用矩阵按键做一个简易减法计算器用p2口
时间: 2023-10-12 17:06:47 浏览: 107
51单片机做简易计算器
5星 · 资源好评率100%
好的,下面是一个简单的51单片机矩阵按键减法计算器的代码,使用P2口作为输入口:
```C
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key();
void delay(uint i);
void display(uchar num);
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void main()
{
uchar a = 0, b = 0, c = 0, d = 0, result = 0;
while (1)
{
P2 = 0xfe;
if (key() != 0xff)
{
delay(10);
if (key() != 0xff)
{
a = key();
display(a);
break;
}
}
}
while (1)
{
P2 = 0xfd;
if (key() != 0xff)
{
delay(10);
if (key() != 0xff)
{
b = key();
display(b);
break;
}
}
}
while (1)
{
P2 = 0xfb;
if (key() != 0xff)
{
delay(10);
if (key() != 0xff)
{
c = key();
display(c);
break;
}
}
}
while (1)
{
P2 = 0xf7;
if (key() != 0xff)
{
delay(10);
if (key() != 0xff)
{
d = key();
display(d);
break;
}
}
}
result = (a - '0') * 1000 + (b - '0') * 100 + (c - '0') * 10 + (d - '0');
P1 = table[result];
while (1);
}
uchar key()
{
uchar temp;
temp = P2;
temp |= 0x0f;
if (temp != 0xff)
{
delay(100);
temp = P2;
temp |= 0x0f;
if (temp != 0xff)
{
return temp;
}
}
return 0xff;
}
void delay(uint i)
{
while (i--);
}
void display(uchar num)
{
P1 = table[num - '0'];
}
```
代码中使用了数组 `table` 来存储数码管显示的数字,`key()` 函数用于获取矩阵按键的值,`display()` 函数用于将输入的数字在数码管上显示。在主函数中,先分别获取四个数码管的输入值,然后计算减法结果并在数码管上显示。
需要注意的是,由于输入的是字符型数字,需要将其转换为整型进行计算。
阅读全文