mp430单片机制作简易计算器
时间: 2023-07-04 22:30:16 浏览: 156
单片机实现简单计算器
要在 MSP430 单片机上实现简易计算器,需要连接按键和显示屏,并编写相应的程序。以下是一个简单的示例代码,实现了加减乘除四种运算:
```c
#include "msp430g2553.h"
// 7段数码管编码表
const unsigned char numCode[10] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6};
unsigned char num1 = 0; // 第一个数字
unsigned char num2 = 0; // 第二个数字
unsigned char op = 0; // 运算符
unsigned char result = 0; // 运算结果
// 显示一个数字
void showNum(unsigned char num) {
P1OUT &= ~BIT2; // 选择第一个数码管
P2OUT = numCode[num % 10]; // 显示个位数
__delay_cycles(1000);
P2OUT = 0x00; // 关闭数码管
P1OUT |= BIT2; // 选择第二个数码管
P2OUT = numCode[num / 10]; // 显示十位数
__delay_cycles(1000);
P2OUT = 0x00; // 关闭数码管
}
// 获取按键值
unsigned char getKey() {
unsigned char keyVal = 0;
P1DIR &= ~BIT3; // P1.3设为输入
P1REN |= BIT3; // P1.3使能上拉电阻
P1OUT |= BIT3; // P1.3上拉
__delay_cycles(1000);
if ((P1IN & BIT3) == 0) {
__delay_cycles(50000);
if ((P1IN & BIT3) == 0) {
keyVal = 1; // 按键1
}
}
P1DIR &= ~BIT4; // P1.4设为输入
P1REN |= BIT4; // P1.4使能上拉电阻
P1OUT |= BIT4; // P1.4上拉
__delay_cycles(1000);
if ((P1IN & BIT4) == 0) {
__delay_cycles(50000);
if ((P1IN & BIT4) == 0) {
keyVal = 2; // 按键2
}
}
P1DIR &= ~BIT5; // P1.5设为输入
P1REN |= BIT5; // P1.5使能上拉电阻
P1OUT |= BIT5; // P1.5上拉
__delay_cycles(1000);
if ((P1IN & BIT5) == 0) {
__delay_cycles(50000);
if ((P1IN & BIT5) == 0) {
keyVal = 3; // 按键3
}
}
P1DIR &= ~BIT6; // P1.6设为输入
P1REN |= BIT6; // P1.6使能上拉电阻
P1OUT |= BIT6; // P1.6上拉
__delay_cycles(1000);
if ((P1IN & BIT6) == 0) {
__delay_cycles(50000);
if ((P1IN & BIT6) == 0) {
keyVal = 4; // 按键4
}
}
return keyVal;
}
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P1DIR |= BIT2; // P1.2设为输出
P2DIR |= 0xFF; // P2口设为输出
while (1) {
// 获取第一个数字
while (num1 == 0) {
num1 = getKey();
showNum(num1);
}
// 获取运算符
while (op == 0) {
op = getKey();
switch (op) {
case 1: // 加法
P1OUT |= BIT0; // 点亮P1.0(加号)
break;
case 2: // 减法
P1OUT |= BIT1; // 点亮P1.1(减号)
break;
case 3: // 乘法
P1OUT |= BIT0 | BIT1; // 点亮P1.0和P1.1(乘号)
break;
case 4: // 除法
P1OUT |= BIT2; // 点亮P1.2(除号)
break;
default:
break;
}
}
// 获取第二个数字
while (num2 == 0) {
num2 = getKey();
showNum(num2);
}
// 进行运算
switch (op) {
case 1: // 加法
result = num1 + num2;
break;
case 2: // 减法
result = num1 - num2;
break;
case 3: // 乘法
result = num1 * num2;
break;
case 4: // 除法
result = num1 / num2;
break;
default:
break;
}
// 显示结果
showNum(result);
// 清零变量,准备下一次运算
num1 = 0;
num2 = 0;
op = 0;
result = 0;
P1OUT &= ~(BIT0 | BIT1 | BIT2); // 关闭所有运算符LED
}
}
```
这段代码使用 MSP430 GPIO 控制连接的 7 段数码管和按键,通过按键输入两个数字和运算符,然后计算结果并在数码管上显示。您可以根据需要进行修改和扩展。注意,为了让程序看起来更简洁,这里省略了一些必要的初始化和配置代码,使用前需要根据具体硬件环境进行配置。
阅读全文