功能说明:
1、2脚IIC时钟线,3脚输出高电平,5脚IIC数据线,6脚传感器中断脚,7脚按键,
2、按键按下开机,3脚输出低电平,读传感器ID,启动传感器,5分钟内传感器有震动重新定时,5分钟内不动则关机。按键再次按下关机。
3、当读不到传感器ID时,闪烁5秒后关机,(2HZ)
4、当电源电压低于3.30V时,闪烁10秒后关机,(1HZ)
/* =========================================================================
* Project: SPC03
* Author: WANG ZHAOZHAO
* Date: 2022.05.05
=========================================================================*/
#include <ny8.h>
#include <ny8_romaccess.h>
#include "ny8_constant.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long int u32;
//端口绑定//
#define PIN_IIC_SCL PB5 //
#define PIN_LED_D0 PB4 //
#define PIN_PB3 PB3 //
#define PIN_KEY_SWITCH PB0 //
#define PIN_DA260B_INT PB1 //
#define PIN_IIC_SDA PB2 //
//按键部分//
#define KEY_NUMBER 1 //按键个数
#define KEY_SHORT_TIMES 2 //按键短按时间
#define KEY_LONG_TIMES 200 //按键长按时间
#define KEY_HOLD_TIMES (200+50) //按键连按时间
#define KEY_DOUBLE_TIMES 40 //按键双击时间
#define NO_KEY_PRESS 0xff //没有按键按下
#define NO_KEY_MSG 0xfe //没有按键消息
#define KEY_HOLD (1<<4) //连按按下
#define KEY_LONG (1<<5) //长按按下
#define KEY_DOUBLE (1<<6) //双击按下
#define KEY_HOLD_DQ (1<<7) //连按抬起
#define KEY_SWITCH 0x01 //开关(短按抬起)
#define KEY_SWITCH_HOLD (KEY_SWITCH | KEY_HOLD)
#define KEY_SWITCH_LONG (KEY_SWITCH | KEY_LONG)
#define KEY_SWITCH_DOUBLE (KEY_SWITCH | KEY_DOUBLE)
#define KEY_SWITCH_HOLD_DQ (KEY_SWITCH | KEY_HOLD_DQ)
static unsigned char KeySignalCount;
static unsigned char key_msg = NO_KEY_MSG;
//标志部分//
typedef union
{
struct
{
u8 bit0 : 1;
u8 bit1 : 1;
u8 bit2 : 1;
u8 bit3 : 1;
u8 bit4 : 1;
u8 bit5 : 1;
u8 bit6 : 1;
u8 bit7 : 1;
} bits;
}Flag;
volatile Flag sys_flag;
volatile Flag bat_flag;
volatile Flag time_flag;
#define sys_power_flag sys_flag.bits.bit0 //上电标志
#define sys_sleep_flag sys_flag.bits.bit1 //睡眠标志
#define sys_work_flag sys_flag.bits.bit2 //工作标志
#define sys_work_key_flag sys_flag.bits.bit3 //工作按键标志
#define sys_work_led_flag sys_flag.bits.bit4 //工作闪灯标志
#define sys_work_mode_flag sys_flag.bits.bit5 //工作模式标志
#define sys_work_stop_flag sys_flag.bits.bit6 //
#define bat_discharge_flag bat_flag.bits.bit0 //电池放电标志
#define bat_charge_flag bat_flag.bits.bit1 //电池充电标志
#define bat_charge_full_flag bat_flag.bits.bit2 //电池充满标志
#define bat_battery_low_flag bat_flag.bits.bit3 //电池低电标志
#define time_1s_flag time_flag.bits.bit0 //1s时间标志
#define time_1ms_flag time_flag.bits.bit1 //1ms时间标志
#define time_10ms_flag time_flag.bits.bit2 //10ms时间标志
#define time_100ms_flag time_flag.bits.bit3 //100ms时间标志
#define time_500ms_flag time_flag.bits.bit4 //500ms时间标志
//宏定义部分//
#define IIC_ADDR_Def 0x4e //IIC地址
#define SDA_IN {IOSTB|= 0x04; PHPB2=0;} //输入
#define SDA_OUT IOSTB &= 0xFB; //输出
#define IIC_SCL PB5
#define IIC_SDA PB2
#define READ_SDA PB2
#define REG_SPI_I2C 0x00
#define REG_CHIPID 0x01
#define REG_ACC_X_LSB 0x02
#define REG_ACC_X_MSB 0x03
#define REG_ACC_Y_LSB 0x04
#define REG_ACC_Y_MSB 0x05
#define REG_ACC_Z_LSB 0x06
#define REG_ACC_Z_MSB 0x07