//************************************************************
// 文件名称 : main.c
// 作者 : jay_lee
// 模块功能 :
// 最后更正日期:
// 版本 :
// 更改记录 :
// 更改版本 : V1.0 2018-1-22
//*************************************************************
#include "h\STC15F.h"
#include "lib\Sensor.h"
#include "h\data_type.h"
//#define _sif_debug_
#ifdef _sif_debug_
#include "sif\sif_bus.h"
#endif
//******************宏定义**********************//
#define WAITMODE 0 //等待模式
#define TRACKFREQ 1 //自动追频
#define STRATMODE 2 //工作模式
#define STOPMODE 3 //停机模式
#define MAXGEAR 4 //调整功率模式
#define ON 1
#define OFF 0
#define FAN P34
#define LED_R P35
#define LED_G P36
INT8U code EE_Data[4]={0,0,0,0}; //清除EEPROM的空间
INT8U WorkMode=0,KeyCount=0,Power_Gear=0;
#define CH_INITIAL_DIFF 668 //检测通道与参考通道的初始差值 千分比
#define WATERThresholdtmp 1300 //检测通道有无水差值完全覆盖2580
#define WATERCHECK_SPEED 20 //水位检测的速度,确认次数
INT8U timer1msCount=0;
INT8U timer10msCnt=0;
INT8U timer100msCnt=0;
bit btime100ms=0;
bit btimer10ms; //10ms标志
bit timer1msFlag=0;
bit KeyStaus=0;
bit openflag=0;
bit High_flag=0;
bit TrackFreqStartFlag=0;
INT16U Adc_Temp=0;
bit Timer1sFlag=0;
INT8U Power_Gear;
void StartWork(void)
{
WDTCR |=0x10; // 清狗
if((Water_flag == 0))
{
WorkMode = STOPMODE; //停机模式
}
}
void StopWork(void)
{
P13=OFF;
ENPWM=0;
LED_G=OFF;
LED_R=ON;
FAN=OFF;
Power_Gear=0;
EA=0;
while(1)
{
WDTCR |=0x10; // 清狗
}
}
void ModeChoose(void)
{
while(!Timer1sFlag)
{
Adc_Temp= Adc_Convert();
if(Adc_Temp>950)
{
High_flag=1;
}
if(High_flag==1)
{
if(Adc_Temp<750)
{
TrackFreqStartFlag=1;
}
}
WDTCR |=0x10; // 清狗
if(SOCAPI_TouchKeyStatus&0x80) // Bit7:一轮按键扫描是否完成?
{
SOCAPI_TouchKeyStatus&=0x7f; // 清掉 Bit7:一轮扫描完成标志
TouchKeyScan();
SOCAPI_WaterLevelDetector();
TouchKeyRestart();
}
if(btime100ms==1)
{
btime100ms=0;
LED_G=~LED_G;
LED_R=~LED_R;
}
}
Timer1sFlag=0;
LED_R=OFF;
btime100ms=0;
if(Water_flag==1)
{
if((TrackFreqStartFlag==1))
{
WorkMode = TRACKFREQ;
SOCAPI_AtomizerSetPower(20);
SOCAPI_TrackFreq_Init();
}
else
{
if(SOCAPI_GetTrackFreqStaus()==1)
{
SOCAPI_SetFreq();
WorkMode = STRATMODE; //进入工作模式
TouchKeyInit(); //触摸按键初始化
LED_G=ON; //正常工作指示灯
}
else
{
LED_G=OFF;
ENPWM=0;
while(1)
{
WDTCR |=0x10; // 清狗
if(btime100ms==1)
{
btime100ms=0;
LED_R = ~LED_R;
}
}
}
}
}
else
{
EA=0;
LED_R=ON;
LED_G=OFF;
ENPWM=0;
while(1)
{
WDTCR |=0x10; // 清狗
}
}
}
void KeyScan(void)
{
ADCCFG = 0x84;
ADCCR = 0x87;
Adc_Temp = Adc_Convert();
if(Adc_Temp<682)
{
Adc_Temp=0;
}
else
{
Adc_Temp=Adc_Temp-682;
}
Power_Gear= Adc_Temp/21;
if(Power_Gear>=16)Power_Gear=16;
if(Water_flag==0)
{
Power_Gear=0;
}
SOCAPI_AtomizerSetGear(Power_Gear);
if(Power_Gear!=0)
{
FAN = ON;
LED_G = ON;
LED_R = OFF;
}
}
void timer1()interrupt 3
{
TH1 = (65536-4000)/256; //400*1/4us=1Ms
TL1 = (65536-4000)%256;
timer1msFlag=1;
timer1msCount++;
if(timer1msCount>=10)
{
timer1msCount=0;
btimer10ms=1;
timer10msCnt++;
if(timer10msCnt>=10)
{
timer10msCnt=0;
btime100ms=1;
timer100msCnt++;
if(timer100msCnt>25)
{
timer100msCnt=0;
Timer1sFlag=1;
}
}
}
}
void Sys_Init(void)
{
RSTCFG = 0x24;
WDTCR =0x90;
//ADC设置
ADCCFG = 0xc4;
ADCCR = 0x87;
TMCON = TMCON|0x02;
TMOD = TMOD|0x10;
TH1 = (65536-4000)/256;
TL1 = (65536-4000)%256;
TR1=0; //定时器T1的运行控制位。打开timer1前,先清TRO
ET1=1; //允许timer1中断
TR1=1; //允许timer1开始计数
//**************************************************
SOCAPI_Atomizer_Init(0);
SOCAPI_WaterLevelDetectorInit(CH_INITIAL_DIFF,WATERThresholdtmp,WATERCHECK_SPEED);
//**************************************************
EA=1; //打开总中断
TouchKeyInit();
#ifdef _sif_debug_
IPSIF=1;
Debug_TouchKeyIICInit(0);
#endif
P3CFG1=(P3CFG1&0Xfc)|0X01;
P3CFG1=(P3CFG1&0Xf3)|0X40;
P3CFG1=(P3CFG1&0Xcf)|0X10;
FAN=OFF;
LED_R= ON;
LED_G= OFF;
}
void main()
{
P13=OFF; //上电先拉低PWM的输出
Sys_Init(); //系统初始化
ModeChoose(); //模式选择
while(1)
{
WDTCR |=0x10; // 清狗
if(btimer10ms==1) //10ms扫描一轮
{
btimer10ms=0;
if(!((WorkMode==TRACKFREQ)|| (WorkMode==MAXGEAR))) //追频和功率调整过程不处理按键
{
KeyScan();
}
}
switch(WorkMode)
{
case TRACKFREQ: //自动追频模式
//**************************************************
SOCAPI_TrackFreq();
if(TrackFreqFlag==1)//追频完成标志置位
{
WorkMode= MAXGEAR;
ADCCFG = ADCCFG|0x01; //选择参考电压2.4VDD,切换到测量电流
ADCCR = 0x86; //打开ADC电源,选通P16通道
AjustPowerFlag=0;
}
if(btime100ms==1)
{
btime100ms=0;
LED_G=~LED_G; //追频过程可以加入指示灯指示
}
break;
case MAXGEAR: //功率调整模式
//**************************************************
SOCAPI_AdjustPower();
if(AjustPowerFlag==1)//追频完成标志置位
{
WorkMode= STRATMODE;
LED_G=1;
LED_R=0;
}
if(btime100ms==1)
{
btime100ms=0;
LED_G=~LED_G; //追频过程可以加入指示灯指示
}
break;
case STRATMODE: //正常工作模式
StartWork();
break;
case STOPMODE:
StopWork(); //进入停机模式 ,关闭所有输出,
break;
case WAITMODE:
Power_Gear=0;
SOCAPI_AtomizerSetGear(Power_Gear); //设置0档位进入待机模式
break;
default :
break;
}
if(!((WorkMode==TRACKFREQ)|| (WorkMode==MAXGEAR)))
{
SOCAPI_AtomizerWork();
}
}
}
雾化香薰机器源程序代码
1星 需积分: 40 161 浏览量
2018-10-09
19:32:23
上传
评论 3
收藏 8KB ZIP 举报
Lucky.Lucky
- 粉丝: 363
- 资源: 5
最新资源
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
- SpringBoot整合mongodb学习MongoTemplate和MongoRepository两种方式CRUD使用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