51单片机简易计算器5位数运算代码
时间: 2023-11-13 08:03:50 浏览: 202
下面是一个简单的51单片机计算器程序,可以进行加、减、乘、除四则运算,且支持5位数运算:
```
#include <reg51.h>
sbit KEY_ADD = P1^0;
sbit KEY_SUB = P1^1;
sbit KEY_MUL = P1^2;
sbit KEY_DIV = P1^3;
sbit KEY_EQ = P1^4;
sbit KEY_CLR = P1^5;
void delay(unsigned int i)
{
while (i--);
}
void init()
{
TMOD = 0x01; //设置定时器0为模式1
TH0 = 0x3C; //设置定时器初值为0x3C
TL0 = 0xB0; //设置定时器初值为0xB0
TR0 = 1; //启动定时器
ET0 = 1; //打开定时器0中断
EA = 1; //打开总中断
}
void putc(unsigned char c)
{
SBUF = c;
while (!TI);
TI = 0;
}
void print(unsigned int n)
{
unsigned char i;
unsigned char buf[5];
buf[0] = n / 10000 + '0';
buf[1] = n / 1000 % 10 + '0';
buf[2] = n / 100 % 10 + '0';
buf[3] = n / 10 % 10 + '0';
buf[4] = n % 10 + '0';
for (i = 0; i < 5; i++)
{
putc(buf[i]);
}
}
void main()
{
unsigned char op = 0;
unsigned int a = 0, b = 0;
unsigned int result = 0;
init();
while (1)
{
if (KEY_ADD == 0)
{
delay(1000);
if (KEY_ADD == 0)
{
op = '+';
}
}
else if (KEY_SUB == 0)
{
delay(1000);
if (KEY_SUB == 0)
{
op = '-';
}
}
else if (KEY_MUL == 0)
{
delay(1000);
if (KEY_MUL == 0)
{
op = '*';
}
}
else if (KEY_DIV == 0)
{
delay(1000);
if (KEY_DIV == 0)
{
op = '/';
}
}
else if (KEY_EQ == 0)
{
delay(1000);
if (KEY_EQ == 0)
{
switch (op)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
}
print(result);
}
}
else if (KEY_CLR == 0)
{
delay(1000);
if (KEY_CLR == 0)
{
op = 0;
a = 0;
b = 0;
result = 0;
}
}
else
{
if (op == 0)
{
a = a * 10 + P0;
print(a);
}
else
{
b = b * 10 + P0;
print(b);
}
}
}
}
void timer0_isr() interrupt 1
{
TH0 = 0x3C; //重新设置定时器初值为0x3C
TL0 = 0xB0; //重新设置定时器初值为0xB0
P0 = 0xFF; //设置P0口为输入
}
```
在程序中,我们使用了51单片机的定时器0来实现按键消抖功能,使用了串口通信来输出结果。程序的基本思路是通过按键输入数字和操作符,然后进行计算并输出结果。
需要注意的是,本程序中只考虑了正整数的四则运算,没有进行异常处理,比如除数为0等情况。在实际开发中,还需要根据实际情况进行修改和完善。
阅读全文