51单片机做四位计算器要求能进行四则运算,除法要保留到后两位,简单一点的代码
时间: 2024-01-25 14:02:31 浏览: 20
很好,我可以回答这个问题。以下是51单片机做四位计算器,可进行四则运算,除法保留到后两位的简单代码:
```
#include <reg52.h>
#include <stdio.h>
#define KEY P1
unsigned char code tab_num[]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; //用于数码管显示0~9
unsigned char code tab_duan[]={0xfe,0xfd,0xfb,0xf7}; //位选
bit flag; //标志位,判断是否计算结果
unsigned int result; //储存运算结果
void delay(unsigned int i) //延时
{
while(i--);
}
void display(unsigned int num) //数码管显示函数
{
unsigned int i,wei;
for(i=0;i<4;i++)
{
wei=num%10; //取出最低位
num/=10; //去掉最低位
P0=tab_num[wei]; //选择段码
P2=tab_duan[i]; //选择位码
delay(50); //延时一段时间,防止闪烁
}
}
void keyscan() //键盘扫描函数
{
unsigned int x, y, z;
x = KEY; //读取按键值
delay(5); //消抖
y = KEY; //再次读取
if(x == y) //如果两次读取的值一样,说明按键有效
{
switch (x) //判断按下的按键
{
case 0x7e:flag=1;z=0;break; // +键
case 0xbd:flag=1;z=1;break; // -键
case 0xeb:flag=1;z=2;break; // *键
case 0xd7:flag=1;z=3;break; // /键
case 0x7d:flag=1;result=0;break; // C键:清零
case 0xbe:flag=1;break; // =键
default:
z = x - 48; //0~9数字键
result = result * 10 + z; //计算运算结果
display(result); //实时显示当前结果
}
}
}
void main()
{
while(1)
{
keyscan();
if(flag==1) //如果有计算结果,进行运算
{
switch(KEY) //判断按下的运算符号
{
case 0xeb: //乘法
result=result/z; //防止溢出
display(result*z);
break;
case 0xd7: //除法,保留后两位小数
result=result/z; //防止溢出
printf("result=0x%04x",result); //输出结果,方便调试
if(result%100>=50)result=result/100*100+100; //四舍五入
else result=result/100*100;
display(result);
break;
case 0xbf: //加法
result=result+z;
display(result);
break;
case 0xbd: //减法
result=result-z;
display(result);
break;
}
flag=0; //恢复标志位,等待下次输入
}
}
}
```
希望我的回答能对你有所帮助。