51单片机只有数码管和按钮编程简单计算器
时间: 2023-05-29 09:03:19 浏览: 128
51单片机编的简易计算器
5星 · 资源好评率100%
本例程序基于STC89C52单片机,实现一个简单的计算器功能,通过数码管显示计算结果,通过4个按钮进行数字输入和运算符选择。
主要思路为:
1.定义数码管显示函数及按键扫描函数。
2.定义全局变量存储输入的数字和运算符,以及计算结果。
3.通过按键扫描函数实现数字和运算符的输入和清除操作。
4.通过计算函数实现加减乘除四则运算,并将结果显示在数码管上。
以下为完整代码:
```
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DULA=P2^6;
sbit WELA=P2^7;
uchar num1=0,num2=0,result=0,oper=0;
//num1,num2分别存储输入的两个数字,result存储计算结果,oper存储运算符
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //0~9的段码
0x77,0x7c,0x39,0x5e,0x79,0x71 //A~F的段码
};
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar dat,uchar pos)
{
DULA=1;
P0=table[dat/10];
DULA=0;
delay(5);
DULA=1;
P0=table[dat%10];
DULA=0;
delay(5);
WELA=1;
P0=pos;
WELA=0;
delay(5);
}
uchar key_scan()
{
uchar val=0;
if(P3!=0xff)
{
delay(10);
if(P3!=0xff)
{
switch(P3)
{
case 0xfe:val=1;break;
case 0xfd:val=2;break;
case 0xfb:val=3;break;
case 0xf7:val=4;break;
}
while(P3!=0xff);
}
}
return val;
}
void main()
{
uchar i=0;
while(1)
{
i=key_scan();
switch(i)
{
case 1:num1=num1*10+1;break;
case 2:num1=num1*10+2;break;
case 3: //运算符选择
if(num1!=0)
{
oper=3;
num2=num1;
num1=0;
}
break;
case 4: //计算
switch(oper)
{
case 0:result=num1;break;
case 1:result=num2+num1;break;
case 2:result=num2-num1;break;
case 3:result=num2*num1;break;
case 4:result=num2/num1;break;
}
num1=0;
num2=0;
oper=0;
break;
}
display(num1,0x01);
display(num2,0x02);
display(result,0x03);
}
}
```
阅读全文