单片机msp430f149按键时能在数码管上显示相应数字的代码
时间: 2024-03-26 16:38:07 浏览: 64
MSP430F1XX单片机开发板实验例程源码-数码管.zip
以下是msp430f149按键时能在数码管上显示相应数字的代码:
```c
#include <msp430.h>
#define KEY BIT3
#define D1 BIT0
#define D2 BIT1
#define D3 BIT2
#define D4 BIT3
#define SEG_A BIT4
#define SEG_B BIT5
#define SEG_C BIT6
#define SEG_D BIT7
void delay(unsigned int t)
{
unsigned int i;
for (i = 0; i < t; i++);
}
void display(unsigned char num)
{
unsigned char seg_code[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x67, // 9
};
P2OUT = 0x00; // 关闭所有数码管
P1OUT = (num / 1000) << 4; // 数码管1显示千位
P2OUT = seg_code[num / 1000]; // 数码管1显示千位对应的段码
delay(1000);
P1OUT = (num % 1000 / 100) << 4; // 数码管2显示百位
P2OUT = seg_code[num % 1000 / 100]; // 数码管2显示百位对应的段码
delay(1000);
P1OUT = (num % 100 / 10) << 4; // 数码管3显示十位
P2OUT = seg_code[num % 100 / 10]; // 数码管3显示十位对应的段码
delay(1000);
P1OUT = (num % 10) << 4; // 数码管4显示个位
P2OUT = seg_code[num % 10]; // 数码管4显示个位对应的段码
delay(1000);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P1DIR |= (D1 | D2 | D3 | D4); // 设置数码管的控制引脚为输出
P1OUT &= ~(D1 | D2 | D3 | D4); // 初始数码管不显示
P2DIR |= (SEG_A | SEG_B | SEG_C | SEG_D); // 设置数码管的段选引脚为输出
P2OUT &= ~(SEG_A | SEG_B | SEG_C | SEG_D); // 初始数码管不显示
P1DIR &= ~KEY; // 设置KEY为输入
P1REN |= KEY; // 使能KEY的上拉电阻
P1OUT |= KEY; // 设置KEY上拉
while (1)
{
if ((P1IN & KEY) == 0) // 判断KEY是否按下
{
display(1234); // 按下KEY时在数码管上显示1234
}
else
{
P1OUT &= ~(D1 | D2 | D3 | D4); // 数码管不显示
}
}
}
```
代码说明:
1. 定义了按键所在的引脚为 `KEY`,数码管的控制引脚为 `D1`、`D2`、`D3`、`D4`,数码管的段选引脚为 `SEG_A`、`SEG_B`、`SEG_C`、`SEG_D`。
2. 定义了 `delay` 函数用于延时一段时间。
3. 定义了 `display` 函数用于在数码管上显示数字。该函数接受一个 `unsigned char` 类型的参数 `num`,表示要在数码管上显示的数字。
4. 在 `main` 函数中,先停用看门狗定时器。
5. 设置数码管的控制引脚和段选引脚为输出,初始状态数码管不显示。
6. 设置 `KEY` 为输入,使能上拉电阻,初始状态为高电平。
7. 进入死循环,判断 `KEY` 是否按下,如果按下则在数码管上显示1234,否则数码管不显示。
8. 循环结束。
注意事项:
1. 代码中使用了 P1.3 引脚作为按键,如果实际硬件电路不同,需要修改代码中的引脚定义。
2. 代码中使用了 P1.0、P1.1、P1.2、P1.3 引脚作为数码管控制引脚,如果实际硬件电路不同,需要修改代码中的引脚定义。
3. 代码中使用了 P2.4、P2.5、P2.6、P2.7 引脚作为数码管段选引脚,如果实际硬件电路不同,需要修改代码中的引脚定义。
4. 代码中使用了 GPIO 模块的输入输出控制寄存器(P1DIR、P1OUT、P1IN、P1REN、P2DIR、P2OUT),需要先了解相关知识后再使用。
阅读全文