单片机433无线模块遥控长按(有结束码的情况)短按 和普通独立按键的多个按键同时按下触发,和433模块滚动码的单按键学习和多按键学习

Rf_Cnt = 1;/*********************按键1**************************************//***********************按键2************************************/
摘要由CSDN通过智能技术生成

KEY按键
/***************引脚定义*************/
sbit Photoelectric_switch_1 = P3^3;
sbit Photoelectric_switch_2 = P1^5;
sbit KEY_1 = P1^3; 
sbit KEY_2 = P1^4;
unsigned int PhotoelectricA_i,PhotoelectricB_i;//记次
/***********************************/
bit Photoelectric_switch1_sign = 0;
bit Photoelectric_switch2_sign = 0; //判断是否有遮挡
//光电开关 
void Photoelectric_switch()
{
    //2个AB光电开关(低电平有效)有遮挡相对应AB组数码管计数+1
    /****光电开关A***/
    if(Photoelectric_switch_1 == 0)
    {
        PhotoelectricA_i++;
        if(PhotoelectricA_i>=6) PhotoelectricA_i=6;//记次消抖
    }
    else
    {
        if(PhotoelectricA_i>=6)
        {
            if(fraction1<99){fraction1++;Pulse_Num = 15;}
        }
        PhotoelectricA_i=0;
    }
    /****光电开关B***/
    if(Photoelectric_switch_2 == 0)
    {
        PhotoelectricB_i++;
        if(PhotoelectricB_i>=6) PhotoelectricB_i=6;
    }
    else
    {
        if(PhotoelectricB_i>=6)
        {
            if(fraction2<99){fraction2++;Pulse_Num = 16;}
        }
        PhotoelectricB_i=0;
    }
}
/******************/
//主板按键用的变量
bit KEY1__IO_Sign;
bit KEY1_Sign,KEY2_Sign,KEY_Sign ; //按键自锁标志位
bit KEY_NAB;
bit KEY1_ShortPress_Flag=0,KEY2_ShortPress_Flag=0,KEY_ShortPress_Flag=0; //按键短按标志位
bit KEY1_LongPress_Flag=0,KEY2_LongPress_Flag=0,KEY_LongPress_Flag=0; //按键长按标志位
unsigned int KEY1_Time,KEY2_Time,KEY_Time; //按键按下时间计数
//  按键排列 按键1 | 按键2
unsigned char KEY12_lock_flag,KEY12_can;
unsigned char KEY12_flag;

