⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 基于AVR mega16的电梯控制程序。现在几经能正常使用。
💻 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 + -