久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3009|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)按鍵程序,支持連按(中斷實現(xiàn))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:222142 發(fā)表于 2018-9-26 09:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "INT.h"

void INT_Initial(void)
{        
        INTEDG = 0;                                //0 下降沿觸發(fā)  1 上升沿觸發(fā)
        
        TRISBbits.TRISB0 = 1;        //RB0設(shè)置為輸入
        LATBbits.LATB0 = 1;                //設(shè)置初始狀態(tài)位高電平 , 為下降沿觸發(fā)中斷做準(zhǔn)備
        
        INTCONbits.GIE = 1;                //允許所有中斷
        INTCONbits.PEIE = 1;        //允許外設(shè)中斷
        
        /*外部中斷初始位*/
        INTCONbits.INTE = 1;        //允許外部中斷
        INTCONbits.INTF = 0;        //外部中斷標(biāo)志位清0
        
        /*定時器0中斷初始位*/
        INTCONbits.TMR0IE = 1;        //允許定時器0溢出中斷
        INTCONbits.TMR0IF = 0;        //定時器0溢出中斷標(biāo)志位清0
        
        /*定時器1中斷初始位*/
        PIE1bits.TMR1IE = 1;        //允許定時器1溢出中斷
        PIR1bits.TMR1IF = 0;        //定時器1溢出中斷標(biāo)志位清0
        
        /*ADC中斷初始位*/
        PIE1bits.ADIE = 1;                //允許ADC中斷
        PIR1bits.ADIF = 0;                //ADC中斷標(biāo)志位清0
        
}        

void Get_KeyValue(void)
{

    if((timing_s_count2 - key_keep_time) < 1)
    {
            switch (key_value_buffer){
                case 0xFE://S1 K1 RF0
                    KeyCode = KEY_ENTER;
                    break;
//                case 0xFD://S3 K2 RF1
//                    KeyCode = KEY_UP;
//                    break;
                case 0xFB://S5 K3 RF2
                    KeyCode = KEY_LIGHT;
                    break;
//                case 0xF7://S7 K4 RF3
//                    KeyCode = KEY_DOWN;
//                    break;
                case 0xEF://S2 K5 RF4
                    KeyCode = KEY_BACK;
                    break;
                case 0xDF://S4 K6 RF5
                    KeyCode = KEY_FAN;
                    break;
//                case 0xBF://S6 K7 RF6
//                    KeyCode = KEY_STDBY;
//                    break;
                case 0x7F://S8 K8 RF7
                    KeyCode = KEY_SETUP;
                    break;
                default:
                    KeyCode = 0;
                    break;
                           }                        
    }


    key_action_flag = 0;
}


void Get_key_valve_Long_press(void)
{
           if((timing_s_count2 - key_keep_time) > 1)
                {
        switch (key_value_buffer)
                {
            case 0xFE:
                KeyCode = KEY_SETUP;
                break;               
                case 0xBF://S6 K7 RF6
                    KeyCode = KEY_STDBY;
                    break;
            default:
                key_action_flag_Long_press = 0;
                break;
                        }
                        key_action_flag_Long_press = 0;
                  }         

}
void Get_key_valve_continuty(void)
{
                if(key_action_flag_continuty == 1)
                {
                 switch (PORTF){
                case 0xFD://S3 K2 RF1
                    test_show_num = KEY_UP;
                    break;
                case 0xF7://S7 K4 RF3
                    test_show_num = KEY_DOWN;
                    break;
                default:
                test_show_num = 0;
                break;
                           }        
            }

}


