Pin 1.3step计数器:修改代码,以使每次按下按钮时LED都以二进制顺序步进。
我在微控制器上编程相对较新。所以以上就是我正在尝试做的事情。但是,在尝试使其按二进制顺序步进时,该按钮似乎停止工作,因此所有LED均未闪烁。我不确定发生了什么变化,因为以前无需按按钮即可运行良好。与朋友比较,看起来很一样,所以出了什么问题。
这是我的代码。
#include <msp430.h>
/*
* main.c
*/
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
volatile unsigned int i;
volatile unsigned int j;
P1DIR |= 0x41; // Set P1.0 to output direction
P1DIR &=~(BIT3); // Ensure P1.3 is an input
P1REN |= BIT3; // Set pulling Resistor for P1.3
P1OUT |= BIT3; // Make the pulling resistor for P1.3 a pull-UP resistor
j=0; // Button presses set to 0
P1OUT &=~0x01;
while (1) // Test P1.3
{
if ((BIT3 & P1IN)) { // if P1.3 set, set P1.0 turning on the LED
if (j == 0)
P1OUT &= ~0x41;
if (j == 1) {
P1OUT |= 0x01;
P1OUT &= ~0x40;
}
if (j == 2) {
P1OUT &= ~0x01;
P1OUT |= 0x40;
}
if (j == 3)
P1OUT |= 0x41;
else {
for (i=3000; i>0; i--);
if (j == 3)
j++;
else
j = 0;
}
while ((BIT3 & P1IN));
}
}
}
答案 0 :(得分:0)
只有j
才增加j == 3
。因此,j始终保持为0,这意味着所有LED均熄灭。您还错过了其他项目之前的结尾括号。使用正确的缩进格式设置代码有助于发现此类错误。
while (1)
{
if ((BIT3 & P1IN))
{
if (j == 0)
{
P1OUT &= ~0x41;
}
if (j == 1)
{
P1OUT |= 0x01;
P1OUT &= ~0x40;
}
if (j == 2)
{
P1OUT &= ~0x01;
P1OUT |= 0x40;
}
if (j == 3)
{
P1OUT |= 0x41;
}
}
else
{
for (i=3000; i>0; i--);
// here I exchanged the == with <
if ( j < 3 )
{
j++;
}
else
{
j = 0;
}
}
while ((BIT3 & P1IN));
}