DS_da260B加速度传感器的使用案例

本文介绍了DS_da260B加速度传感器的使用,包括IIC时钟线和数据线配置,传感器中断脚及按键功能。传感器在按键按下时启动,读取ID并启动,若5分钟内有震动则保持工作,否则自动关机。此外,还讲述了在读取不到ID或电源电压低于3.30V时的处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能说明:

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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怀揣热爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值