/**************************************************************
* 文件名称: main.c
*
*作 者: 苏锋
*
*日 期: 2018-8-8
*
*说 明: BH1750光强传感器实验主程序
*
*修改记录:
****************************************************************/
//单片机头文件
#include "stm32f10x.h"
//硬件驱动
#include "delay.h"
#include "usart.h"
#include "i2c.h"
#include "BH1750.h"
#include "GUI.h"
#include "Lcd_Driver.h"
#include "Lcd_Api.h"
#include "fan.h"
#include "ch422.h"
#include "beep.h"
#include "sht20.h"
//结构体声明
IIC_INFO iicInfo;
BH1750_INFO BH1750_Info;
FAN_INFO Fan_Info;
SHT20_INFO SHT20_Info;
//自定义变量
char Light_STA=0;
char Window_STA=0;
//定于语音变量
#define voiceMood 0x03
//定义16个数码管的映像缓存区
unsigned char CH422_buf[16];
//机械按键变量
unsigned char i;
static u8 sta;
/*
************************************************************
*函数名称:Hardware_Init
*
*函数功能:硬件初始化
*
*入口参数:无
*
*返回参数:无
*
*说明:初始化单片机功能以及外接设备
************************************************************
*/
void Hardware_Init(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断控制器分组设置
Delay_Init();//Systick初始化,用于普通的延时
Usart1_Init(115200); //串口初始化为115200
Lcd_Init();//LCD初始化
Lcd_Clear(WHITE);//LCD清屏
Fan_Init();//风扇初始化
IIC_Init();//软件IIC总线初始化
CH422_Init();//机械按键初始化
BH_init();//光照初始化
Beep_Init();//语音模块初始化
}
/*
************************************************************
*函数名称:SHT20Data
*
*函数功能:温湿度数据
*
*入口参数:无
*
*返回参数:无
*
*说明:初始化单片机功能以及外接设备
************************************************************
*/
void SHT20Data(void){
SHT20_GetValue();
if(SHT20_Info.humidity>80||SHT20_Info.temperature>30){
Fan_Set(ON);
}else{
Fan_Set(OFF);
}
}
/*
************************************************************
*函数名称:BHData
*
*函数功能:光照度数据
*
*入口参数:无
*
*返回参数:无
*
*说明:初始化单片机功能以及外接设备
************************************************************
*/
void BHData(void){
Get_BH_Value();
if(BH1750_Info.bh_data<100){
Light_STA =1;
}else{
Light_STA =0;
}
}
/*
************************************************************
*函数名称:BeepVoice
*
*函数功能:语音模块
*
*入口参数:无
*
*返回参数:无
*
*说明:初始化单片机功能以及外接设备
************************************************************
*/
void BeepVoice(void){
Beep_Start();
Beep_Transfer(voiceMood);
}
/*
************************************************************
*函数名称:CH422
*
*函数功能:触摸按键初始化
*
*入口参数:无
*
*返回参数:无
*
*说明:初始化单片机功能以及外接设备
************************************************************
*/
void CH422(void){
//扫描检查高八位引脚每一位的状态,然后根据按键输入状态来控制LED灯的亮灭
for(i = 0;i<4;i++)
{
if(!((CH422_ReadByte()>>i)& 1))
{
DelayXms(10);
if(!((CH422_ReadByte()>>i)& 1))
{
switch (i){
case 0 :
Window_STA=!Window_STA;
BeepVoice();
break;
case 1 :
Window_STA=0;
BeepVoice();
break;
case 2 :
Light_STA=!Light_STA;
BeepVoice();
break;
case 3 :
Light_STA=0;
BeepVoice();
break;
}
sta = ! sta;
CH422_WriteByte(CH422_OC_H_CMD | (0xFF - (sta<<i)));
}
}
DelayXms(1);
}
}
/*
************************************************************
*函数名称:main
*
*函数功能:主函数
*
*入口参数:无
*
*返回参数:0
*
*说 明:
************************************************************
*/
int main(void)
{
Hardware_Init(); //延时函数初始化
//检查机械按键LED灯是否正常亮灭
for(i = 0;i<= 4;i++)
{
CH422_WriteByte(CH422_OC_H_CMD | (0xFF - (1<<i)));
DelayXms(50);
}
LCD_Test();
Lcd_Clear_Area(WHITE,0,40,128,88);
Gui_DrawFont_GBK16(10,30,RED,WHITE, (u8 *) "温度: ");
Gui_DrawFont_GBK16(10,48,RED,WHITE, (u8 *) "湿度: ");
Gui_DrawFont_GBK16(10,64,RED,WHITE, (u8 *) "光照: ");
Gui_DrawFont_GBK16(10,80,RED,WHITE, (u8 *) "风扇: ");
Gui_DrawFont_GBK16(10,96,RED,WHITE, (u8 *) "窗户: ");
Gui_DrawFont_GBK16(10,112,RED,WHITE,(u8 *) "灯 : ");
while(1)
{
BHData();
CH422();
SHT20Data();
SPILCD_DisString(50, 30, 16, BLUE, 1, "%.2f C ",SHT20_Info.temperature);
SPILCD_DisString(50, 48, 16, BLUE, 1, "%.2f %%RH",SHT20_Info.humidity);
SPILCD_DisString(50, 64, 16, BLUE, 1, "%.2f lux",BH1750_Info.bh_data);
SPILCD_DisString(50, 80, 16, BLUE, 1, "%d ",Fan_Info.Fan_status);
SPILCD_DisString(50, 96, 16, BLUE, 1, "%d ",Window_STA);
SPILCD_DisString(50, 112, 16, BLUE, 1, "%d ",Light_STA);
DelayXms(100);
}
}