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
/*
**************会进入提醒时间设置模式**********