|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用stc12c2052ad做的一个检测电压开关源码
: R6 v2 Q, F& ^$ l6 J5 K- [
4 ?) i1 ]6 j" J" X% ~
0 M; @" {9 w5 C# p4 W' r#include "STC12C2052AD.H"5 @4 ]" m7 I6 }& t7 X8 w
#include <intrins.h>
& ^% P* @6 f! `. Z6 p' I#define uchar unsigned char
8 i* p* @2 }: Y! @/ X: R3 k#define uint unsigned int : n+ N, o. ?, w& @# h8 r
#define ADC_POWER 0x80 ) M) O+ k0 w( D( ?0 z5 o
#define ADC_FLAG 0x10 / o/ \* v' p2 E. k1 ^2 Y8 Y
#define ADC_START 0x08 # W7 ?5 |) `7 P v
#define ADC_SPEEDH 0x40
: @- O3 R: S) _" r9 D m#define BAUD 9600$ b$ f: z% X( R8 ~, p+ \
, A. L9 h5 @$ T
sbit RELAY1=P3^4;
$ B! v: {$ }, `5 Nsbit RELAY2=P3^5;
, @. f8 z9 u& n7 S5 _sbit LED=P1^4;
9 X8 u- m; N4 v+ _. u& \) |void delay(uint i)
: K% s" M9 Y$ [) \{
/ M" w) y; z, } uint x;" @! D6 m) k N6 y
while(i--)
k6 B2 Y6 R: l {x=5000;) L4 [3 S. o$ k; x5 F, m3 S
while(x--);
( a6 N! x& H' k}
4 d- h+ g) y- s$ K' ~}
& P% a7 h$ C/ b3 c8 M8 @
$ l# o$ M+ j+ A% q; Q! fvoid InitADC()! H- }6 O, {- C. s9 J, R7 {/ V" |
{. e* z" C# \& h+ x( O) K! p
P1=P1M0=P1M1=0x01; : ^2 f" P3 }0 k
ADC_DATA=0; //清除AD缓存器数据, ?6 {$ ^; F% v! N, T/ u
ADC_CONTR=ADC_POWER|ADC_SPEEDH; //启动A/D电源
6 G j3 \4 x3 X delay(2);9 }/ ~. T; H F$ u' Q& u8 m1 ?: k/ k
}) E$ o, {6 C3 ?' p4 Z# I7 z
! y2 ^3 A9 T. y: Auchar GetADCResult(uchar ch)
7 v& w0 P2 p, T( ]6 C% n9 h9 d6 M{
/ O) T) ?/ W! q/ n4 o4 \ ADC_CONTR=ADC_POWER|ADC_SPEEDH|ADC_START|ch; # [ \% P- o8 p& P. F# X
_nop_();. q6 [" V d! s; a) M1 I# f
_nop_();2 n* p' H& F; i" H" O2 ^
_nop_();9 o A$ ~$ Z& N. U9 U
_nop_();
! ]8 Q2 D7 |8 A. p E0 h while(!(ADC_CONTR&ADC_FLAG));
! ~8 z6 N3 \ \ ADC_CONTR=ADC_CONTR&(~ADC_FLAG); 7 o5 {% F$ C: R6 k
return ADC_DATA;
1 c3 |" }. V" v6 d}# J5 Q$ u* \$ c9 d; z' G
; B: [( }4 y8 a4 y4 c' |
void process()
6 ^' ]: {" [( j }+ x{ ; |& ~$ @8 y; j
uchar adcnumber=0; 4 ], F9 b) A# u
uchar adcnumber_temp=0; # h% R/ d' r& y
uchar n; , O% V1 W% p4 _# O/ D# F# j, X
uchar i=0;
' t* k2 p4 Y* ]; c% u% r4 a TMOD=0x01;
- }5 O: Z- A& G% z0 V& v6 j! z TH0=0x3C; f6 v; w% y8 ^5 r
TL0=0xb0;
, ?0 M* `/ P! S6 g+ z
7 x# }) O+ z C. \; H2 f for (n=0;n<5;n++) //adc convert 5 times
9 l6 `7 x) I; x( t0 x% m: h. {: { { * i* J, f# w( c( Y+ j7 I
adcnumber_temp=GetADCResult(0); // get p10 adc number
# L$ u7 h! }8 g" E8 t+ w. N# S if(adcnumber_temp>adcnumber) // get biggest " r; l/ t9 R$ B7 E. o
{adcnumber=adcnumber_temp; }! s5 _8 m6 g* @: o: b
} . X$ t1 c, w3 K2 T! S9 [
if(adcnumber>152&adcnumber<212)
6 |/ h) e1 F0 s- m0 g9 ~6 h1 w, z { TR0=1;) w2 o6 L$ F9 x
i++;
' A* g4 g* m7 T) \. {; Q* t& i4 E if (i==40)
% x& y, L# q# D& T. n& [{ i=0;
3 s! [+ x# Z; U) M: u* x1 _ RELAY1=0; //powerdown & G. s$ [3 h' C8 o
RELAY2=0;2 t; }! E. Z5 }; U2 v2 D
LED=0; //faguang
) `: Y+ A5 S# b* S/ F) n& [ }
8 j& a, K) C, |: A* K' {' k9 W}6 A5 H3 ]8 C9 x1 G$ @; Y! @/ _
else6 o7 @. a4 W+ L& m
{ TR0=0;
1 O" N! e; y! J& ^! n! }( p) q RELAY1=1; //powerdown
. t3 {' s. n( |/ j2 ^ RELAY2=1;7 }1 N1 q% z* R( v
LED=1;; J. I) U; F( C
}
& b) Z6 A1 I4 a5 S4 m}
6 Z' j, l4 K8 T
3 g+ d0 Y. K5 C! V" ` U
. t7 S. d+ {! v/ f& H- ovoid main()3 g& D) ]; g8 w) Q! r5 Y2 s; a3 I
{ 3 F6 V9 G( }2 i9 N* i
InitADC();' Q4 o. Z x# F( |- ^
' R% X( ^% K9 U+ U9 T
while(1)/ y& T) M4 ` d+ F
{6 w9 J: E q" O3 O& _( a
process();
( o3 ~% \' `( y) X; J x' s}' ?( j5 g, P8 G) C f! M" t1 s7 p* H
9 R& b2 W" k# {+ ~6 N4 e! v
# s- j' `" p$ C) y( g5 U6 V
}
7 ]0 J; H9 T$ I6 s! V. J3 ]7 |1 E& e: p. q; {( o' A# K# E! j
|
|