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

📄 alarm.c

📁 NEC527多功能电表完整源代码,包括LCD驱动,显示,计量,存储,整个527驱动程序!
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "includes.h"

unsigned char AlarmCtlWord1=0;
unsigned char AlarmCtlWord2=0;
unsigned char AlarmCtlWord3=0;
unsigned char TempAlarmSound1=0;
unsigned char TempAlarmSound2=0;
unsigned char TempAlarmSound3=0;
unsigned char AlarmLightTime=0;
unsigned char AlarmOpenCoverBoard=0;
unsigned char ProgramStatusWord=0;
unsigned char CancleAlarmSoundTime=0;
unsigned short CoverTimerCounter[4]={0,0,0,0};

const unsigned char _SystemTimeRange[]=
{
    0x59,//max value of second
    0x59,//max value of minute
    0x23,//max value of hour
    0x06 //max value of week
};

const unsigned char _SystemTimeDayRange[]=
{
    0x31,0x29,0x31,0x30,0x31,0x30,0x31,0x31,0x30,0x31,0x30,0x31
};

void Alarm(void)
{
    unsigned char i, alarm_flag = 0;
    unsigned char cover = AlarmOpenCoverBoard&( ALARM_COVER_BOARD_UP | ALARM_COVER_BOARD_DOWN );
    
    if( ProgramStatusWord != DEVICE_OK )
    {
        AlarmCtlWord1 |= ALARM_OF_PROGRAM;
    }
    else
    {
        AlarmCtlWord1 &=~ ALARM_OF_PROGRAM;
    }
    
    _disable_interrupt();
    ProgramStatusWord = 0;
    _enable_interrupt();
	
    if( !( COVER_UP_IN & COVER_UP ) )
    {
        if( !( cover & ALARM_COVER_BOARD_UP ) )
        {
            if( CoverTimerCounter[0] == 0 )
            {
                CoverTimerCounter[0] = 60;
                SavePgmInfoToFram( ADDR_OF_COVER_UP_OPEN, 1 );
            }
            else
            {
                CoverTimerCounter[0] = 60;
            }
            cover|=ALARM_COVER_BOARD_UP;
        }
    }
    else
    {
        if( cover & ALARM_COVER_BOARD_UP )
        {
            cover &=~ ( ALARM_COVER_BOARD_UP );
        }
    }

    if( COVER_DOWN_IN & COVER_DOWN )
    {
        if( !( cover & ALARM_COVER_BOARD_DOWN ) )
        {
            if( CoverTimerCounter[1] == 0 )
            {
                CoverTimerCounter[1] = 60;            
                SavePgmInfoToFram(ADDR_OF_COVER_DOWN_OPEN,1);
            }
            else
            {
                CoverTimerCounter[1] = 60;
            }
            cover |= ALARM_COVER_BOARD_DOWN;
        }
    }
    else
    {
        if( cover & ALARM_COVER_BOARD_DOWN )
        {
            cover &=(unsigned char)(~ALARM_COVER_BOARD_DOWN);
        }
    }

    if( !( PWR_F1_IN & PWR_F1 ) )
    {
        if( !( PowerStateFlag & PS_LOWPOWER_FLAG ) )
        {
            MeterRunningStateWord |= 0x04;
            PowerStateFlag |= PS_LOWPOWER_FLAG;
        }
        AlarmCtlWord1 |= ALARM_OF_BATTARY;
    }
    else
    {
        if( PowerStateFlag & PS_LOWPOWER_FLAG )
        {
            MeterRunningStateWord &=~ (0x04);
            PowerStateFlag &=~ ( PS_LOWPOWER_FLAG );
        }
        AlarmCtlWord1 &=~ ALARM_OF_BATTARY;
    }
	
    AlarmCtlWord1 &=~ ALARM_OF_SYSTEM_TIME;
    if( IsBcdCode( ( unsigned char * )&SystemTime[SPACE_OF_SECOND], 7 ) == OK )
    {
        for( i = 0; i < 4; i++ )
        {
            if( SystemTime[i] > _SystemTimeRange[i] )
            {
                AlarmCtlWord1 |= ALARM_OF_SYSTEM_TIME;
            }
        }
		
        if( ( SystemTime[SPACE_OF_MONTH] > 0x12) || ( SystemTime[SPACE_OF_MONTH] == 0 ) )
        {
            AlarmCtlWord1 |= ALARM_OF_SYSTEM_TIME;
        }

        if( ( SystemTime[SPACE_OF_DAY] > _SystemTimeDayRange[SystemTime_MonthHex] ) || ( SystemTime[SPACE_OF_DAY] == 0 ) )
        {
            AlarmCtlWord1 |= ALARM_OF_SYSTEM_TIME;
        }
    }
    else
    {
        AlarmCtlWord1 |= ALARM_OF_SYSTEM_TIME;
    }
    
    LCDMEM[LCD_CN_INFO_ADDR_COVERUP] |= cover;
    if( cover != AlarmOpenCoverBoard )
    {
        FramWrite( ADDR_OF_COVER, &cover, 1);
        AlarmOpenCoverBoard = cover;
    }
    
    if( PowerStateFlag & PS_LOWPOWER_FLAG )
    {
        LCDMEM[LCD_CN_INFO_ADDR_LOWPWR] |= LCD_CN_INFO_LOWPWR;
        if( _SysPotInfo.alarm_light1 & BIT5 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT;
        }
		
        if( _SysPotInfo.alarm_sound1 & BIT5 )
        {
            alarm_flag |= ALARM_FLAG_OF_SOUND;
        }

        if( _SysPotInfo.alarm_light2_1 & BIT5 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT2;
        }
    }
    else
    {
        LCDMEM[LCD_CN_INFO_ADDR_LOWPWR] &=~ LCD_CN_INFO_LOWPWR;
        if( TempAlarmSound1 & BIT5 )
        {
            _SysPotInfo.alarm_sound1 |= BIT5;
        }
    }

    if( AlarmCtlWord1 & ALARM_OF_ISEQERR )
    {
        if( _SysPotInfo.alarm_light1 & BIT2 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT;
        }        
        
        if( _SysPotInfo.alarm_sound1 & BIT2 )
        {
            alarm_flag |= ALARM_FLAG_OF_SOUND;
        }
        
        if( _SysPotInfo.alarm_light2_1 & BIT2 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT2;
        }        
    }
    else
    {
        if( TempAlarmSound1 & BIT2 )
        {
            _SysPotInfo.alarm_sound1 |= BIT2;
        }
    }

    if( LowVIStateWord & 0x07 )
    {
        if( _SysPotInfo.alarm_light1 & BIT0 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT;
        }
		
        if( _SysPotInfo.alarm_sound1 & BIT0 )
        {
            alarm_flag |= ALARM_FLAG_OF_SOUND;
        }

        if( _SysPotInfo.alarm_light2_1 & BIT0 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT2;
        }        
    }
    else
    {
        if( TempAlarmSound1 & BIT0 )
        {
            _SysPotInfo.alarm_sound1 |= BIT0;
        }    
    }

    if( LowVIStateWord & 0x70 )
    {
        if( _SysPotInfo.alarm_light1 & BIT1 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT;
        }
		
        if( _SysPotInfo.alarm_sound1 & BIT1 )
        {
            alarm_flag |= ALARM_FLAG_OF_SOUND;
        }
        
        if( _SysPotInfo.alarm_light2_1 & BIT1 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT2;
        }        
    }
    else
    {
        if( TempAlarmSound1 & BIT1 )
        {
            _SysPotInfo.alarm_sound1 |= BIT1;
        }     
    }

    if( AlarmCtlWord1 & ALARM_OF_DATA_FLASH )
    {
        if( _SysPotInfo.alarm_light1 & BIT3 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT;
        }
		
        if( _SysPotInfo.alarm_sound1 & BIT3 )
        {
            alarm_flag |= ALARM_FLAG_OF_SOUND;
        }

        if( _SysPotInfo.alarm_light2_1 & BIT3 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT2;
        }        
    }
    else
    {
        if( TempAlarmSound1 & BIT3 )
        {
            _SysPotInfo.alarm_sound1 |= BIT3;
        }
    }

    if( AlarmCtlWord1 )
    {
        if( _SysPotInfo.alarm_light1 & BIT6 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT;
        }
		
        if( _SysPotInfo.alarm_sound1 & BIT6 )
        {
            alarm_flag |= ALARM_FLAG_OF_SOUND;
        }

        if( _SysPotInfo.alarm_light2_1 & BIT6 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT2;
        }        
    }

    if( AlarmCtlWord2 & ALARM_OF_CURIMBA )
    {
        if( _SysPotInfo.alarm_light2 & BIT0 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT;
        }
		
        if( _SysPotInfo.alarm_sound2 & BIT0 )
        {
            alarm_flag |= ALARM_FLAG_OF_SOUND;
        }       

        if( _SysPotInfo.alarm_light2_2 & BIT0 )
        {
            alarm_flag |= ALARM_FLAG_OF_LIGHT2;
        }        
    }
    else
    {
        if( TempAlarmSound2 & BIT0 )
        {
            _SysPotInfo.alarm_sound2 |= BIT0;
        }    
    }

    if( AlarmCtlWord2 & ALARM_OF_OV_LOAD)
    {
        if( _SysPotInfo.alarm_light2 & BIT1 )
        {
            alarm_flag |=ALARM_FLAG_OF_LIGHT;
        }
		
        if( _SysPotInfo.alarm_sound2 & BIT1 )
        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -