我目前正在尝试使用 msp430f5529 launchpad 使用 4 位 7 段显示器使计数器从 30 变为 0,但我无法让它计数并且显示器仅显示“1”。我不知道错误可能出在哪里,因为我是微控制器的新手。预先感谢您的任何帮助。我正在使用 code composer studio 来制作这段代码。
#include <msp430.h>
#define delay_ms 100
int main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
volatile unsigned int valor=30; int unidades = valor%10; int decenas = valor/10;
P2DIR = 0xFF; // Todo el puerto 2 de salida (segmentos)
PJDIR = 0x0F; // Bits de salida PJ.3 PJ.2 PJ.1 PJ.0 (digitos)
while(1)
{
PJOUT &=~ 0xFF;
PJOUT |= 0x08;
for(valor=30;valor>0;valor++)
{
imprimir_numero(decenas);
__delay_cycles(delay_ms);
PJOUT &=~ 0xFF;
PJOUT |= 0x04;
imprimir_numero(unidades);
__delay_cycles(delay_ms);
} // Termina for
valor--;
}
return 0;
}
void imprimir_numero (unsigned int numero)
{
P2OUT &=~ 0xFF; // Forzar todos los bits a estar apagados
switch(numero)
{
case 0: P2OUT |= 0x3F;
break;
case 1: P2OUT |= 0x06;
break;
case 2: P2OUT |= 0x5B;
break;
case 3: P2OUT |= 0x4F;
break;
case 4: P2OUT |= 0x66;
break;
case 5: P2OUT |= 0x6D;
break;
case 6: P2OUT |= 0x7D;
break;
case 7: P2OUT |= 0x07;
break;
case 8: P2OUT |= 0x7F;
break;
case 9: P2OUT |= 0x6F;
break;
}
}
我尝试更改 __delay_cycles 并使用 for 函数(也许我没有以正确的方式实现它)。我期望通过多路复用得到一个从 30 到 0 的计数器,它具有 4 位 7 段显示,但似乎没有用。我得到的结果只是我的显示器在循环中打开和关闭显示“1”。