用c语言写一个基于STC89C52单片机的四位计算器的设计的程序
时间: 2023-11-17 09:08:15 浏览: 122
基于STC89C52单片机的计算器.doc
5星 · 资源好评率100%
好的,下面是一个基于STC89C52单片机的四位计算器程序的代码,可以进行加、减、乘、除四则运算,并且可以在4位数码管上显示结果:
```c
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit KEY1 = P1^0; // 按键1
sbit KEY2 = P1^1; // 按键2
sbit KEY3 = P1^2; // 按键3
sbit KEY4 = P1^3; // 按键4
sbit KEY5 = P1^4; // 按键5
sbit KEY6 = P1^5; // 按键6
sbit KEY7 = P1^6; // 按键7
sbit KEY8 = P1^7; // 按键8
sbit LSA = P2^2; // 数码管选择位
sbit LSB = P2^3;
sbit LSC = P2^4;
sbit LSD = P2^5;
sbit DIO = P2^0; // 数码管数据位
sbit CLK = P2^1; // 数码管时钟位
uchar code table[] = { // 数码管显示表
0x3f, // '0'
0x06, // '1'
0x5b, // '2'
0x4f, // '3'
0x66, // '4'
0x6d, // '5'
0x7d, // '6'
0x07, // '7'
0x7f, // '8'
0x6f // '9'
};
uchar num1, num2, result; // 运算数和结果
uchar oper; // 运算符
void delay_ms(uint ms) // 延时函数,单位:毫秒
{
uint i, j;
for(i=0; i<ms; i++)
{
for(j=0; j<120; j++);
}
}
void display(uchar dat) // 数码管显示函数
{
uchar i;
for(i=0; i<8; i++)
{
DIO = dat & 0x01; // 取最低位
dat >>= 1; // 右移一位
CLK = 1;
CLK = 0;
}
}
void main()
{
while(1)
{
if(KEY1 == 0) // 按键1:加法
{
oper = '+';
num1 = 10;
num2 = 5;
result = num1 + num2;
}
if(KEY2 == 0) // 按键2:减法
{
oper = '-';
num1 = 10;
num2 = 5;
result = num1 - num2;
}
if(KEY3 == 0) // 按键3:乘法
{
oper = '*';
num1 = 10;
num2 = 5;
result = num1 * num2;
}
if(KEY4 == 0) // 按键4:除法
{
oper = '/';
num1 = 10;
num2 = 5;
result = num1 / num2;
}
if(KEY5 == 0) // 按键5:显示结果
{
LSA = 0; // 第一位(最高位)
LSB = 0;
LSC = 0;
display(table[result / 1000]);
delay_ms(5);
LSA = 1; // 第二位
LSB = 0;
LSC = 0;
display(table[result % 1000 / 100]);
delay_ms(5);
LSA = 0; // 第三位
LSB = 1;
LSC = 0;
display(table[result % 100 / 10]);
delay_ms(5);
LSA = 1; // 第四位(最低位)
LSB = 1;
LSC = 0;
display(table[result % 10]);
delay_ms(5);
}
if(KEY6 == 0) // 按键6:清零
{
num1 = 0;
num2 = 0;
result = 0;
LSA = 1;
LSB = 1;
LSC = 1;
display(0x00);
}
}
}
```
需要注意的是,这个程序仅仅是一个简单的示例,实际上需要根据具体的需求进行修改和完善。另外,这个程序中使用了一个基于移位寄存器的数码管显示函数,需要确保在每次显示前选择正确的位数。
阅读全文