亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 05070.c

?? 被動(dòng)紅外傳感器開關(guān)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//RS-150-BA firmware
//v0.7
//12-4-06

//Variables
union un_var
{
  unsigned char uc_var;  // The variable as 1 byte
  struct
  {  // The variable as 8 bits
    unsigned char Bit0:1,
                  Bit1:1,
                  Bit2:1,
                  Bit3:1,
                  Bit4:1,
                  Bit5:1,
                  Bit6:1,
                  Bit7:1;
  } bf_var;
} ucStatus = {0};

//ucStatus bit field definition
#define BitStatus0          Bit0
#define BitStatus1          Bit1
#define MAJORBUTTONHELD     Bit2
#define SPACEOCCUPIED       Bit3
#define OCCUPIED            Bit4
#define LINEFREQ            Bit5
#define RELAYBUFFER         Bit6

#define STATUS_MASK       0x03
#define STATUS_MANUALOFF  0x00
#define STATUS_AUTOOFF    0x01
#define STATUS_LOADON     0x02
#define STATUS_ONIFDARK   0x03

//
#define TIME_TESTMODE_DURATION    3000  //300s
#define TIME_RESET_TO_AUTO        3000  //300s
#define TIME_RESET_TO_MANUAL      300   //30s
#define TIME_LED_FLASH_DURATION   10    //1s
#define TIME_LED_ON_DURATION      2     //0.2s
#define TIME_TESTMODE_DELAY       50    //5s
#define TIME_DELAY_MODE_U         3000  //5m
#define TIME_DELAY_MODE_BA        18000 //30m
#define TIME_WARMUP               250   //25s
#define TIME_IGNORE               15    //1.5s

unsigned char ucTimerUnit = 0;        //give 5 or 6 based on mains freq 50Hz or 60Hz.
unsigned char ucTimerBase = 0;        //system base timer, 0.1s per cycle
unsigned char ucTimerSystem = 0;      //system timer, 1s per cycle
unsigned char ucTimerIgnore = 0;
unsigned int  uiTimerWarmup = TIME_WARMUP;
unsigned int  uiTimerTestMode = 0;
unsigned int  uiTimerDelay = 0;
unsigned int  uiTimerAfterDelay = 0;
unsigned char ucTimerDark = 0;

//PIR
#define NOISE_OFFSET 8
#define MIN_THRESH 46
#define MAX_THRESH 71
#define HOLD_THRESH 87
#define MIN_WIDTH 2
#define MID_WIDTH 20
#define MAX_WIDTH 120
#define MIN_SPACE 9
#define PIR_CENTER 102
#define MAX_PIR (PIR_CENTER*2)
#define DEFAULT_NOISE (MIN_THRESH - NOISE_OFFSET)

//
#define MSG_BUTTON_NONE                         0x00
#define MSG_MAJOR_BUTTON_SHORT_HOLD             0x01  //Major button get hold for longer than 0.1s
#define MSG_MAJOR_BUTTON_LONG_HOLD              0x02  //Major button get hold for longer than 0.5s
#define MSG_MAJOR_BUTTON_SHORT_PRESSED          0x03  //Major button get pressed for shorter than 10s
#define MSG_MAJOR_BUTTON_INOUTTESTMODE_HOLD     0x04  //Major button get hold for longer than 10s
#define MSG_MAJOR_BUTTON_INOUTTESTMODE_PRESSED  0x05  //Major button get pressed for longer than 10s

#define BUTTON_ON   0
#define BUTTON_OFF  1
#define BUTTON_DEBOUNCING_TIME  1   //0.1s
#define BUTTON_HOLD_TIME        5   //0.5s
#define BUTTON_INOUTTESTMODE_TIME    100 //10s
unsigned char ucMsgButton = MSG_BUTTON_NONE;

//IO
#define INPUT_MAJOR_BUTTON    PIND_Bit5
#define INPUT_LINE            PIND_Bit6
#define INPUT_LOAD            PIND_Bit7
#define OUTPUT_LED_CONTROL    PORTD_Bit3
#define OUTPUT_RELAY_CONTROL  PORTD_Bit1
#define PORT_INIT             0x00
#define DDRB_INIT             0xff
#define DDRC_INIT             0xfc
#define DDRD_INIT             0x1f

//ADC converter setup
#define ADMUX_LIGHTLEVEL      0x60
#define ADMUX_OCCUPATION      0x61
#define ADCSRA_INIT           0x93
#define ADCSRA_START          0xd3
#define ADCSRA_OFF            0x13
#define DIDR0_INIT            0x3f

