📄 key.c
字号:
#define _KEY_
#include <iom16.h>
#include <string.h>
#include "main.h"
#include "key.h"
#include <stdio.h>
//全局变量
extern double have_drawed;//已经抽酒的数量
extern long want_to_draw_pulse;//想要抽酒量的脉冲数
extern long pulse;
extern unsigned int have_drawed_int;
extern unsigned int have_drawed_decimal;
unsigned char Key_Delay;
//键盘初始化
void Key_Init(void)
{
}
#pragma vector=INT0_vect
__interrupt void INT0_vect_isr(void)
{
}
void ReadKey(void)
{
//报警按键输入
if((ALARM_KEY == 0) && (Key.AlarmKeyStatus == KEY_NOTHING))
{
Key.AlarmKey = !ALARM_KEY & 0x01;
if( Key.AlarmKey != Key.AlarmKeyBak)
Key.AlarmKeyStatus = KEY_START;
}
//急停开关输入
if((SOS_KEY == 0) &&(Key.SOSStatus == KEY_NOTHING))
{
Key.SOS = !SOS_KEY & 0x01;
if( Key.SOS != Key.SOSBak)
Key.SOSStatus = KEY_START;
}
//接近开关输入
if(((PINB & 0x7f) != 0x7f) && (Key.FloorSwtichStatus == KEY_NOTHING))
{
Key.FloorSwtich = (~PINB) & 0x7f;
if( Key.FloorSwtich != Key.FloorSwtichBak)
Key.FloorSwtichStatus = KEY_START;
}
//楼层按键输入
if(((PINA & 0x7f) != 0) && (Key.FloorKeyStatus == KEY_NOTHING))
{
Key.FloorKey = PINA & 0x7f;
if( Key.FloorKey != Key.FloorKeyBak)
Key.FloorKeyStatus = KEY_START;
}
//报警按键
switch(Key.AlarmKeyStatus)
{
case KEY_START:
Key.AlarmKeyBak = Key.AlarmKey;
Key.AlarmKeyStatus = KEY_PRESS;
break;
case KEY_PRESS:
Key.AlarmKeyStatus = KEY_WAIT;
break;
case KEY_WAIT:
if(ALARM_KEY == 0)
Key.AlarmKeyStatus = KEY_RELEASE;
break;
default:
break;
}
switch(Key.SOSStatus)
{
case KEY_START:
Key.SOSBak = Key.SOS;
Key.SOSStatus = KEY_PRESS;
break;
case KEY_PRESS:
Key.SOSStatus = KEY_WAIT;
break;
case KEY_WAIT:
if(SOS_KEY != 0)
Key.SOSStatus = KEY_RELEASE;
break;
default:
break;
}
switch(Key.FloorSwtichStatus)
{
case KEY_START:
Key.FloorSwtichBak = Key.FloorSwtich;
Key.FloorSwtichStatus = KEY_PRESS;
break;
case KEY_PRESS:
Key.FloorSwtichStatus = KEY_WAIT;
break;
case KEY_WAIT:
if((PINB & 0x7f) == 0x7f)
Key.FloorSwtichStatus = KEY_RELEASE;
break;
default:
break;
}
switch(Key.FloorKeyStatus)
{
case KEY_START:
Key.FloorKeyBak = Key.FloorKey;
Key.FloorKeyStatus = KEY_PRESS;
break;
case KEY_PRESS:
Key.FloorKeyStatus = KEY_WAIT;
break;
case KEY_WAIT:
if((PINA & 0x7f) == 0)
Key.FloorKeyStatus = KEY_RELEASE;
break;
default:
break;
}
}
void AlarmKeyAction(void)
{
ALARM_OUT_LOW;
Key.AlarmKeyCounts = 3617; //5s at 8MHz
}
void SOSAction(void)
{
MOTOR_RIGHT_OFF;
MOTOR_LEFT_OFF;
}
void FloorSwtichAction(void)
{
unsigned char temp = 0;
if(Key.FloorSwtich != 0x0)
{
if(SWITCH1 == 0x00)
{
temp = 1;
}
if(SWITCH2 == 0x00)
{
temp = 2;
}
if(SWITCH3 == 0x00)
{
temp = 3;
}
if(SWITCH4 == 0x00)
{
temp = 4;
}
if(SWITCH5 == 0x00)
{
temp = 5;
}
if(SWITCH6 == 0x00)
{
temp = 6;
}
if(SWITCH7 == 0x00)
{
temp = 7;
}
}
if((temp != Floor) && (temp != 0))
{
Floor = temp;
if(FloorStore_Count >= (MAX_FloorStore - 1))
{
for(FloorStore_Count = 0; FloorStore_Count < MAX_FloorStore; FloorStore_Count ++)
FloorStore[FloorStore_Count] = 0;
FloorStore_Count = 0 ;
}
else
FloorStore_Count++;
FloorStore[FloorStore_Count] = Floor;
}
if((FloorToGo & (1 << (Floor - 1))) != 0)
{
FloorToGo &= ~(1 << (Floor -1));
UpOrDown = STOP;
MOTOR_RIGHT_OFF;
MOTOR_LEFT_OFF;
}
}
void FloorKeyAction(void)
{
SPEAK_ON;
Key.FloorKeySound = 100;
FloorToGo |= Key.FloorKeyBak;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -