找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 6512|回復: 4
打印 上一主題 下一主題
收起左側

單片機按鍵程序單擊雙擊長按有不同功能(c語言源程序)

[復制鏈接]
跳轉到指定樓層
樓主
ID:223191 發(fā)表于 2017-8-14 14:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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)     //雙擊
        {
                /*雙擊按鍵實現(xiàn)呼吸燈功能*/
                state_1 = 0;
                b_key_led = 1;
                b_key_smg = 0;
                seg = 0x00;
                seg_l = 0x00;
        }
        if(state_1 == D_key)     //單按
        {
                /*單擊實現(xiàn)數(shù)碼管走時*/
                state_1 = 0;
                b_key_smg = 1;
                b_key_led = 0;
                PW1D = 0x0000;
        }
        if(state_1 == L_key)     //長按
        {
                /*長按,實現(xiàn)你要實現(xiàn)的功能*/
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:188935 發(fā)表于 2017-8-15 10:24 | 只看該作者
這不是我寫的嗎?尷尬
回復

使用道具 舉報

板凳
ID:92231 發(fā)表于 2017-8-15 18:58 來自觸屏版 | 只看該作者
渴望壯大 發(fā)表于 2017-8-15 10:24
這不是我寫的嗎?尷尬

能加點注釋不,大白看不懂程序
回復

使用道具 舉報

地板
ID:222635 發(fā)表于 2017-8-16 08:59 | 只看該作者

能加點注釋不,謝謝!
回復

使用道具 舉報

5#
ID:227864 發(fā)表于 2017-8-16 10:58 | 只看該作者
我也同意加點注釋就理能看明白 了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表