89c51单片机简易计算器用数码管显示
时间: 2023-07-03 14:09:57 浏览: 152
这个问题涉及到硬件和软件两个方面的内容,下面给出一个简单的示例:
硬件部分:
1. 使用89c51单片机作为主控芯片。
2. 连接数码管,使用数码管的共阴极接法。
3. 连接按键,用于输入数字和运算符。
软件部分:
1. 初始化数码管和按键。
2. 循环读取按键输入,通过编程实现计算器的逻辑运算。
3. 将计算结果转换为数码管显示的格式,并输出到数码管上。
示例代码如下:
```
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1 = P1^0;
sbit D2 = P1^1;
sbit D3 = P1^2;
sbit D4 = P1^3;
sbit K1 = P3^0;
sbit K2 = P3^1;
sbit K3 = P3^2;
sbit K4 = P3^3;
sbit K5 = P3^4;
sbit K6 = P3^5;
sbit K7 = P3^6;
sbit K8 = P3^7;
uchar code seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// 数码管显示0~9的编码
void delay(uint ms)
{
uint i, j;
for(i = ms; i > 0; i--)
for(j = 114; j > 0; j--);
}
uchar getkey()
{
uchar key = 0xFF;
K1 = 0;
if(K2 == 0) key = 1;
if(K3 == 0) key = 2;
if(K4 == 0) key = 3;
K1 = 1;
K2 = 0;
if(K1 == 0) key = 4;
if(K3 == 0) key = 5;
if(K4 == 0) key = 6;
K2 = 1;
K3 = 0;
if(K1 == 0) key = 7;
if(K2 == 0) key = 8;
if(K4 == 0) key = 9;
K3 = 1;
K4 = 0;
if(K1 == 0) key = 0;
if(K2 == 0) key = '+';
if(K3 == 0) key = '-';
K4 = 1;
K5 = 0;
if(K1 == 0) key = '*';
if(K2 == 0) key = '/';
if(K3 == 0) key = '=';
K5 = 1;
return key;
}
void display(uchar num)
{
D1 = seg[num%10];
D2 = seg[num/10%10];
D3 = seg[num/100%10];
D4 = seg[num/1000%10];
}
void main()
{
uchar key;
uint a = 0, b = 0, result = 0;
uchar operator = 0;
while(1)
{
key = getkey();
if(key != 0xFF)
{
if(key >= 0 && key <= 9)
{
if(operator == 0)
{
a *= 10;
a += key;
display(a);
}
else
{
b *= 10;
b += key;
display(b);
}
}
else if(key == '+' || key == '-' || key == '*' || key == '/')
{
operator = key;
}
else if(key == '=')
{
switch(operator)
{
case '+': result = a + b; break;
case '-': result = a - b; break;
case '*': result = a * b; break;
case '/': result = a / b; break;
}
display(result);
a = result;
b = 0;
operator = 0;
}
}
delay(10);
}
}
```
注意:该示例代码仅供参考,实际实现需要根据具体的电路和需求进行调整。
阅读全文