📄 key.c
字号:
void KEY_SCAN() //按键、拨码开关扫描程序块
{
unsigned char S1=0x00; //拨码开关
unsigned char K1=0x00; //按键
unsigned char S1_value = 0x00; //拨码开关中间处理标志
/****************拨码开关读入程序*****************/
{
S1 = P1IN; //P1.0口选择
S1_value = S1|0xFE;
if(S1_value == 0xFE) //P1.X输入为低电平有效 参数:死区调整
{
key_S1_time++;
key_S1_time = key_S1_time>30000?30000:key_S1_time;
if(key_S1_time>=2)
{
flag = 0x7; //状态6
}
}
else
{
key_S1_time=0;
S1_value = ~S1; //低电平有效时取反操作
S1_value = (S1_value>>1)&0x07; //只处理P1.1、P1.2、P1.3
switch(S1_value)
{
case 0: //远程控制状态
{
flag = 0x1; //状态1
}
break;
case 1: //就地手操控制状态
{
flag = 0x2; //状态2
}
break;
case 2: //恢复出厂默认值
{
flag = 0x8; //状态3
}
break;
case 3: //输入通道校准
{
flag = 0x3; //状态3
}
break;
case 5: //输出通道零校准
{
flag = 0x4; //状态4
}
break;
case 6: //输出通道满校准
{
flag = 0x5; //状态5
}
break;
case 7: //校零、校满
{
flag = 0x6; //状态6
}
break;
default: //其它状态值时为远程控制
{
flag = 0x1; //状态1
}
}
}
/**************按键控制程序****************/
K1 = P1IN;
S1_value = K1 | 0xDF;
if(S1_value == 0xDF) //开键状态读取 按键低电平有效 K1 P1.5
{
key_opentime++;
key_opentime = key_opentime>250?250:key_opentime;
if(key_opentime==2) //时间累加,防抖动
{
key_open1 = 0xFF; //确认键值有效
}
else
{
key_open1 = 0x00; //清确认键值
}
if(key_opentime>10)
{
key_open = 0xFF; //开阀有效
}
else
{
key_open = 0x00;
}
}
else
{
key_opentime = 0; //清按键时间
key_open1 = 0x00; //清确认键值
key_open = 0x00;
}
S1_value = K1 | 0xBF;
if(S1_value == 0xBF) //关键状态读取 按键低电平有效 K2 P1.6
{
key_closetime++;
key_closetime = key_closetime>250?250:key_closetime;
if(key_closetime==2) //时间累加,防抖动
{
key_close1 = 0xFF; //确认键值有效
}
else
{
key_close1 = 0x00; //清确认键值
}
if(key_closetime>10)
{
key_close = 0xFF; //关阀有效
}
else
{
key_close = 0x00;
}
}
else
{
key_closetime = 0; //清按键时间
key_close1 = 0x00; //清确认键值
key_close = 0x00;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -