单片机简单的计算器c语言程序,51单片机实现简单计算器C语言程序+Proteus仿真
时间: 2024-02-12 16:08:23 浏览: 45
好的,下面是一个简单的计算器C语言程序,可以在51单片机上实现,同时也可以在Proteus仿真中运行:
```c
#include <reg51.h> // 51单片机头文件
sbit ADD=P3^0; // 加法按键
sbit SUB=P3^1; // 减法按键
sbit MUL=P3^2; // 乘法按键
sbit DIV=P3^3; // 除法按键
sbit CLR=P3^4; // 清零按键
sbit OK=P3^5; // 确认按键
unsigned char num1,num2; // 两个操作数
unsigned char op; // 操作符
unsigned char result; // 运算结果
void delay(unsigned int i) // 延时函数
{
unsigned int j,k;
for(j=i;j>0;j--)
{
for(k=110;k>0;k--);
}
}
void display(unsigned char dat) // 数码管显示函数
{
P2=dat; // 将数码管的值赋给P2口
delay(5); // 延时一段时间,使数码管显示刷新
}
void main()
{
while(1)
{
if(ADD==0) // 加法按键按下
{
op='+';
delay(10); // 延时去抖
while(ADD==0); // 等待按键释放
}
else if(SUB==0) // 减法按键按下
{
op='-';
delay(10); // 延时去抖
while(SUB==0); // 等待按键释放
}
else if(MUL==0) // 乘法按键按下
{
op='*';
delay(10); // 延时去抖
while(MUL==0); // 等待按键释放
}
else if(DIV==0) // 除法按键按下
{
op='/';
delay(10); // 延时去抖
while(DIV==0); // 等待按键释放
}
else if(CLR==0) // 清零按键按下
{
num1=0;
num2=0;
op=0;
result=0;
display(0xff); // 数码管全灭
delay(10); // 延时去抖
while(CLR==0); // 等待按键释放
}
else if(OK==0) // 确认按键按下
{
switch(op) // 根据操作符进行运算
{
case '+': result=num1+num2; break;
case '-': result=num1-num2; break;
case '*': result=num1*num2; break;
case '/': result=num1/num2; break;
}
num1=0;
num2=0;
op=0;
display(result); // 显示运算结果
delay(10); // 延时去抖
while(OK==0); // 等待按键释放
}
else // 数字键按下
{
if(op==0) // 如果操作符为0,表示正在输入第一个操作数
{
num1=num1*10+P1; // 将输入的数字累加到num1中
display(num1); // 显示num1
delay(10); // 延时去抖
while(P1!=0xff); // 等待按键释放
}
else // 否则表示正在输入第二个操作数
{
num2=num2*10+P1; // 将输入的数字累加到num2中
display(num2); // 显示num2
delay(10); // 延时去抖
while(P1!=0xff); // 等待按键释放
}
}
}
}
```
这个程序实现了简单的加减乘除计算,同时也有清零和确认功能。在程序中,通过检测按键的状态来进行相应的操作。同时,也使用了延时函数和数码管显示函数来实现计算器的基本功能。
在Proteus仿真中,可以使用51单片机模拟器来运行这个程序。将程序烧录到单片机中,然后将数码管和按键连接到相应的引脚上即可。在仿真中,可以通过按下按键来模拟输入数字和操作符,然后观察数码管的显示结果来验证计算器的正确性。