#include "common.h"
#include "key_alone.h"
#include "lcd.h"
#include "DS18B20_One.h"
#include "uart_trx.h"
#define SlaveAddress 0xA6 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改
//ALT ADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedef unsigned char BYTE;
typedef unsigned short WORD;
int xdata y1=-90,y2=90; //加速度阈值,用于判断是翻身
int xdata TurnOverNum=0; //翻身次数
int xdata y_value=0; //y轴数据
sbit BEEP=P2^0; //蜂鸣器
sbit ADC0832_CS = P3^5;//ADC0832 CS引脚
sbit ADC0832_CLK = P3^6;//ADC0832 CLK引脚
sbit ADC0832_DIO = P3^7;//ADC0832 DO引脚
sbit SCL=P1^6; //IIC时钟引脚定义
sbit SDA=P1^7; //IIC数据引脚定义
char xdata SEND_BUF[50];
unsigned char xdata BUF[8]; //接收数据缓存区
unsigned char xdata display[16];
int dis_data; //变量
short tempe_Max=380;//温度报警上限值
short tempe_Min=150;//温度报警下限值
uchar BPM_MAX=120; //心率报警上限值
uchar BPM_MIN=60; //心率报警下限值
uchar setn=0;
bit shuaxin = 0;
#define false 0
#define true 1
// these variables are volatile because they are used during the interrupt service routine!
volatile unsigned int xdata BPM; // used to hold the pulse rate
volatile unsigned int xdata Signal; // holds the incoming raw data
volatile unsigned int xdata IBI = 600; // holds the time between beats, must be seeded!
volatile bit Pulse = false; // true when pulse wave is high, false when it's low
volatile bit QS = false; // becomes true when Arduoino finds a beat.
volatile int xdata rate[10]; // array to hold last ten IBI values
volatile unsigned long idata sampleCounter = 0; // used to determine pulse timing
volatile unsigned long idata lastBeatTime = 0; // used to find IBI
volatile int xdata Peak =512; // used to find peak in pulse wave, seeded
volatile int xdata Trough = 512; // used to find trough in pulse wave, seeded
volatile int thresh = 512; // used to find instant moment of heart beat, seeded
volatile int amp = 100; // used to hold amplitude of pulse waveform, seeded
volatile bit firstBeat = true; // used to seed rate array so we startup with reasonable BPM
volatile bit secondBeat = false; // used to seed rate array so we startup with reasonable BPM
short temperature=0;
uchar heartrate=0;
/**************************************
延时5微秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数,注意时钟过快时需要修改
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
/**************************************
延时5毫秒(STC90C52RC@12M)
不同的工作环境,需要调整此函数
当改用1T的MCU时,请调整此延时函数
**************************************/
void Delay5ms()
{
WORD n = 560;
while (n--);
}
/**************************************
起始信号
**************************************/
void ADXL345_Start()
{
SDA = 1; //拉高数据线
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 0; //产生下降沿
Delay5us(); //延时
SCL = 0; //拉低时钟线
}
/**************************************
停止信号
**************************************/
void ADXL345_Stop()
{
SDA = 0; //拉低数据线
SCL = 1; //拉高时钟线
Delay5us(); //延时
SDA = 1; //产生上升沿
Delay5us(); //延时
}
/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
**************************************/
void ADXL345_SendACK(bit ack)
{
SDA = ack; //写应答信号
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
/**************************************
接收应答信号
**************************************/
bit ADXL345_RecvACK()
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY;
}
/**************************************
向IIC总线发送一个字节数据
**************************************/
void ADXL345_SendByte(BYTE dat)
{
BYTE i;
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1; //移出数据的最高位
SDA = CY; //送数据口
SCL = 1; //拉高时钟线
Delay5us(); //延时
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
ADXL345_RecvACK();
}
/**************************************
从IIC总线接收一个字节数据
**************************************/
BYTE ADXL345_RecvByte()
{
BYTE i;
BYTE dat = 0;
SDA = 1; //使能内部上拉,准备读取数据,
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1;
SCL = 1; //拉高时钟线
Delay5us(); //延时
dat |= SDA; //读数据
SCL = 0; //拉低时钟线
Delay5us(); //延时
}
return dat;
}
//******单字节写入*******************************************
void Single_Write_ADXL345(uchar REG_Address,uchar REG_data)
{
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress); //发送设备地址+写信号
ADXL345_SendByte(REG_Address); //内部寄存器地址,请参考中文pdf22页
ADXL345_SendByte(REG_data); //内部寄存器数据,请参考中文pdf22页
ADXL345_Stop(); //发送停止信号
}
//********单字节读取*****************************************
uchar Single_Read_ADXL345(uchar REG_Address)
{ uchar REG_data;
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress); //发送设备地址+写信号
ADXL345_SendByte(REG_Address); //发送存储单元地址,从0开始
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress+1); //发送设备地址+读信号
REG_data=ADXL345_RecvByte(); //读出寄存器数据
ADXL345_SendACK(1);
ADXL345_Stop(); //停止信号
return REG_data;
}
//*********************************************************
//
//连续读出ADXL345内部加速度数据,地址范围0x32~0x37
//
//*********************************************************
void Read_ADXL345(void)
{ uchar i;
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress); //发送设备地址+写信号
ADXL345_SendByte(0x32); //发送存储单元地址,从0x32开始
ADXL345_Start(); //起始信号
ADXL345_SendByte(SlaveAddress+1); //发送设备地址+读信号
for (i=0; i<6; i++) //连续读取6个地址数据,存储中BUF
{
BUF[i] = ADXL345_RecvByte(); //BUF[0]存储0x32地址中的数据
if (i == 5)
{
ADXL345_SendACK(1); //最后一个数据需要回NOACK
}
else
{
ADXL345_SendACK(0); //回应ACK
}
}
ADXL345_Stop(); //停止信号
Delay5ms();
}
//*****************************************************************
//初始化ADXL345,根据需要请参考pdf进行修改************************
void Init_ADXL345()
{
Single_Write_ADXL345(0x31,0x0B); //测量范围,正负16g,13位模式
没有合适的资源?快使用搜索试试~ 我知道了~
基于STM32智能婴儿床(代码+仿真)
共87个文件
h:10个
lst:8个
obj:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 71 浏览量
2024-05-12
11:07:50
上传
评论
收藏 659KB RAR 举报
温馨提示
基于STM32智能婴儿床的功能通常包括以下几个方面: 温度监测与控制:通过温度传感器检测婴儿床内的温度,当温度过高或过低时,可以自动或手动控制加热或制冷设备,确保婴儿处于舒适的温度环境中。 湿度监测与控制:湿度传感器可以检测婴儿床周围的湿度,如果湿度过高或过低,系统可以自动或手动控制加湿或除湿设备,以保持合适的湿度水平,防止婴儿皮肤干燥或潮湿。 液体检测(尿湿检测):通过液体检测模块,可以检测婴儿是否尿床。当检测到婴儿尿床时,系统可以发出预警信号,如通过LED指示灯亮起或进行语音播报,提醒家长及时更换尿不湿。 声音检测与安抚:声音传感器可以检测婴儿是否啼哭。当检测到婴儿哭泣时,系统可以自动控制婴儿床摇床和播放音乐,以安抚婴儿的情绪。音乐播放模块通常包含多种轻柔的音乐供家长选择。 撞击检测与预警:通过MPU6050等传感器检测婴儿是否受到撞击。当检测到婴儿受到撞击时,系统可以发出预警信号,以便家长及时查看婴儿的状况,防止因长时间没有监护人救助而给婴儿的生命造成危害。 显示与操作:智能婴儿床通常配备液晶显示屏,用于显示当前信息和状态,如温度、湿度、尿湿状态等。同时,系统还提供按键模块,方
资源推荐
资源详情
资源评论
收起资源包目录
基于STM32智能婴儿床(代码+仿真).rar (87个子文件)
基于STM32智能婴儿床(代码+仿真)
程序
delay.OBJ 1KB
adc.OBJ 19KB
adc.build_log.htm 1KB
程序_uvopt.bak 55KB
程序_uvproj.bak 14KB
程序.uvgui.Administrator 74KB
adc.lnp 23B
lcd.h 745B
delay.LST 2KB
程序 67KB
程序_SI.SearchResults 215B
intern_eeprom.h 788B
程序_SI.PS 28KB
lcd.c 3KB
main.__i 26B
STARTUP.LST 14KB
程序_SI.IMD 368B
dht.LST 408B
程序.M51 57KB
main.OBJ 56KB
DS18B20_One.h 4KB
程序.SBR 37KB
程序.uvgui_Administrator.bak 74KB
adc.hex 7KB
STARTUP.A51 6KB
程序_SI.IMB 4KB
common.c 279B
uart_trx.h 2KB
lcd.OBJ 12KB
adc_uvopt.bak 56KB
dht.__i 25B
程序_SI.PR 4KB
程序.hex 20KB
lcd.LST 6KB
main.LST 40KB
config.h 58B
adc.uvgui.Administrator 89KB
adc.plg 163B
程序.uvproj 13KB
lcd1602.h 11KB
程序.plg 164B
lcd1602.h.orig 11KB
common.h 428B
程序_SI.IAB 12KB
程序.uvgui_sywl08.bak 77KB
程序_SI.PO 776B
common.LST 1KB
程序_SI.IAD 448B
iic.c 6KB
DS18B20.h 1KB
adc.c 6KB
程序.build_log.htm 927B
delay.h 161B
adc 18KB
STARTUP.OBJ 749B
key_alone.h 1KB
iic.OBJ 19KB
程序.uvgui.sywl08 77KB
adc_uvproj.bak 14KB
adc.uvproj 13KB
adc.uvopt 56KB
程序_SI.WK3 36KB
adc.uvgui.haojun 88KB
delay.c 412B
adc.LST 13KB
程序.lnp 85B
common.OBJ 5KB
程序.MAP 97KB
main.c.orig 5KB
main.c 21KB
adc.M51 22KB
common.__i 28B
iic.LST 11KB
程序_SI.PFI 40B
lcd.__i 25B
程序_SI.PRI 22KB
程序.uvopt 55KB
1_程序.zip 262KB
__Previews
智能温控风扇.SchDocPreview 56KB
资料
仿真.PWI 1KB
仿真.pdsprj.LAPTOP-3NK8R21N.lenovo.workspace 4KB
Project Backups
仿真 [Autosaved].pdsprj 29KB
仿真 [20240430, 22-20-22].pdsprj 30KB
仿真.pdsprj 28KB
仿真.pdsprj.DESKTOP-I153NDJ.YY.workspace 2KB
仿真.DSN 156KB
Last Loaded 仿真.DBK 156KB
共 87 条
- 1
资源评论
科创工作室li
- 粉丝: 3483
- 资源: 61
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功