//TMR1 for Timing
#define TCCR1B_OFF            0x00
#define TCCR1B_INIT           0x03

//
unsigned int uiLEDFlashPattern = 0x0000;

#define LED_FLASH_PAT_NONE    0x0000  //0000000000000000
#define LED_FLASH_PAT_ERR1    0x8080  //1000000010000000
#define LED_FLASH_PAT_ERR2    0xa0a0  //1010000010100000
#define LED_FLASH_PAT_ERR3    0xa8a8  //1010100010101000
#define LED_FLASH_PAT_SUCC    0xaaaa  //1010101010101010

//TMR2 for LED control
#define TCCR2B_INIT           0x01
#define TCCR2A_OFF            0x03
#define TCCR2A_ON             0x23
#define OCR2B_DIM             0x3a
#define OCR2B_ON              0xff

#define LIGHT_LEVEL_THRESHHOLD  172

#define MODE_U    0
#define MODE_BA   1

unsigned char ucMode = MODE_BA;

unsigned int uiDelayData[2] = {TIME_DELAY_MODE_U, TIME_DELAY_MODE_BA};

#define CLKPR_INIT  0x02

unsigned int uiFullCycle = 0;

#define FULL_CYC_50   625
#define FULL_CYC_M    573
#define FULL_CYC_60   521
#define HALF_CYC_60   260
#define QUART_CYC_60  130
#define DFT_ON_DELAY  QUART_CYC_60
#define DFT_OFF_DELAY HALF_CYC_60
unsigned int __eeprom uiEEOnDelay = DFT_ON_DELAY;
unsigned int __eeprom uiEEOffDelay = DFT_OFF_DELAY;
__no_init unsigned int uiOnDelay;
__no_init unsigned int uiOffDelay;

#define LOAD_OFF  0
#define LOAD_ON   1
unsigned char __eeprom ucEELoadOnOff = LOAD_OFF;
__no_init unsigned char ucLoadOnOff;

#define UNITSTATE_VIRGIN  0x5a
#define UNITSTATE_MATURE  0xff
unsigned char __eeprom ucEEUnitState = UNITSTATE_VIRGIN;
__no_init unsigned char ucUnitState;

unsigned char __eeprom ucEEosccal = 0;

unsigned char ucTemp = 0;
unsigned int  uiTemp = 0;

#include <iom48.h>
#include <intrinsics.h>

void buttonManipulation(void);
void updateStatus(void);
void updateTimer(void);
void updateCDS(void);
void updateLED(void);
void updatePIR(void);

void goLoadOn(void);
void goManualOff(void);
void goAutoOff(void);
void goOnIfDark(void);

void inoutTestMode(void);

void lineSync(void);

unsigned char __adc__(unsigned char);
void __figureoutdelay__(void);

void delayandswitch(void);

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

