找回密码
 注册
关于网站域名变更的通知
查看: 539|回复: 1
打印 上一主题 下一主题

雾化器库使用说明

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-11-26 10:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
, ~" Y0 k4 Y* @
本文档为赛元提供的雾化器库的使用说明,雾化器库支持1.7M、2.4M和3M频率的雾化片,库提供了函数接口进行设置。其中1.7M雾化片适用于大功率加湿器(功率在15W以上),2.4M、3M雾化片适用于小功率的香薰机(功率在6-12W)。雾化器库提供了自动追频、功率设置、雾化工作、触控检水功能。库共提供了11个函数接口供用户调用,实现雾化器功能。
4 ?) n! ?5 ?3 j7 X" S3 G# Z" U; z一、雾化器库介绍:
+ X4 t7 G" r# {& c8 E雾化器Atomizer文件夹中包含:# R+ w1 x( T! W9 g
SC91F832_C.H             mcu头文件
8 O4 P9 n2 t: x, z& bAtomizer.h                包含雾化器外部调用接口函数$ _4 }* d4 @  ~! G
SOC_Atomizer_lib_V1.3.LIB   雾化器库文件. @, h- S4 u1 |% P: x
实现雾化器工作需要占用一定的系统资源,雾化器库资源占用:
: _1 E' b- [9 ?. ?ROM:1.8K  DATA: 50BYTE   XDATA:60BYTE
! I, o, u! ?7 b# A& ]/ v2 k" r定时器:定时器0
- E* y/ b4 q# R7 p+ T6 pPWM: PWM1+ C" E+ V$ |7 H/ A( k, ]
ADC:两路ADC' {8 M! d% B$ R& \7 a6 {
EEPROM: 4byte( G3 u% u9 l3 D; S
Touch Key: 两路+ E4 V* g, K/ U: j* M

2 X4 e! J% t) k二、雾化器的工作流程, F" H4 h9 g) o/ i# \
- m; G5 `5 G; l- M1 Q( W
三、雾化器库函数接口和接口说明
& Z' x0 r# m2 V9 Z! a! Z2 p雾化器库共提供10个函数接口和3个全局变量:. C" X! N+ H4 r6 d. W: ]  I
变量:bit       TrackFreqFlag;               变量说明:追频完成标志0:未完成;1:完成     3 f4 K' C1 @$ \& q5 f2 a
变量:bit       AjustPoweRFlag;           变量说明:功率调整完成标志0:未完成;1:完成
1 W1 |9 _2 s  ?- q: ?变量:bit    Water_flag;               变量说明:水位检测输出结果 0:缺水;1:有水
/ e, Q1 x) }5 z! B
% h  X7 }6 p6 ?3 Q  @! [, Q函数:bit   SOCAPI_GetTrackFreqStaus(void);      
, c6 ^! r! p9 K# N# F函数功能:获取雾化器追频状态,返回1为已追频,0为未追频
; _; ?2 X5 z8 f$ _2 t0 B9 }" o) Q3 }
函数:void  SOCAPI_SetFreq(void) ;               
# j2 U  E1 q) H; z函数功能:设置雾化器工作频率,当得到已追踪过频率可以调用该函数设置雾化器的频率. Y; W" G6 ]0 A) C+ V
( V/ R  e3 z% c+ D' J8 A8 z
函数:void  SOCAPI_Atomizer_Init(INT8U mode);        
( k. x$ K2 W3 A( R- d4 ~函数说明:雾化器初始化,设置PWM和定时器0;设置mode为0时雾化器的工作频率设置为1.7M;mode为1时为2.4M;mode为2时为3M
* Q8 x: u2 r' H6 @: N( v
3 b3 H" e3 G, \2 p5 ~  p* X, N; o函数:void  SOCAPI_TrackFreq_Init(void);            9 C* \5 n9 S: v3 K. S9 o
函数功能:雾化器追频初始化,设置了追频所需的变量,需要在追频前调用
. d2 U4 P' b9 Q" h
( ]+ |6 p8 K6 [5 r2 B函数:void  SOCAPI_TrackFreq(void);               
  G  _6 l7 x0 i# h函数功能:雾化器追频,该函数需要在SOCAPI_TrackFreq_Init之后在主程序中一直调用,直到TrackFreqFlag变量置1,追频完成后进入功率调整. d* z* f. {2 ?
* C+ q5 `$ @+ V' T1 h
函数:void  SOCAPI_AtomizerSetPower(INT8U Power);   
5 X) @! T# g( \) {9 h/ Q1 E$ {# s* h函数功能:设置雾化器工作时最大档功率,1.7M:设置范围 15-21W;2.4M、3M:设置范围6-12W
: O& o* M( f& O9 s  H$ q6 L) W& r& n5 d8 ~
函数:void  SOCAPI_AdjustPower(void);            " ?& i. o- r4 ?( j( o# ?" E
函数功能:进行功率调整,将最大档功率调制到设定功率,需要在SOCAPI_AtomizerSetPower之后调用
9 t8 o' \; ]* j% B
8 f+ H  q3 o* a) g4 r函数:void  SOCAPI_AtomizerSetGear(INT8U Gear);   
9 ]0 d, E- O) M& m: o6 ]5 B: h函数功能:设置档位,16档可调,0为低档,16为高档位,用户可以在当中选择任意档位作为目标功率
* m( w3 Z9 D# c4 S; ]! u
2 Z* b( X9 B7 ]3 p函数:void  SOCAPI_AtomizerWork(void);            ' P6 T" o& d+ ?# y* Q. X4 W0 s
函数说明:雾化器雾化工作,该函数需要在主函数中无阻塞调用
$ r$ P& M" u5 \; F) P. v* ?/ i: C6 y
, v' F/ ^/ \1 Z函数: void  SOCAPI_WaterLevelDetectorInit(INT16U Initial_Diff,int ThresholdTmp,INT8U Speed); 函数说明:水位检测初始化,设置水位检测参数
6 V8 G/ c4 c" Z5 ?, w" m1 r/ g
函数:void  SOCAPI_WaterLevelDetector(void);        3 a$ \4 a9 @: g+ Q
函数功能:水位检测,检测结果由Water_flag输出
2 ^  d) g2 }; c# t7 ~# l; |, K% A2 i/ f# [
四、雾化器库的具体使用/ B1 T! b$ Y# @' ~; a# e" r
  雾化器库使用准备: 雾化器的检水功能需要使用到Touch Key,赛元提供触控库帮助用户使用赛元的触控功能,具体使用见触控库的使用说明或者联系赛元的工程师,在项目工程中添加触控库;采集TK通道的数据,设置main.h中以下三个参数:3 y" E# x, q8 ?0 d9 F
#define  CH_INITIAL_DIFF      668        
; A: [7 D/ ]1 \参数说明:检测通道与参考通道的初始比例,采样通道无水时RAWdata/参考通道RAWdata*1000- u+ ]5 h4 T1 @' q5 g
#define  WATERThresholdtmp    1300        
2 g; R4 H6 p/ j$ f6 z; N参数说明:检测通道有无水差值*0.6,如完全覆的差值为2166,则设置为1300。
# D' {) `- h3 S% Q1 U2 K#define  WATERCHECK_SPEED     20        9 I: g9 [  |+ J5 z+ z
参数说明:水位检测的确认次数 ,取值范围10-249    ,确认时间为10*Nms& h1 K! m( V! }4 S6 E- e7 ?. x
通过函数SOCAPI_WaterLevelDetectorInit()进行设置;
6 M. u! ~+ h; e, E: ~5 {+ N; K' ?
5 I( y5 W! V) G+ n) M   本软件库适用于赛元的SC91F831和SC91F832芯片,用户使用时需将Atomizer文件夹添加到项目工程中,并在KEIL项目中添加Atomizer文件夹中的SOC_Atomizer_lib_V1.3.LIB,
" f3 t4 w' d3 {7 V" L8 Z, M: i. A1、在工程主文件中调用雾化器库文件6 i* p9 T0 L- I9 w
#include    "Atomizer\Atomizer.h"               //包含雾化器外部调用接口函数
' o0 }1 s/ I  x/ _7 C" l2 s$ }% s% [3 V
2、清除EEPROM空间7 j* T! Z; O% S
在主文件中加入INT8U   code  EE_Data[4]={0,0,0,0};         //清除EEPROM的空间   
& e$ b  P, k  |; G& [+ y& C设置工程配置的BL51 Locate选项卡中的CODE为?CO?MAIN(0X1f00)# J7 Q$ e( I( w( a) h
" @2 P: P4 l7 e" o& y" r  u
3、初始化雾化器工作  N/ {$ Q& t9 U# h
根据使用的雾化片频率调用函数SOCAPI_Atomizer_Init(0); 对雾化器进行初始化6 M7 f/ d5 @* C) W3 x
& c( Z! R3 X4 I  |7 e% G4 ?8 Q, |
4、水位检测初始化4 r3 K$ m* g6 p( @8 p0 |* F
调用以下函数对雾化器进行初始化,该函数需要在水位检测函数调用前进行设置
; c2 ~( G  P; d7 H  q% sSOCAPI_WaterLevelDetectorInit(CH_INITIAL_DIFF,WATERThresholdtmp,WATERCHECK_SPEED);
  t4 t; }2 g  J) Z0 J1 s1 p
+ U/ V( V6 S' ~7 u0 ~& A. i$ K5、查询是否追频
# r3 O1 c* w( F调用函数SOCAPI_GetTrackFreqStaus,返回是否已追踪过频率,若已追频则调用函数SOCAPI_SetFreq设置雾化器工作的频率,若未追踪过频率则进行追频; I/ ~# @# p2 N$ E$ A
3 J/ h  K, [0 p7 r8 q
6、追踪频率/ i! j. F8 r' l; {
调用函数SOCAPI_AtomizerSetPower设置雾化器工作的最大档功率,建议加湿器设置为16-21W,香薰机设置为6-12W;设置雾化器的功率后调用SOCAPI_TrackFreq_Init()对追频进初始化;在主函数中无阻塞的调用函数SOCAPI_TrackFreq_Init直到TrackFreqFlag变量置1,追频完成后进入功率调整
0 K. Q& Z7 _) m3 @. e$ b
: r4 O1 I  @/ X, q) ^7、功率调整
6 ^" S2 E( v3 \( W- d$ i追频完成后将ADC切换到检测电流的ADC口,无阻塞调用函数 SOCAPI_AdjustPower进行功率调整,将最大档的功能调整到设定值;由于器件差异,调整后功率误差在正负1W左右;
: T) q9 z( {5 b1 C) K
/ b  y) x/ K7 y  i8、雾化器雾化7 f: T! Z1 R& f6 m  J8 f" N
在主函数中无阻塞的调用函数SOCAPI_AtomizerWork()进行雾化工作,切勿在追频和调整功率过程调用该函数. S9 t& y0 Z8 o  z8 m4 o' k$ I$ F

/ j$ q9 J+ K3 z! S6 z9、档位调整6 @: y& H% M9 r" ]& o3 f
在雾化器正常雾化过程可以调用函数SOCAPI_AtomizerSetGear进行设置档位,函数支持16吉档位设置,雾化器库将最大档均分成16级档位,用户可以根据所需的各档位功率选择合适的档位作为实际工作的档位。
+ j4 s7 _9 m9 u( b$ @* ?9 m+ n& _' P+ Q5 a
10、检测水位
/ z! O' C5 f! w. d雾化器库已经在雾化时调用了水位检测函数,检测结果由Water_flag输出,若用户需要在雾化器不正常雾化下检水则需要在主函数中调用程序段:
4 F. n! c( P3 u, q# @if(SOCAPI_TouchKeyStatus&0x80)        // Bit7:一轮按键扫描是否完成?
( N& @2 D2 p+ \# G       {            ' d9 Z) v  H! [1 U; G$ \: k1 l
            SOCAPI_TouchKeyStatus&=0x7f;    // 清掉 Bit7:一轮扫描完成标志5 x/ y9 q) y5 z# h
            TouchKeyScan();            // 数据算法处理后,读取键值   
9 x  L1 W! m: {5 S$ q. a            SOCAPI_WaterLevelDetector();    // 水位检测            
# j# k# x( r  n1 x6 A            TouchKeyRestart();                // 启动下一轮扫) N3 [" S( D8 Q: f, d) e
       }
& V* s5 Q; \! X  [8 L8 d- O若在使用中有任何的疑问请联系赛元的工程师!
# R% [* _  ]: Z" t6 X' L5 K, r
+ ?) I- {7 p- Y( h/ c& T0 E9 E4 D' ]  d" M/ A$ g- j8 d) A
B:操作步骤:
2 @" c$ ?. _, m- @1、    输入电压:           交流220V\直流24V
& v8 p( w2 h0 U1 L# `, `9 a2、    最大档功率:        约20W* W2 C) f. B( B: r
3、    指示灯状态:      缺水:   红灯亮;& S  _6 z4 Z2 J) U3 j/ O+ e
正常工作:绿灯亮
4 @5 _; |+ f' t模式选择:红绿灯交替闪烁
5 J7 _  z4 A( q) _! m: }追频:    绿灯闪烁) s9 o9 d% d$ g( B0 h, T
关机:    红绿灯灭
4 W) ]) {' ~5 E& F4、    功率档位:        0~16档可调,每档功率约为20W/16*档位,通过旋钮开关调节,逆时针拧为减小功率,顺时针拧为增加功率。( ]- K( q( |% ?% c( g$ R
5、    关机:逆时针拧到尽头$ ^4 m7 B: \+ X0 v- ]0 z  M
6、    追频模式:关机进入开机状态时,红绿灯交替闪5秒钟,此为等待是否选择追频模式。5秒钟内由最小功率档位拧到最大功率档位,再拧到最小功率档位并停留在最小功率档位,此时会进入追频模式,追频过程中绿灯闪烁约5秒种,闪烁完成后绿灯亮进入正常工作模式。, B3 s! j! h/ \7 e* q+ i  P. _( n$ X" o
7、    触控检水:检水弹片,检水弹片塞在水槽中间的圆柱内,当水量过低时,会检测到缺水状态并亮红灯,需要加水后重新开机再进入正常工作模式。0 Z7 b, S0 o. l2 C
6 S: ~# }2 a: D' ]1 o( B
C:注意事项:2 N) @* T6 Z7 ?* F& y1 r7 D
1、    更换雾化片后,需要重新追频;; }/ h: \; i1 }+ `! W( j0 F
2、    重新烧录程序后,需要重新追频;& s+ O; w+ P2 T* Y
3、    触控检水的接口接线由于是跳线,拆装时容易松动,注意必须要接上并良好接触,不能随意更换线;
4 u2 p) ?; h$ R) N0 c- x% u/ ~% m5 @2 V  J) a' a! W
* |2 U( D" J  X. y; o" ~& \* M

  p# w; V' g1 E" v3 k  f, p$ w4 G4 u

3 i/ \! x, v# Y* `: E( x% [8 g  Q5 |& Q

* Q- Z% N% I6 O5 U. S4 q- L& k. B. m5 o
二、    香薰机样机:
" ~+ G5 ^4 H; X# [5 O2 T$ qA:图示如下:
  L6 {) Q- w9 t1 z6 w0 E+ H
3 `* {( w; P! @7 v: @; G7 {# ~  ~1 h9 ]& U
B:操作步骤:$ t  l9 K- X8 f7 \+ @9 E, S# @
1、    输入电压:           交流220V\直流24V. G' `  L+ C1 j% ~/ e- K3 H. k, t' I
2、    最大档功率:        约10W. l; B# Z; J) A: x7 I
3、    指示灯状态:      缺水:    4个绿灯全亮;
& z1 N! U: p+ G% ]# z( o( r$ C开机:    最左的绿灯亮
5 h; n, }  S) B4 B* a; _$ E* f3 w- V减档:    第2个绿灯亮( K' Q% E  E5 m* v
加档:    第3个绿灯亮
, ]) m/ I. I% o" Y4 Z& F) d2 d% X  S! H" p关机:    全灭1 t1 k2 g1 h% X- U: o
追频:      4个绿灯全闪;
3 L; d3 u) K$ Y6 n6 X4、    功率档位:        0~4档可调,每档功率约为10W/4*档位,开机状态下按下第2个按键为减档,按下第3个按键为加档。
% T+ W, N4 m. g- Z5、    开、关机:按下最左边第1个按键# H5 g2 c# w" k) ]% N( _
6、    追频模式:同时按下第2个和第3个按键,进入追频模式( ?/ n1 _' H% i% P8 Z
7、    触控检水:检水弹片,当水量过低时,会检测到缺水状态并4个绿灯全亮,加水后检测有水状态下会进入开机模式,此时为0档位2 ]% |6 P6 t6 r

9 p; }9 U: L: z5 f) }7 j$ o. q  ]C:注意事项:2 F+ p/ y) y7 Z
1、    更换雾化片后,需要重新追频;5 q1 V5 i, h# b; |& T$ V
2、    重新烧录程序后,需要重新追频;
% v  Y: z. h7 X  \; R0 g  B2 g/ U1 D# ^7 L# @
单片机源程序如下:
6 u; N8 I; Z! Q
  • //************************************************************
  • //  Copyright (c) 深圳市赛元微电子有限公司
  • //        文件名称        : Atomizer.c
  • //        作者                :
  • //        模块功能        : 香薰机
  • //        局部函数列表:
  • //  最后更正日期:
  • //         版本                :
  • //         更改记录        :
  • //        更改版本        :  V1.0  2015-10-22
  • //*************************************************************
  • #include        "h\SC91F832_C.h"
  • #include        "lib\SensorMethod.h"           //包含touchkey外部调用接口函数
  • #include    "h\data_type.h"
  • #include    "Atomizer\Atomizer.h"                           //包含雾化器外部调用接口函数
  • //#define          _sif_debug_
  • #ifdef _sif_debug_
  • #include "sif\sif_bus.h"
  • #endif
  • #define                BS(SFR,NUM)                (SFR|=(1<<NUM))                //清bit位
  • #define                BC(SFR,NUM)                (SFR&=~(1<<NUM))        //bit位置1
  • #define                SET(SFR,NUM)        (SFR = NUM)
  • //******************宏定义**********************//
  • #define     WAITMODE     0                                  //等待模式
  • #define     TRACKFREQ    1                                  //自动追频
  • #define     STRATMODE    2                                  //工作模式
  • #define     STOPMODE     3                                  //停机模式
  • #define     MAXGEAR      4                                  //调整功率模式
  • #define         ON                      1
  • #define         OFF                    0
  • #define     KEYCOUNT     5
  • #define            FAN                 P36                          //风扇
  • #define     LED_COM      P27
  • #define         LED1             P35
  • #define         LED2             P34
  • #define         LED3             P32
  • #define         LED4             P31
  • #define         LED1SP             (BS(P3CFG1,2),BC(P3CFG1,3))
  • #define         LED2SP             (BS(P3CFG1,0),BC(P3CFG1,1))
  • #define         LED3SP             (BS(P3CFG0,4),BC(P3CFG0,5))
  • #define         LED4SP             (BS(P3CFG0,2),BC(P3CFG0,3))
  • #define     SET_LED_OUT         LED1SP;LED2SP;LED3SP;LED4SP
  • #define         KEY1             P35
  • #define         KEY2             P32
  • #define         KEY3             P34
  • #define         KEY1MI             (BC(P3CFG1,2),BC(P3CFG1,3),SET(P35,1))
  • #define         KEY2MI             (BC(P3CFG0,4),BC(P3CFG0,5),SET(P32,1))
  • #define         KEY3MI             (BC(P3CFG1,0),BC(P3CFG1,1),SET(P34,1))
  • #define     SET_KEY_IN         KEY1MI;KEY2MI;KEY3MI
  • INT8U  code  EE_Data[4]={0,0,0,0};             //清除EEPROM的空间
  • INT8U  WorkMode,Power_Gear=0;
  • //******************水位检测**************************//
  • #define  CH_INITIAL_DIFF      888
  • #define  WATERThresholdtmp    800                //1300
  • #define  WATERCHECK_SPEED     10                //水位检测的速度,确认次数 ,取值范围30-249        ,若10MS扫描一轮则确认时间为500ms
  • //******************全局变量**************************//
  • INT8U  timer1msCount=0;
  • INT8U  timer10msCnt=0;
  • INT8U  timer100msCnt=0;
  • INT8U  Key1Cnt=0;
  • INT8U  Key2Cnt=0;
  • INT8U  Key3Cnt=0;
  • INT8U  KeyBuf=0;
  • bit  LED1Flag=0;
  • bit  LED2Flag=0;
  • bit  LED3Flag=0;
  • bit  LED4Flag=0;
  • bit  btime100ms=0;
  • bit  btimer10ms=0;                                                    //10ms标志
  • bit  timer1msFlag=0;
  • bit  Timer1sFlag=0;
  • bit  KeyStaus=0;
  • bit  openflag=0;
  • /**************************************************
  • *函数名称:void  StartWork(void)
  • *函数功能:启动模式
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void StartWork(void)
  • {
  •         WDTCR |=0x10;                                        // 清狗
  •         if((Water_flag == 0))
  •         {
  •                 WorkMode =        STOPMODE;                                //无水进入停机模式
  •         }
  • }
  • /**************************************************
  • *函数名称:void  StopWork(void)
  • *函数功能:停机模式
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void  StopWork(void)
  • {
  •         P13=OFF;
  •         ENPWM=0;
  •         LED1Flag=ON;
  •         LED2Flag=ON;
  •         LED3Flag=ON;
  •         LED4Flag=ON;
  •         FAN=OFF;
  •         Power_Gear=0;
  •     SOCAPI_AtomizerSetGear(Power_Gear*4);
  •         if((Water_flag == 1))
  •         {
  •                 WorkMode =        STRATMODE;                                //无水进入停机模式
  •                 LED2Flag=OFF;
  •             LED3Flag=OFF;
  •             LED4Flag=OFF;
  •                 FAN=ON;
  •         }
  • }
  • /**************************************************
  • *函数名称:void KeyScan(void)
  • *函数功能:按键扫描
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void KeyScan(void)
  • {
  •    LED_COM=OFF;
  •    SET_KEY_IN;
  •    if(KEY1==0)
  •    {
  •        if(Key1Cnt<250)Key1Cnt++;
  •            if(Key1Cnt>KEYCOUNT)
  •            {
  •               KeyBuf|=0x01;
  •            }
  •    }
  •    else
  •    {
  •       Key1Cnt=0;
  •           KeyBuf&=(~0x01);
  •    }
  •    if(KEY2==0)
  •    {
  •        if(Key2Cnt<250)Key2Cnt++;
  •            if(Key2Cnt>KEYCOUNT)
  •            {
  •               KeyBuf|=0X02;
  •            }
  •    }
  •    else
  •    {
  •       Key2Cnt=0;
  •           KeyBuf&=(~0x02);
  •    }
  •    if(KEY3==0)
  •    {
  •        if(Key3Cnt<250)Key3Cnt++;
  •            if(Key3Cnt>KEYCOUNT)
  •            {
  •               KeyBuf|=0X04;
  •            }
  •    }
  •    else
  •    {
  •       Key3Cnt=0;
  •           KeyBuf&=(~0x04);
  •    }
  • }
  • /**************************************************
  • *函数名称:void ChangeKeyValue(void)
  • *函数功能:按键处理
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void ChangeKeyValue(void)
  • {
  •    switch(KeyBuf)
  •         {
  •                 case 0x01:
  •                     if(KeyStaus==0)
  •                         {
  •                                 KeyStaus=1;
  •                                 if(openflag==0)
  •                             {
  •                                          if(SOCAPI_GetTrackFreqStaus()==1)                                                   //追频成功标志
  •                                          {
  •                                                  openflag=1;
  •                                                  WorkMode =        STRATMODE;
  •                                                  Power_Gear=1;
  •                                                  SOCAPI_AtomizerSetGear(Power_Gear*4);
  •                                                  FAN=1;
  •                                          }
  •                                 }
  •                                 else
  •                                 {
  •                                    openflag=0;
  •                                    LED2Flag        =0;
  •                                    LED3Flag        =0;
  •                                    LED4Flag        =0;
  •                                    WorkMode =        WAITMODE;
  •                                    FAN=0;
  •                                 }
  •                                 LED1Flag=openflag;
  •                         }
  •                         break;
  •                 case 0x02:
  •                         if(KeyStaus==0)
  •                         {
  •                                 KeyStaus=1;
  •                                 if((openflag==1)&&(Water_flag == 1))                        //开机响应
  •                             {
  •                                   LED2Flag=1;
  •                                   LED3Flag=0;
  •                                   if(Power_Gear==0)Power_Gear=1;
  •                                   Power_Gear--;
  •                                   SOCAPI_AtomizerSetGear(Power_Gear*4);                  //设置档位
  •                             }
  •                         }
  •                         break;
  •                 case 0x04:
  •                         if(KeyStaus==0)
  •                         {
  •                                 KeyStaus=1;
  •                                 if((openflag==1)&&(Water_flag == 1))                        //开机响应
  •                             {
  •                                   LED2Flag=0;
  •                                   LED3Flag=1;
  •                                   if(Power_Gear>=4)Power_Gear=3;
  •                                   Power_Gear++;
  •                                   SOCAPI_AtomizerSetGear(Power_Gear*4);                  //设置档位
  •                             }
  •                         }
  •                         break;
  •                  case 0x06:
  •                         SOCAPI_AtomizerSetPower(7);
  •                         SOCAPI_TrackFreq_Init();
  •                         WorkMode =        TRACKFREQ;
  •                         break;
  •                 default:
  •                         KeyStaus=0;
  •                         break;
  •         }
  • }
  • /**************************************************
  • *函数名称:void LedScan(void)
  • *函数功能:LED扫描
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void LedScan(void)
  • {
  •         SET_LED_OUT;
  •         LED1= ~LED1Flag;
  •         LED2= ~LED2Flag;
  •         LED3= ~LED3Flag;
  •         LED4= ~LED4Flag;
  •         LED_COM=ON;
  • }
  • /**************************************************
  • *函数名称:void Timer1()interrupt 3
  • *函数功能:定时器中断服务函数
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • 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)
  • *函数功能:系统初始化
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void Sys_Init(void)
  • {
  •         RSTCFG = 0x24;                                        //P1.0切换为IO ,LVR复位选择2.45V
  •         WDTCR =0x90;                                                //启动看门狗,262MS复位
  •         //ADC设置
  •         ADCCFG = 0x84;                                    //选择ADD为参考电压VDD,选择P12,P17作ADC输入口.
  •         ADCCR  = 0x87;                                    //打开ADC电源,ADC CLK=Fosc,选通P17通道
  •     //定时器1初始化        ,定时器0给雾化器使用
  •         TMCON = TMCON|0x02;                                        //选择时钟分频,Fosc/4=4Mhz;1/4us
  •         TMOD  = TMOD|0x10;                              //设置工作方式1
  •         TH1   = (65536-4000)/256;               //400*1/4us=1Ms
  •         TL1   = (65536-4000)%256;
  •         TR1=0;                                                            //定时器T1的运行控制位。打开timer1前,先清TRO
  •         ET1=1;                                                            //允许timer1中断
  •         TR1=1;                                                            //允许timer1开始计数
  •         //**************************************************
  •         SOCAPI_Atomizer_Init(1);                            //初始化雾化器,函数内设置了PWM,定时器0
  •         SOCAPI_WaterLevelDetectorInit(CH_INITIAL_DIFF,WATERThresholdtmp,WATERCHECK_SPEED);
  •         //**************************************************
  •         EA=1;                                                                //打开总中断
  •         TouchKeyInit();                                                //触摸按键初始化
  •         #ifdef _sif_debug_
  •         IPSIF=1;
  •         Debug_TouchKeyIICInit(0);          //0:TK参数为程序设置 1:TK参数为Touch Key Tool软件设置
  •         #endif
  •         P3CFG1=(P3CFG1&0Xcf)|0X10;                                                 //P36 ,强推挽,风扇
  •         P2CFG1=(P2CFG1&0X3F)|0X40;                                           //p27 ,强推挽,com
  • }
  • /**************************************************
  • *函数名称:void  ModeChoose(void)
  • *函数功能:模式选择
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void  ModeChoose(void)
  • {
  •         if(SOCAPI_GetTrackFreqStaus()==1)                                                   //追频成功标志
  •         {
  •                 SOCAPI_SetFreq();
  •                 WorkMode =        WAITMODE;                                                                       //进入工作模式
  •                 TouchKeyInit();                                                                           //触摸按键初始化                                                                                           //正常工作指示灯
  •         }
  •         else                                                                                                                   //第一次上电未追频
  •         {
  •                 WorkMode =        STOPMODE;                                                                       //进入停机模式
  •                 Power_Gear=0;
  •         }
  • }
  • /**************************************************
  • *函数名称:void main(void)
  • *函数功能:主函数
  • *入口参数:void
  • *出口参数:void
  • **************************************************/
  • void main()
  • {
  •         P13=OFF;                                             //上电先拉低PWM的输出
  •         Sys_Init();                                                                 //系统初始化
  •         ModeChoose();                                                         //模式选择
  •         while(1)
  •         {
  •                 if(btimer10ms==1)                                    //10ms扫描一轮
  •                 {
  •                         btimer10ms=0;
  •                         WDTCR |=0x10;                                        // 清狗
  •                         if(!((WorkMode==TRACKFREQ)|| (WorkMode==MAXGEAR)))                 //追频过程不处理按键
  •                         {
  •                                 KeyScan();
  •                                 ChangeKeyValue();
  •                         }
  •                         LedScan();
  •                 }
  •                 switch(WorkMode)
  •                 {
  •                         case  TRACKFREQ:                                                         //自动追频模式
  •                                  //**************************************************
  •                                  SOCAPI_TrackFreq();
  •                                  if(TrackFreqFlag==1)//追频完成标志置位
  •                                  {
  •                                         WorkMode= MAXGEAR;
  •                                         ADCCFG = ADCCFG|0x01;                          //选择参考电压2.4VDD,切换到测量电流
  •                         ADCCR  = 0x87;                                         //打开ADC电源,选通P17通道
  •                                         AjustPowerFlag=0;
  •                                  }
  •                                  if(btime100ms==1)
  •                                  {
  •                                          btime100ms=0;
  •                                          LED1Flag= ~LED1Flag;
  •                                          LED2Flag= ~LED2Flag;
  • ……………………
  • …………限于本文篇幅 余下代码请从51黑下载附件…………
    9 n8 n8 R/ Q7 B/ |' ?

6 I$ |, i& `! f. f- \3 |

8 K6 F2 `% n% x( O2 c2 o: X! E0 _  l, F2 E3 y  J) a  `/ ?$ G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-6 09:29 , Processed in 0.187500 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表