|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用stc12c2052ad做的一个检测电压开关源码
" D- l; t2 t4 ]) C
2 S8 w; H" G5 ]! ]5 _
* e: ~% z. i I. }#include "STC12C2052AD.H"
1 M) U: m0 }8 v. I _#include <intrins.h>
, o6 |3 U* c" v#define uchar unsigned char
1 f2 a5 C" J- D#define uint unsigned int 8 Y) J9 A5 Q. w5 C- G& P
#define ADC_POWER 0x80 : A) ~4 m& E l2 F0 {- Z/ `0 \1 a K
#define ADC_FLAG 0x10 * o5 R7 c/ y' _. Q" B
#define ADC_START 0x08 0 q5 S: c. i3 @+ A# L
#define ADC_SPEEDH 0x40 3 r& Z2 V) W$ h
#define BAUD 9600
, f$ k' ]6 ^9 ~) \3 J( D& N7 j( u- a# x& O- i4 C7 J# b' b F( H' L
sbit RELAY1=P3^4;
. t0 C. H$ U: o4 @sbit RELAY2=P3^5;/ A T5 \8 u$ d( ]0 m$ v
sbit LED=P1^4;' e" ^) s- r- p5 ]
void delay(uint i)
# I) T+ z; _! [: a" s [' I. M6 b$ V{
# y5 p2 Z% b8 i2 { I uint x;% P3 i' E/ ^( E* S
while(i--)" e# _: B, [0 \! u$ r9 u% f" z
{x=5000;
9 n9 \' \# i/ t }0 awhile(x--);; u0 }6 O0 R" \& a, d# w
}
. o3 l9 W/ z. S; x; W+ k4 I}8 x4 {6 I% d% c
" g) w# U& o/ R
void InitADC()
7 S2 w* m5 R# y3 a3 k* M% H{
* u Y% x3 H+ U( N" [/ ^+ J P1=P1M0=P1M1=0x01;
3 r- L1 y* ~ z6 E; z) s1 I ADC_DATA=0; //清除AD缓存器数据
K3 ~ u- ]% [& O7 x0 U: t$ w ADC_CONTR=ADC_POWER|ADC_SPEEDH; //启动A/D电源
, t5 n% ]' t) q( t7 K delay(2);1 m: E" L9 l0 |& {
}
1 k3 g4 N' ?/ |* C6 z; }$ c4 @' i6 h! Y3 x6 m! m
uchar GetADCResult(uchar ch) 4 q* r2 l( v* @9 M
{
2 ]. l2 Z: F# O( W ADC_CONTR=ADC_POWER|ADC_SPEEDH|ADC_START|ch;
/ ?" ~3 F* g1 B* b _nop_();* f1 Q. D) V, i
_nop_();
0 h" M1 B- Q q; T+ @9 _0 m6 A _nop_();4 L' I: z; O: U7 j* N
_nop_();
/ e: D( T0 a! @+ V; B& R while(!(ADC_CONTR&ADC_FLAG));$ G! W+ a/ b( e
ADC_CONTR=ADC_CONTR&(~ADC_FLAG);
$ k4 c8 L7 ]" E* i9 N$ R5 e return ADC_DATA; 1 ^$ a7 E5 `( {* O2 u0 n
}, i' c9 }0 H2 p+ b( ^
, N8 ^: _# P1 W$ ]
void process() M0 V5 F! _5 O! H: Z% J
{ ( F" W3 ]' B$ V- U
uchar adcnumber=0; - @* ^8 R9 t V% ]
uchar adcnumber_temp=0; ; _7 E1 [# F" i+ E W
uchar n; . P; G2 X5 q/ d4 N) @3 m
uchar i=0;
2 h6 s! _& i6 j5 m0 F TMOD=0x01;
?8 P: b3 [/ M1 S! h r B TH0=0x3C;
; b. `" [# _, g TL0=0xb0;
* C, x, z; m( ^ [, u. o( W: u6 ?& S9 x/ _. w
for (n=0;n<5;n++) //adc convert 5 times
' F5 p, j$ D( ~5 U { ' f. G% N \' g$ g$ Y, z8 q, Y
adcnumber_temp=GetADCResult(0); // get p10 adc number
& R, d9 S) ~9 ]! ^# l+ _0 B. I( \% e if(adcnumber_temp>adcnumber) // get biggest + ^1 |' o! J5 A
{adcnumber=adcnumber_temp; }, o0 U) H3 k+ K* {
}
* B8 Q- x) m+ h4 O4 X if(adcnumber>152&adcnumber<212) ) p2 D6 v+ k+ h' O4 _6 G2 m# f$ d; n
{ TR0=1;
& r) {! o* p9 t i++;
, F% S4 S8 V% @2 U2 T if (i==40)% R) r) S. r! Y" s j8 H0 g
{ i=0;: S& _) J& a- A0 P, u2 N
RELAY1=0; //powerdown
: _. z" o7 n) N1 K% b0 }# u$ D R RELAY2=0;5 Q; U9 ]& c2 {5 R
LED=0; //faguang
: d' _& B3 {& J! u }5 r1 _% W* f# d% ^3 M/ _
}; v1 y1 Y6 @6 D5 g) ]0 \/ Y
else
& n" O0 P7 u; B9 p5 V z { TR0=0;/ p U& {4 J0 _2 B
RELAY1=1; //powerdown
( n! h% L7 g3 D: g' o, s RELAY2=1;5 I$ K" u# L6 d: g& D
LED=1;# F) e( ^" q* T6 Y; _* g$ p V2 ^
}& @6 U( b" k9 c' I3 @
}
. m( C7 B. s- a. f
7 P) e, X) q/ G
& E( y5 Q- Z* N- O" u1 Y: Cvoid main()3 p) D/ S% V# I: `
{
9 }9 a8 |( |4 O0 l7 R InitADC();
4 r q9 }) F( Q# m
$ F% v) V v( q2 _while(1)" M/ } z# ~: r% _* D7 ]7 T
{
) T7 i3 N0 U- `& vprocess();0 u7 o6 d" @3 N# E. h' \
}; x3 b, [! k& W% c$ E
& \; g' @7 _: I2 C$ D7 U2 `
2 b' s2 w6 a8 a2 l( U- ~' E1 N% N; O
}5 r8 o4 o1 e6 T! h. z2 o
! N5 t7 X/ G, L6 o) t) @
|
|