void interrupt ISR(void)
{
        /*定時器0中斷服務(wù)程序段*/
        if(TMR0IE & TMR0IF)
        {        
                TMR0 = 0x07;
               
                timing_ms_count1++;
                timing_ms_count3++;
        
               
                if(timing_ms_count1 % 300 == 0 && timing_ms_count1 != 0)
                {
                        if(S16 == 1)
                        {
                                S15 = ~S15;
                        }
                        
                        if(S11 == 1)
                        {
                                S12 = ~S12;
                        }
                        
                        if(warning_flag == 1)
                        {
                                S1 = ~ S1;
                        }        
                }
               
                if(timing_ms_count1 % 500 == 0 && timing_ms_count1 != 0)
                {
                        timing_half_s_count1++;
                }
               
                if(timing_ms_count1 % 450 == 0 && timing_ms_count1 != 0)
                {
                        LCD_showFanrun();
                }                                
               
                TMR0IF = 0;
        }        
        
        /*定時器1中斷服務(wù)程序段*/
        if(TMR1IE & TMR1IF)
        {
                TMR1H = 0xFF;
                TMR1L = 0x08;        
                        
                timing_ms_count2++;               
                if(timing_ms_count2 % 1000 == 0)
                {                        
                        /*計時時間處理*/
                        if(S13 == 1)
                        {
                                timing_count_sec_set--;
                        }
                        
                        Key_isrelease_time++;        //按鍵釋放時間計時
                        
                        timing_s_count1++;                //秒計時器1(未用)
                        
                        /*系統(tǒng)運(yùn)行時間處理*/
                        timing_s_count2++;                                       
                        if(timing_s_count2 % 60 == 0)
                        {
                                timing_s_count2 = 0;
                                sys_time_minute++;
                                if(sys_time_minute % 30 == 0)
                                {
                                        sys_time_minute=0;
                                        sys_time_half_hour++;        //運(yùn)行半小時計時
                                        if(sys_time_half_hour % 1440 == 0)
                                        {
                                                sys_time_half_hour = 0;
                                                sys_time_month++;//運(yùn)行月份計時
                                        }        
                                }               
                        }               
                }
               
               
               
                if((PORTF != 0xFF) && (key_action_flag == 1))
                {
                                Get_KeyValue();
                        
                                key_count = 0;
                                
                }
               
                if((PORTF != 0xFF) && (key_action_flag_Long_press == 1))
                {
                                Get_key_valve_Long_press();
                }
               
                if((PORTF != 0xFF) && (key_action_flag_continuty == 1))
                {
                                Get_key_valve_continuty();
                }
               
                if(timing_ms_count2 % 200 == 0)
                {               
                        if((test_show_num == KEY_UP) || (test_show_num == KEY_DOWN))
                                KeyCode = test_show_num;
                                
                }
                if(PORTF == 0xFF)
                {
                                test_show_num = 0;
                                key_action_flag_continuty == 0;
                }
               
                if((KeyCode == KEY_UP) || (KeyCode == KEY_DOWN))
        {
            Key_isrelease_time = 0;
            }
                        
                TMR1IF = 0;
        }
        
        /*外部中斷服務(wù)程序段*/
        if(INTF == 1)
        {
                if(PORTF != 0xFF && key_action_flag == 0)
                {
                        key_action_flag = 1;
                        key_action_flag_Long_press = 1;
                        key_action_flag_continuty = 1;
                        key_value_buffer = PORTF;
                        key_keep_time = timing_s_count2;
                }
                                
                INTF = 0;
                INTE = 0;
                TRISBbits.TRISB0 = 0;
                LATBbits.LATB0 = 1;
                TRISBbits.TRISB0 = 1;
        }
        
        /*ADC中斷服務(wù)程序段*/
//        if(ADIE & ADIF)
//        {
//                ADIF = 0;
//        }                        
}        

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-9-26 15:45 | 只看該作者
補(bǔ)全原理圖或者詳細(xì)說明一下電路連接即可獲得100+黑幣
回復(fù)

使用道具 舉報

板凳
ID:66287 發(fā)表于 2018-9-27 09:29 | 只看該作者
高手!一句注釋都沒有,真高人
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日屁网站 | av手机免费在线观看 | 欧美日韩国产欧美 | 欧美成人高清 | 91久色 | 国产乱码精品一区二三赶尸艳谈 | 日韩一区二区黄色片 | 狠狠干av | 亚洲在线视频 | 国产91一区二区三区 | 国产成人精品一区二区 | 国产精品久久久久久妇女6080 | 精品视频一区二区 | 欧美一级久久 | 自拍偷拍第一页 | 午夜不卡一区二区 | 国产精品久久久久久妇女 | 亚洲国产成人精品久久久国产成人一区 | 天堂中文在线观看 | 欧美精品乱码99久久影院 | 欧美日韩在线视频一区 | 久久久久久亚洲精品 | 五月婷婷色 | 午夜男人天堂 | 精品久久av | 日韩在线观看 | 欧美激情一区二区三区 | 黄色大片毛片 | 日韩久久网 | 亚洲一区欧美一区 | 亚洲成人av | 青青久久久 | 观看av| 国产精品久久av | 国产成人精品久久久 | 天天躁日日躁xxxxaaaa | 国产精品视频免费观看 | 超碰免费在 | 99tv| 久久久久久国产精品 | 久久九九99 |