bit External_Entering_Learning_Sign = 0;//外部可调用的保存标志位
/****************/
void KEY_Init()//10MS进一次
{
    /******两个按键同时按下*******/
    if((KEY_1 == 0)&&(KEY_2 == 0))
    {
        KEY_Time++;
        KEY2_Time = 0;
        KEY1_Time = 0;
        if(KEY_Time>2)
        {
            KEY12_flag = 1; //两个按键同时按下短按
        }
        if(KEY_Time>=500) //两个按键同时长按5S
        {
            KEY_Time = 500;
            KEY_Sign = 1;
            KEY_LongPress_Flag = 1; //按键同时长按标志位
        }
    }
    /*********************按键1**************************************/        
    else if((KEY_1 == 0)&&(KEY12_flag==0))
    {
        KEY1_Time++;
        
        if(KEY1_Time>=700) //长按7S切换时间的分秒显示
        {
            KEY1_Time = 700;
            KEY1_Sign = 1;
            KEY1_LongPress_Flag = 1;//按键长按标志位
            
        }
        else KEY1_Sign = 0; 
    }
    /***********************按键2************************************/
    else if((KEY_2 == 0)&&(KEY12_flag==0))
    {
        KEY2_Time++;
        if(KEY2_Time>=700)//按长7S设置上下电后设置n分钟到时提醒时间
        {
            KEY2_Time = 700;
            KEY2_Sign = 1;
            KEY2_LongPress_Flag = 1;//按键长按标志位
        }
        else KEY2_Sign = 0;
    }
    /**********************************************************/
    else //按键全部没按就是松手
    {
        if((KEY2_Sign==0)&&(KEY1_Sign==0)&&(KEY_Sign==0))
        {
            if(KEY_Time>=2)
            {
                KEY_ShortPress_Flag = 1; //点按保存遥控地址码和健码值
            }
            else if(KEY1_Time>2&&KEY12_flag==0)
            {
                KEY1_ShortPress_Flag = 1; //点按调音量
            }
            else if(KEY2_Time>2&&KEY12_flag==0)
            {
                KEY2_ShortPress_Flag = 1;//点按切换显示模式
            }
        }
        KEY1_Sign = 0;
        KEY2_Sign = 0;
        KEY_Sign = 0; //三个按键的长按标志位清除
        KEY2_Time = 0;
        KEY1_Time = 0;
        KEY_Time = 0;//三个按键的计时清除
        KEY12_flag = 0;
    }
}
/*****/
bit Time_Min_S_convert_sign;//时间分秒转换标志位 
bit ScoringMode_convert_Flag;//记分模式转换标志位 
bit RF_ShortPress_Flag;//学习模式下单个按键学习
unsigned char volume_Data = 4;//音量值默认为静音模式
bit  Send_Sign= 0;
//bit flog;
//bit Flong;
/*****/
//按键按下处理
//按键长按
bit Time_Min5_Timing_Sign=0,Time_Min1_Timing_Sign=0,TimeS_Min1_TimingSign = 0;//计时标志位
bit Entering_Learning_Sign;bit Enter_Reminder_Time_mode; bit Enter_Time_Selection_Sign; //模式标志位
bit Time_Score = 0; //比分还是时间
bit Switch_Flag1 = 0; //显示切换
void KEY_Long_Press()
{
    unsigned char i;
    if(KEY_LongPress_Flag == 1)
    {
        //按键1和按键2同时按下5S
        /*
        ***********进入学习模式********
        1, 开始倒数5分钟后退出学习
        2,按键在学习期间,才可以再次点按音量键进入单个按键学习
        3,按键学习成功退出学习模式
        4,显示学习模式
        */
        Time_Min5_Timing_Sign = 1;//开始倒数
        Entering_Learning_Sign = 1;//进入学习模式
        Mode_Switch_Sign = 2; //显示学习模式
        KEY_LongPress_Flag = 0;//清标志
        KEY1_LongPress_Flag = 0;
        KEY2_LongPress_Flag = 0;
        Data_Area_Sector_Erase(0);//擦掉遥控地址码
        for(i=0;i<10;i++)
        {
            Data_433[i]= 0;
        }
        for(i=0;i<10;i++)
        {
            RF_433_Data[i]= 0;
        }
        RF_433_Data[10] = Main_Time10_Sign;//上电十分钟标志位
        RF_433_Data[11] = Reminder_Time;//上电十分钟标志位
        Data_Area_Mass_Write(0,RF_433_Data,12);//在写
    }
    else if(KEY1_LongPress_Flag == 1)
    {
        //按键1长按7S
        /*
        *******会进入时间显示是分钟还是秒钟*******
        1, 长按会进入显示 "S"的显示模式 1分钟闪烁
        2,    在次按下会显示 "H"的显示模式 1分钟闪烁
        1分钟后回到选定的时间显示模式
        */
        
        Time_Min1_Timing_Sign = 1; //1分钟开始倒数
        Enter_Time_Selection_Sign = 1;//进入时间选择模式
        Mode_Switch_Sign = 4 ;//默认显示S
        Pulse_Num = 10;
        KEY1_LongPress_Flag = 0;//清标志
        //时间设置为S
        Min_S = 1;
        KEY_LongPress_Flag = 0;//清标志
        KEY2_LongPress_Flag = 0;
    }
    else if(KEY2_LongPress_Flag == 1)
    {
        //按键2长按7S
        /*
        **************会进入提醒时间设置模式**********

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值