仅将Thumbwheel数据发送到串行一次

时间:2016-11-21 03:51:37

标签: c avr

我在我的项目上使用指轮。我只需要将数据发送到串口一次,这样收件人就可以用它做一些事情。但是,我制作的代码不断向连续发送数据,有人可以开导我吗?而且,我正在使用AVR btw。

这是我的代码`

uint8_t fii = 0;
uint8_t previousfii = 0;


int main(void)
{
    setUp32MhzInternalOsc();
    setUpSerial();

    stdout = &usart_output;
    stdin = &usart_input;


   //thumbwheel 2B
   PORTF.DIRCLR     =    PIN1_bm;
   PORTF.PIN1CTRL   =    PORT_OPC_PULLUP_gc;

   PORTF.DIRCLR     =    PIN2_bm;
   PORTF.PIN2CTRL   =    PORT_OPC_PULLUP_gc;

   PORTF.DIRCLR     =    PIN3_bm;
   PORTF.PIN3CTRL   =    PORT_OPC_PULLUP_gc;


while(1)
{


    //thumbwheel 2B 
    if (!(PORTF.IN&PIN3_bm))
    {
        if (fii != 1)
        {
            fii = fii+1;
        }
    }

    if (!(PORTF.IN&PIN1_bm))
    {
        if (fii != 2)
        {
            fii = fii+2;
        }
    }

    if (!(PORTF.IN&PIN2_bm))
    {
        if (fii != 4)
        {
            fii = fii+4;
        }
    }


    printf("%d\n", fii);
    fii = 0;
    //_delay_ms(500);

}


            }

1 个答案:

答案 0 :(得分:1)

如果每次更改时发送fii就足够了。所以使用这样的东西:

int main(void) {
    uint8_t fii = 0;
    uint8_t previousFii = 0;

    // < other init code here >

    while(1) {
        // < your other code here >

        if (fii != previousFii) {
            previousFii = fii;
            printf("%d\n", fii);
        }
    }
}