|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用stc12c2052ad做的一个检测电压开关源码
; G; x# O V* t: w' t( Q& R/ a5 y5 F- I- _0 d9 Z
: k/ K7 U& x1 I/ a6 ?. H* T- H#include "STC12C2052AD.H"3 f5 R0 \9 B% D q. _3 |: K, v3 c: O5 T
#include <intrins.h>
! I8 z2 f) f2 _( ]4 @#define uchar unsigned char & v& M7 T. v9 @9 P1 Z1 A
#define uint unsigned int ! R( c* a# b* J
#define ADC_POWER 0x80
( O- }3 T) v9 T* y% w#define ADC_FLAG 0x10 6 z# k j( S- z% L# `- a4 D
#define ADC_START 0x08 9 m# v& S' }8 D* e
#define ADC_SPEEDH 0x40 : \+ G6 T- s1 L% F4 L- {& {3 \
#define BAUD 9600; b& V2 e( l' ^& Z/ c+ f
5 y O0 I. t7 N& x/ I& o; X5 ?# gsbit RELAY1=P3^4;
\' G, S2 @( N4 R9 u$ tsbit RELAY2=P3^5;
& Z0 @* O5 L: ~3 t6 {sbit LED=P1^4;
4 y. ^/ A$ w' _) Lvoid delay(uint i)1 N' ?2 i" K$ n a
{
7 U/ ]" S: x( S uint x;
: R" ?: f5 A# I while(i--)
# y% t2 L/ j7 P0 v/ \: Z" x$ H {x=5000;
7 ?# C( ]7 d. X5 L( B5 D& rwhile(x--);, Q/ }: n0 j8 F' _! _
}: P0 X1 H/ ^) o$ R! x
}
5 o6 c2 D6 f+ S4 e4 \! f9 y3 O) ~( s3 j, a( l. _4 R
void InitADC()
+ T: d8 G' i9 s{
" \/ V+ a: }- r U- ]$ H P1=P1M0=P1M1=0x01;
0 I4 Z6 |: N" W1 M u) t: o+ h ADC_DATA=0; //清除AD缓存器数据
5 M, @( q3 w- R1 `$ _6 C ADC_CONTR=ADC_POWER|ADC_SPEEDH; //启动A/D电源# L9 P: j# O2 R/ \5 d
delay(2);
, @% h; @" e, c& g! R" n}( d: [* z7 j, ^) A3 x% E
, N' ~5 B8 \1 L! Vuchar GetADCResult(uchar ch) + b- h) O- v4 J. |+ c5 E
{
- @' {( \ i2 i4 B& c ADC_CONTR=ADC_POWER|ADC_SPEEDH|ADC_START|ch; 8 W: {* S, ^* P- o6 A; ?' b
_nop_();- A- ]0 `0 ~8 Y9 C" S* Q7 F' s
_nop_();
2 ?, `2 d7 p+ j) I* I& R _nop_();
( O' F. {8 U; } _nop_();
: `, r3 d# R5 P. k# I J while(!(ADC_CONTR&ADC_FLAG));
0 G: w9 X/ F, V ADC_CONTR=ADC_CONTR&(~ADC_FLAG);
0 s' V9 W; s2 b- [3 m, U" R1 f$ W4 a return ADC_DATA; T f+ z6 _9 R6 H* V7 x; N$ m
}
; U) h* m, p" h. E! U0 q. V
, n/ o% I. m) q6 p# g$ tvoid process()
) @+ g; R& ?" m4 v. r4 U{ 7 n. w# ? e4 C& r0 ?% r
uchar adcnumber=0;
! ~+ u( F+ }& e# e uchar adcnumber_temp=0; i h2 i2 F m7 E( z% P7 v
uchar n;
2 O- }7 _$ U6 J0 D5 c" d uchar i=0;: c" n* R8 f0 b6 a
TMOD=0x01;# o c! c# r2 R
TH0=0x3C;
6 ^$ B2 O) ?4 T' v+ f TL0=0xb0;
1 U8 C# e( ~4 z: A, H3 R
* z9 I C1 C' Q2 A f" c for (n=0;n<5;n++) //adc convert 5 times ' d( |' e3 m) n, I; _7 Y
{ 2 ^" }: s7 ~' H7 P
adcnumber_temp=GetADCResult(0); // get p10 adc number
9 L; G" `3 a$ C; h if(adcnumber_temp>adcnumber) // get biggest ( r. |1 _4 C5 x
{adcnumber=adcnumber_temp; }5 y; X6 ~! `% L) F/ K0 V3 @1 G
} 5 i8 v7 h! E; d1 z& e
if(adcnumber>152&adcnumber<212) 2 A7 C; _ m% s; O2 f: U
{ TR0=1;
3 V7 Z4 h& Y6 \6 b$ v& E i++; / R7 d6 E8 Y! p
if (i==40)1 D8 ]4 `+ I7 u# g7 k, |
{ i=0;
' f8 d: [# B: o& D0 t9 P4 M8 r RELAY1=0; //powerdown ; \' w6 `8 T4 O2 r
RELAY2=0;. u; k% E- `+ h+ c9 k- ^
LED=0; //faguang) d5 Q1 E/ t' E% d
}
6 s6 d1 n& |' G4 r! `5 M" U}
* {7 I# z* L4 T: J else9 K. k2 e6 M. ]3 ]+ t8 M
{ TR0=0;
! g2 Z' O: U3 L: ?4 o( w Z RELAY1=1; //powerdown
$ C7 f* q9 w+ o" {) Z. e1 S RELAY2=1;% O, }, \/ ]( b, s
LED=1;
! D' i8 J) C2 {}
7 x* J3 f" `6 @* x/ j0 a}9 s. G8 b4 R) E
4 P0 B' o, O7 {( D" y+ E% h+ H) V5 f5 O) p9 G+ I2 g/ {+ ]
void main()# t% u# R+ J0 F; x2 h& e4 s D
{ # V. s$ g% Z3 I1 |( ~: w5 u9 b
InitADC();
$ |# {8 t2 j2 P; h& o" @0 `
' c/ u) ]8 o" O9 ^9 k+ X. v4 V2 gwhile(1)
1 t( s B7 T; z8 C( L! s{
4 x6 k$ H# F: r1 f4 d( ]process();& f4 j: p. e4 S
}, R$ `( k% j& q" w3 o
; Y! s% R; K* C& E% N( k" Z! V$ A1 U
$ t, e3 L; b R) Z( x
}' I$ g. |9 o3 n* U
+ ^! V. a, e0 U p |
|