主程序代码
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "BMP180.h"
#include "BH1750.h"
#define uint unsigned int
#define uchar unsigned char
uchar abc[17];//串口发送缓冲
uint WktCount=0;
bit WktFlag=0;
sbit CS1=P0^5;//CS睡眠管脚,开漏输出
sbit PPG=P1^7;//供电管脚,推挽输出
sbit PPG1=P3^0;//同上
int main (void)
{
int i;
Set_All_GPIO_Quasi_Mode;
P05_OpenDrain_Mode;//设置为开漏模式
P13_OpenDrain_Mode;//设置为开漏模式
P14_OpenDrain_Mode;//设置为开漏模式
P17_PushPull_Mode;//推挽输出
P30_PushPull_Mode;
//----------I/O口配置----------------
CS1=1;//无线模块睡眠
PPG=0;//关闭外围器件供电
PPG1=0;
set_P06;
set_P07;//初始化串口
//---------I/O口初始化------------
Init_BH1750();//初始化光照传感器
set_ES_1;//开启串口1中断使能
InitialUART0_Timer1(9600);
//----------串口1、串口0配置----------------
WKCON =0x07; //预分频配置2048
RWK =255-211;//设置为50s定时——72个为一小时
set_EWKT; //使能定时唤醒中断
set_WKTR; //运行定时唤醒功能
//----------WKT配置------------------------
EA = 1;//开启总中断
while(1)
{
if(WktFlag)//判定是否溢出
{
WktCount++;
WktFlag=0;
if(WktCount>=72)//1h发送一次
{
PPG=1;//推挽输出,给外围器件供电
PPG1=1;
CS1=0;//拉低,接地唤醒无线透传模块
Timer3_Delay100ms(1);
Init_BMP085();//初始化气压计
bmp085Convert();
Timer3_Delay100ms(1);
EC_BH1750();//转化光照度
abc[0]=0x54;//T温度
abc[1]=temperature/100+48;
abc[2]=temperature%100/10+48;
abc[3]=0x2e;
abc[4]=temperature%10+48;
abc[5]=0x50;//P气压
abc[6]=pressure/10000+48;
abc[7]=pressure%10000/1000+48;
abc[8]=pressure%1000/100+48;
abc[9]=0x4c;//L光照
abc[10]=(int)BH1750_temp/10000+48;
abc[11]=(int)BH1750_temp%10000/1000+48;
abc[12]=(int)BH1750_temp%1000/100+48;
abc[13]=(int)BH1750_temp%100/10+48;
abc[14]=(int)BH1750_temp%10+48;
for(i=0;i<15;i++)
{
Send_Data_To_UART0(abc[i]);
}
WktCount=0;
}
ADCCON1 = 0X00;//关闭ADC
clr_BODEN;//关闭欠压检测
set_PD;// 进入掉电模式
PPG=0;//关闭外围器件供电
PPG1=0;
CS1=1;//无线模块进入睡眠
}
}
}
//---------定时唤醒中断服务程序--------------
void WakeUp_Timer_ISR (void) interrupt 17
{
WktFlag=1;
clr_WKTF;//清除WKT溢出标志位
}
|