尝试用 MSP430 制作多路复用计数器

问题描述 投票:0回答:0

我目前正在尝试使用 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”。

c microcontroller msp430 multiplexing code-composer
© www.soinside.com 2019 - 2024. All rights reserved.