__C_task void main(void)
{
  if ((MCUSR & (1 << WDRF)) && (ucEEUnitState == UNITSTATE_MATURE))  //watchdog reset
  {
    if (uiOnDelay != uiEEOnDelay)
    {
      uiEEOnDelay = uiOnDelay;
    }
    if (uiOffDelay != uiEEOffDelay)
    {
      uiEEOffDelay = uiOffDelay;
    }
    if (ucLoadOnOff != ucEELoadOnOff)
    {
      ucEELoadOnOff = ucLoadOnOff;
    }
  }

  // reset WDT
  __watchdog_reset();
  // Clear WDRF in MCUSR
  MCUSR &= ~(1<<WDRF);
  // Write logical one to WDCE and WDE
  // Keep old prescaler setting to prevent unintentional time-out
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  // Turn off WDT
  WDTCSR = 0x00;

  PORTB = PORT_INIT;
  PORTC = PORT_INIT;
  PORTD = PORT_INIT;

  DDRB = DDRB_INIT;
  DDRC = DDRC_INIT;
  DDRD = DDRD_INIT;

  ADCSRA = ADCSRA_OFF;
  DIDR0 = DIDR0_INIT;

  ACSR = 1<<7;

  TCCR2B = TCCR2B_INIT;
  TCCR2A = TCCR2A_OFF;

  ucUnitState = ucEEUnitState;
  ucLoadOnOff = (ucEELoadOnOff & 0x01);
  uiOnDelay = uiEEOnDelay;
  uiOffDelay = uiEEOffDelay;

  //config the uC operating frequency
  CLKPR = 1<<7;
  CLKPR = CLKPR_INIT;   //Run at 2MHz

  if (UNITSTATE_VIRGIN == ucUnitState)
  {
    uiLEDFlashPattern = LED_FLASH_PAT_SUCC;
    TCNT1 = 0;
    TCCR1B = TCCR1B_INIT;
    while (INPUT_LINE == 0)
    {
      if (TCNT1 >= FULL_CYC_60)
      {
        uiLEDFlashPattern = LED_FLASH_PAT_ERR1;
        break;
      }
    }
    if (uiLEDFlashPattern == LED_FLASH_PAT_SUCC)
    {
      TCNT1 = 0;
      while (INPUT_LINE == 1)
      {
        if (TCNT1 >= FULL_CYC_60)
        {
          uiLEDFlashPattern = LED_FLASH_PAT_ERR1;
          break;
        }
      }
    }
    if (uiLEDFlashPattern == LED_FLASH_PAT_SUCC)
    {
      do
      {
        while (INPUT_LINE == 1)
          ;
        TCNT1 = 0;
        GTCCR |= (1 << PSR10);
        while (INPUT_LINE == 0)
          ;
        uiTemp = TCNT1;
        if (uiTemp <= HALF_CYC_60 - 3)
        {
          OSCCAL += 2;
        }
        else if (uiTemp >= HALF_CYC_60 + 4)
        {
          OSCCAL -= 2;
        }
      }
      while ((uiTemp <= HALF_CYC_60 - 3) || (uiTemp >= HALF_CYC_60 + 4));
    }
    if (uiLEDFlashPattern == LED_FLASH_PAT_SUCC)
    {
      while (TCNT1 <= HALF_CYC_60 + QUART_CYC_60)
        ;
      if (INPUT_LOAD == 1)  //declare error type 3 when see relay input high when relay is off
      {
        uiLEDFlashPattern = LED_FLASH_PAT_ERR3;
      }
    }
    if (uiLEDFlashPattern == LED_FLASH_PAT_SUCC)
    {
      ucEEUnitState = UNITSTATE_MATURE;
      ucEEosccal = OSCCAL;
      ucTemp = 8;
      while (ucTemp > 0)
      {
        lineSync();
        if ((1 == ucStatus.bf_var.LINEFREQ) && ((ucTimerBase | ucTimerSystem) == 0))
        {
          OUTPUT_RELAY_CONTROL ^= 1;
          ucTemp--;
        }
      }
    }
    while (1)
    {
      __delay_cycles(0x7ffff);
      if (ucTemp == 0)
      {
        ucTemp = 16;
      }
      OUTPUT_LED_CONTROL = 0;
      if (uiLEDFlashPattern & (1 << (ucTemp - 1)))
      {
        OUTPUT_LED_CONTROL = 1;
      }
      ucTemp--;
    }
  }

  OSCCAL = ucEEosccal;

  // reset WDT
  __watchdog_reset();
  // start timed equence
  WDTCSR |= ((1<<WDCE)|(1<<WDE));
  // set new time-out value (~0.064s)
  WDTCSR = (1<<WDE)|(1<<WDP1);   //0.064s period

  if (LOAD_ON == ucLoadOnOff)
  {
    OUTPUT_RELAY_CONTROL = 1;
    goLoadOn();
    ucStatus.bf_var.OCCUPIED = 1;
    updateTimer();
  }
  else if (ucMode == MODE_U)
  {
    goAutoOff();
  }

  while (1)
  {
    lineSync();   //sync to line fall eage

    if (1 == ucStatus.bf_var.LINEFREQ)
    {
      if (ucStatus.bf_var.RELAYBUFFER != OUTPUT_RELAY_CONTROL)
      {
        delayandswitch();
      }
      else
      {
        ucLoadOnOff = ucStatus.bf_var.RELAYBUFFER;
        if (ucTimerBase == 0)
        {
          if (uiTimerTestMode > 0)
          {
            uiTimerTestMode--;
          }
        }
        updateCDS();
        updatePIR();
        buttonManipulation();
        switch (ucMsgButton)
        {
          default:
            if (ucMsgButton == MSG_MAJOR_BUTTON_INOUTTESTMODE_HOLD)
            {
              if (ucStatus.bf_var.MAJORBUTTONHELD == 0)
              {
                goLoadOn();
                ucStatus.bf_var.MAJORBUTTONHELD = 1;
              }
              ucStatus.bf_var.OCCUPIED = 1;
            }
            else if (ucMsgButton == MSG_MAJOR_BUTTON_INOUTTESTMODE_PRESSED)
            {
              ucStatus.bf_var.MAJORBUTTONHELD = 0;
              inoutTestMode();
              ucStatus.bf_var.OCCUPIED = 1;
            }
            else if ((ucMsgButton == MSG_MAJOR_BUTTON_SHORT_PRESSED) || (ucMsgButton == MSG_BUTTON_NONE))
            {
              ucStatus.bf_var.OCCUPIED = (((ucMsgButton == MSG_MAJOR_BUTTON_SHORT_PRESSED) && (uiTimerTestMode == 0)) || ucStatus.bf_var.SPACEOCCUPIED);
              updateStatus();
            }
            updateTimer();
            break;
        }
        updateLED();
      }
    }
  }
}

