標(biāo)題: 單片機(jī)按鍵程序單擊雙擊長(zhǎng)按有不同功能(c語(yǔ)言源程序) [打印本頁(yè)]

作者: 無(wú)奧運(yùn)    時(shí)間: 2017-8-14 14:34
標(biāo)題: 單片機(jī)按鍵程序單擊雙擊長(zhǎng)按有不同功能(c語(yǔ)言源程序)
uchar S_key = 2,D_key = 1,L_key = 3,N_key = 0;
bit b_key_led;
bit b_key_smg;

uchar key_drive(void)
{
        static uchar key_state;
        static uint key_time = 0;
        uchar key_return;
        key_return = N_key;

        switch(key_state)
        {
                case 0:
                {
                        if(!S1)
            {
                                key_state = 1;
                        }
                };break;
                case 1:
                {
                        if(!S1)
                        {
                                key_time = 0;
                                key_state = 2;
                        }
                        else
                        {
                                key_state = 0;
                        }
                };break;
                case 2:
                {
                        if(S1)
                        {
                                key_return = D_key;
                                key_state = 0;
                        }
                        else if(++key_time >= 1500)
                        {
                                key_return = L_key;
                                key_state = 3;
                        }
                };break;
                case 3:
                {
                        if(S1)
                        {
                                key_state = 0;
                        }
                };break;
        }
        return key_return;
}

uchar key_read(void)
{
        static uchar key_state_1,key_time_1 = 0;
        uchar key_return,key_temp;

        key_temp = key_drive();
        switch(key_state_1)
        {
                case 0:
                {
                        if(key_temp == D_key)
                        {
                                key_time_1 = 0;
                                key_state_1 = 1;
                        }
                        else
                        {
                                key_return = key_temp;
                        }
                };break;
                case 1:
                {
                        if(key_temp == D_key)
                        {
                                key_return = S_key;
                                key_state_1 = 0;
                        }
                        else if(++key_time_1 >= 250)
                        {
                                key_return = D_key;
                                key_state_1 = 0;
                        }
                };break;
        }
        return key_return;
}
void key_on(void)
{
        uchar state_1;
        state_1 = key_read();
        if(state_1 == S_key)     //雙擊
        {
                /*雙擊按鍵實(shí)現(xiàn)呼吸燈功能*/
                state_1 = 0;
                b_key_led = 1;
                b_key_smg = 0;
                seg = 0x00;
                seg_l = 0x00;
        }
        if(state_1 == D_key)     //單按
        {
                /*單擊實(shí)現(xiàn)數(shù)碼管走時(shí)*/
                state_1 = 0;
                b_key_smg = 1;
                b_key_led = 0;
                PW1D = 0x0000;
        }
        if(state_1 == L_key)     //長(zhǎng)按
        {
                /*長(zhǎng)按,實(shí)現(xiàn)你要實(shí)現(xiàn)的功能*/
        }
}



作者: 渴望壯大    時(shí)間: 2017-8-15 10:24
這不是我寫的嗎?尷尬
作者: whengfu    時(shí)間: 2017-8-15 18:58
渴望壯大 發(fā)表于 2017-8-15 10:24
這不是我寫的嗎?尷尬

能加點(diǎn)注釋不,大白看不懂程序
作者: zhongyude    時(shí)間: 2017-8-16 08:59

能加點(diǎn)注釋不,謝謝!
作者: 怪怪愛玩    時(shí)間: 2017-8-16 10:58
我也同意加點(diǎn)注釋就理能看明白 了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1