說明文件

Button 的各種說明

Button 的各種說明

Button 的 狀態討論


/*---------------------------------------------------------------------------------------------------------*/
/*  Main Function                                                                                          */
/*---------------------------------------------------------------------------------------------------------*/
int32_t main(void)
{
    uint16_t cnt = 0;
    uint8_t STA = 0;

    /* Unlock protected registers */
    SYS_UnlockReg();
    /* Init System, peripheral clock and multi-function I/O */
    SYS_Init();
    /* Lock protected registers */
    SYS_LockReg();
    /* Init UART0 for printf */
    UART0_Init();


    while(1) {

        STA <<= 1;
        STA += PH0;
		printf("%d \n", PH0);
		TIMER_Delay(TIMER0, 1000000);
        STA &= 3;
        if(STA == 2) {
            cnt++;

            //printf("%d ", cnt);

        }
        //TIMER_Delay(TIMER0, 1000000);

    }

}

STA 原始值 00000000(0)

           二進制 (十進制)

STA :

第一圈 結果
00000000 左移一次 00000000
00000000+ PH0(1) [沒有按] 00000001
00000001 & 00000011(3) 00000001(1)
STA == 2 false
第二圈 結果
00000001 左移一次 00000010
00000010 + PH0(1) [沒有按] 00000011
00000011 & 00000011(3) 00000011(3)
STA == 2 false
第三圈 結果
00000011 左移一次 00000110
00000110 + PH0(1) [沒有按] 00000111
00000111 & 00000011(3) 00000011(3)
STA == 2 false
第四圈 結果
00000011 左移一次 00000110
00000110 + PH0(1) [沒有按] 00000111
00000111 & 00000011(3) 00000011(3)
STA == 2 false
第五圈 結果
00000011 左移一次 00000110
00000110 + PH0(0) [按下去] 00000110
00000110 & 00000011(3) 00000010(2)
STA == 2 true 印數字

(CPU執行很快,可能不小心print到數個數字)

第六圈 結果
00000010 左移一次 00000100
00000100 + PH0(0) [還按著] 00000100
00000100 & 00000011(3) 00000000(0)
STA == 2 false
第七圈 結果
00000000 左移一次 00000000
00000000 + PH0(0) [還按著] 00000000
00000000 & 00000011(3) 00000000(0)
STA == 2 false
第八圈 (等於第一圈) 結果
00000000 左移一次 00000000
00000000 + PH0(1) [沒有按] 00000001
00000001 & 00000011(3) 00000001(1)
STA == 2 false
comments powered by Disqus