void buttonManipulation(void)
{
  static unsigned int uiMajorButtonTimer = 0;
  static unsigned char ucButtonTimer2 = 0;  //for Major Button usuage
  ucMsgButton = MSG_BUTTON_NONE;
  if (BUTTON_ON == INPUT_MAJOR_BUTTON)
  {
    if (uiMajorButtonTimer >= BUTTON_INOUTTESTMODE_TIME) //10s
    {
      ucMsgButton = MSG_MAJOR_BUTTON_INOUTTESTMODE_HOLD;
    }
    else if (uiMajorButtonTimer >= BUTTON_HOLD_TIME) //0.5s
    {
      ucMsgButton = MSG_MAJOR_BUTTON_LONG_HOLD;
    }
    else if (uiMajorButtonTimer >= BUTTON_DEBOUNCING_TIME)  //0.1s
    {
      ucMsgButton = MSG_MAJOR_BUTTON_SHORT_HOLD;
    }
    if ((++ucButtonTimer2) == ucTimerUnit)
    {
      ucButtonTimer2 = 0;
      if ((++uiMajorButtonTimer) == 0)
      {
        uiMajorButtonTimer--;
      }
    }
  }
  else
  {
    if (uiMajorButtonTimer >= BUTTON_INOUTTESTMODE_TIME)  //10s
    {
      ucMsgButton = MSG_MAJOR_BUTTON_INOUTTESTMODE_PRESSED;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品高清视频| 色久综合一二码| 91福利社在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 欧美亚洲自拍偷拍| 亚洲一区二区在线免费观看视频| 国产99久久久久久免费看农村| 日韩一区二区三区在线| 日韩黄色片在线观看| 欧美福利一区二区| 9i在线看片成人免费| 国产精品久久精品日日| a美女胸又www黄视频久久| 免费观看成人av| 国产亚洲人成网站| 国产91精品入口| 美日韩一区二区| 亚洲综合丁香婷婷六月香| 国产精品国产成人国产三级| 国产亚洲精品7777| 欧美一区二区三区视频免费| 国内精品国产成人| 一级中文字幕一区二区| 色拍拍在线精品视频8848| 亚洲自拍偷拍网站| 国产精品人人做人人爽人人添| 不卡一区二区中文字幕| 亚洲一区二区三区中文字幕| 国产精品污www在线观看| 精品国产免费人成在线观看| 国产99精品视频| 精品一区二区三区的国产在线播放| 久久蜜桃av一区二区天堂| 91麻豆精品视频| 美女网站视频久久| 天堂成人国产精品一区| 亚洲一区二区三区四区在线观看| 一区精品在线播放| 欧美一区二区三区四区高清 | 97久久精品人人澡人人爽| 亚洲最大色网站| 亚洲欧美另类久久久精品| 欧美一区二区在线播放| 在线成人av网站| 欧美日韩成人综合天天影院| 国产伦精一区二区三区| 亚洲一区二区av电影| 亚洲另类一区二区| 久久久噜噜噜久噜久久综合| 26uuu精品一区二区三区四区在线| 99国产精品久| 99re66热这里只有精品3直播| 99精品视频在线观看免费| 97精品超碰一区二区三区| 91视频一区二区三区| 91在线免费播放| 色婷婷av一区二区三区软件| 在线免费不卡电影| av高清久久久| 色综合久久久久综合99| 色8久久人人97超碰香蕉987| 在线亚洲免费视频| 91精品国产91久久综合桃花| 日韩一级精品视频在线观看| 亚洲精品一区二区三区在线观看| 国产亚洲精品资源在线26u| 中文字幕在线不卡国产视频| 亚洲精品国产一区二区精华液| 亚洲第一在线综合网站| 国产精品女同互慰在线看| 亚洲同性gay激情无套| 欧美极品少妇xxxxⅹ高跟鞋| 日韩视频一区二区三区 | 91精品国产91久久久久久最新毛片 | 免费一区二区视频| 国产精品自拍网站| 日韩国产欧美视频| 亚洲国产日韩精品| 一区二区三区在线看| 首页国产欧美日韩丝袜| 经典三级在线一区| av网站免费线看精品| 欧美日韩高清一区二区不卡| 久久综合视频网| 亚洲视频狠狠干| 日本欧美一区二区| 成人av高清在线| 欧美蜜桃一区二区三区| 国产婷婷色一区二区三区| 亚洲精品免费在线| 久久精品国产第一区二区三区| 日韩专区欧美专区| 成人理论电影网| 99国产精品国产精品毛片| 91精品欧美一区二区三区综合在| 555夜色666亚洲国产免| 欧美国产精品一区二区三区| 日韩制服丝袜av| av高清久久久| 欧美va亚洲va| 久久久精品2019中文字幕之3| 伊人夜夜躁av伊人久久| 国产精品影视天天线| 欧美日韩一区二区三区高清| 9191精品国产综合久久久久久| 国产婷婷精品av在线| 色呦呦国产精品| 久久亚洲精华国产精华液| 亚洲一区二区高清| 9久草视频在线视频精品| 欧美成人官网二区| 性做久久久久久久久| 99vv1com这只有精品| 久久丝袜美腿综合| 日本最新不卡在线| 色婷婷精品久久二区二区蜜臂av | 久久99精品国产麻豆婷婷| 欧洲av在线精品| 一区精品在线播放| 国产成人亚洲精品青草天美| 成人h动漫精品一区二| 日韩一区二区在线观看视频播放| 一二三区精品视频| 99视频精品全部免费在线| 久久影视一区二区| 久久精品二区亚洲w码| 91精品国产综合久久精品app | 国产永久精品大片wwwapp| 欧美日韩国产综合一区二区| 亚洲精品日产精品乱码不卡| 成人午夜视频在线观看| 久久蜜臀中文字幕| 国产久卡久卡久卡久卡视频精品| 欧美一区二区三区四区久久| 日韩国产一区二| 欧美三级电影在线看| 亚洲综合免费观看高清在线观看| 99re6这里只有精品视频在线观看| 国产精品久久久久7777按摩| 国产91丝袜在线播放九色| 久久欧美中文字幕| 国产一区二区三区黄视频| 精品成人一区二区三区| 韩日欧美一区二区三区| 精品国产免费一区二区三区四区| 九九**精品视频免费播放| 精品美女一区二区三区| 激情综合色丁香一区二区| 日韩一二三区不卡| 九色|91porny| 国产亚洲精品bt天堂精选| 成人精品国产一区二区4080| 国产精品久久久久精k8| 99精品视频在线观看免费| 亚洲猫色日本管| 欧美色图第一页| 日韩福利视频网| 精品福利av导航| 成人性生交大合| 亚洲人快播电影网| 欧美性色aⅴ视频一区日韩精品| 亚洲成人激情社区| 日韩欧美国产一二三区| 国产精品每日更新在线播放网址| 成人黄色片在线观看| 亚洲另类色综合网站| 日韩一级黄色大片| 国产成人精品亚洲日本在线桃色 | 国产精品免费观看视频| 97se亚洲国产综合自在线| 一区二区三区国产精品| 欧美电影一区二区| 国产毛片精品国产一区二区三区| 欧美国产一区视频在线观看| 欧美在线小视频| 美女精品一区二区| 日本一区二区久久| 一本色道亚洲精品aⅴ| 日韩黄色免费网站| 国产精品久久久久影院老司 | 日韩欧美亚洲国产精品字幕久久久 | 日韩三级电影网址| 不卡一二三区首页| 肉丝袜脚交视频一区二区| 国产日韩欧美电影| 激情文学综合丁香| 亚洲欧美日韩精品久久久久| 欧美卡1卡2卡| 成人成人成人在线视频| 午夜激情一区二区三区| 欧美日本免费一区二区三区| 国产伦精品一区二区三区免费| 亚洲免费视频中文字幕| 欧美成人a∨高清免费观看| 91啪亚洲精品| 久久国产欧美日韩精品| 一区二区三区电影在线播| 日韩欧美资源站| 欧美伊人精品成人久久综合97| 国产中文字幕精品|