/* switch.c　スイッチ入力検知モジュール */

/* 特殊機能レジスタ（SFR）へのアクセス記述を使用する */
#include "iodefine.h"

#include "switch.h"					/* スイッチ入力検知モジュール */

unsigned char flag_switch_on = 0U;			/* スイッチ押下フラグの実体定義・初期化 */

/* スイッチ入力検知処理 */
/* 出力	flag_switch_on:スイッチ押下確定フラグ */
void switch_input(void){
	static unsigned char switch_tmp = 0U;		/* スイッチ入力の一次記憶値 */
	static unsigned char switch_level = 1U;		/* スイッチ入力の確定値 */
	static unsigned char switch_level_before = 1U;	/* 前回のスイッチ入力の確定値 */

	/* チャタリング除去 */
	switch_tmp = (switch_tmp << 1) + P12_bit.no1;	/* スイッチ状態の履歴保存 */
	if(switch_tmp == 0xFFU){			/* 最近8回連続スイッチオフ */
		switch_level = 1U;			/* スイッチレベルHigh確定 */
	}else if(switch_tmp == 0x00U){			/* 最近8回連続スイッチオン */
		switch_level = 0U;			/* スイッチレベルLow確定 */
	}

	/* スイッチ押下判定 */
	if(switch_level != switch_level_before){	/* スイッチ確定レベルが変化 */
		switch_level_before = switch_level;	/* 前回スイッチレベルの更新 */
		if(switch_level == 0U){			/* High から Low に変化 */
			flag_switch_on = 1U;		/* スイッチ押下確定 */
		}
	}
}
