51单片机键盘输入计算器
时间: 2023-10-30 13:06:53 浏览: 37
这是一个简单的51单片机键盘输入计算器的代码示例,可以实现基本的加减乘除运算:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 数码管显示0-9
uchar code table2[] = {0x3f,0x06,0x5b,0x4f}; // 数码管显示+ - * /
sbit beep = P1^5; // 蜂鸣器
sbit key1 = P3^0; // 按键1,数字1
sbit key2 = P3^1; // 按键2,数字2
sbit key3 = P3^2; // 按键3,数字3
sbit key4 = P3^3; // 按键4,加法
sbit key5 = P3^4; // 按键5,数字4
sbit key6 = P3^5; // 按键6,数字5
sbit key7 = P3^6; // 按键7,数字6
sbit key8 = P3^7; // 按键8,减法
sbit key9 = P2^0; // 按键9,数字7
sbit key10 = P2^1; // 按键10,数字8
sbit key11 = P2^2; // 按键11,数字9
sbit key12 = P2^3; // 按键12,乘法
sbit key13 = P2^4; // 按键13,清零
sbit key14 = P2^5; // 按键14,数字0
sbit key15 = P2^6; // 按键15,等于
sbit key16 = P2^7; // 按键16,除法
uchar num1 = 0; // 第一个数
uchar num2 = 0; // 第二个数
uchar sign = 0; // 运算符
uint result = 0; // 计算结果
// 数码管显示函数
void display(uchar dat, uchar pos) {
P0 = 0; // 关闭所有数码管
switch (pos) {
case 1: P0 = 0xfe; break; // 第1位
case 2: P0 = 0xfd; break; // 第2位
case 3: P0 = 0xfb; break; // 第3位
case 4: P0 = 0xf7; break; // 第4位
}
P0 = table[dat]; // 显示数字
}
// 延时函数
void delay(uint i) {
while (i--);
}
void main() {
while (1) {
if (!key1) { // 按键1按下
num1 = num1 * 10 + 1;
display(num1, 1);
}
if (!key2) { // 按键2按下
num1 = num1 * 10 + 2;
display(num1, 1);
}
if (!key3) { // 按键3按下
num1 = num1 * 10 + 3;
display(num1, 1);
}
if (!key4) { // 按键4按下
sign = 1; // 加法
display(10, 2); // 显示符号加号
delay(1000);
display(0, 2); // 清除符号
}
if (!key5) { // 按键5按下
num1 = num1 * 10 + 4;
display(num1, 1);
}
if (!key6) { // 按键6按下
num1 = num1 * 10 + 5;
display(num1, 1);
}
if (!key7) { // 按键7按下
num1 = num1 * 10 + 6;
display(num1, 1);
}
if (!key8) { // 按键8按下
sign = 2; // 减法
display(11, 2); // 显示符号减号
delay(1000);
display(0, 2); // 清除符号
}
if (!key9) { // 按键9按下
num1 = num1 * 10 + 7;
display(num1, 1);
}
if (!key10) { // 按键10按下
num1 = num1 * 10 + 8;
display(num1, 1);
}
if (!key11) { // 按键11按下
num1 = num1 * 10 + 9;
display(num1, 1);
}
if (!key12) { // 按键12按下
sign = 3; // 乘法
display(12, 2); // 显示符号乘号
delay(1000);
display(0, 2); // 清除符号
}
if (!key13) { // 按键13按下
num1 = 0; // 清零
num2 = 0;
sign = 0;
result = 0;
display(0, 1);
display(0, 2);
display(0, 3);
display(0, 4);
}
if (!key14) { // 按键14按下
num1 = num1 * 10;
display(num1, 1);
}
if (!key15) { // 按键15按下
num2 = num1; // 第二个数等于第一个数
num1 = 0; // 第一个数清零
display(0, 1);
if (sign == 1) { // 加法
result = num2 + num1;
display(10, 2); // 显示符号加号
} else if (sign == 2) { // 减法
result = num2 - num1;
display(11, 2); // 显示符号减号
} else if (sign == 3) { // 乘法
result = num2 * num1;
display(12, 2); // 显示符号乘号
} else if (sign == 4) { // 除法
result = num2 / num1;
display(13, 2); // 显示符号除号
}
display(result / 1000, 1);
display((result % 1000) / 100, 2);
display((result % 100) / 10, 3);
display(result % 10, 4);
delay(5000);
display(0, 1);
display(0, 2);
display(0, 3);
display(0, 4);
}
if (!key16) { // 按键16按下
sign = 4; // 除法
display(13, 2); // 显示符号除号
delay(1000);
display(0, 2); // 清除符号
}
}
}
```
这个计算器使用了4位共阳数码管进行显示,支持数字1-9、加减乘除、清零和等于操作。其中,数字1-9和0使用了16个按键进行输入。这个计算器的实现比较简单,但是在实际应用中,需要根据具体需求进行修改和优化。