|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机数字万用表制作 adc0809 带仿真和源码
. N$ @$ x7 W% h/ x" g3 t; U6 ^9 v; t1 r$ j
8 Y9 k0 d3 D( ~! q( m/ o% a
+ Q5 R6 j/ z. m0 P0 N希望对朋友有帮助,精度还可以,能满足一般需求,AD芯片用的是便宜的adc0809,如果能用好一点的比如MAX197,精度可以更高!6 @# W- J$ a& @% i+ x: f
7 o$ M8 t* S1 X( P% l
) K8 D! d/ i& g: B* G$ G4 Q. ?$ R) O3 Y1 w
单片机数字万用表仿真原理图:
2 Z# l' W4 A$ P$ a4 G! l5 y
- C8 s* G$ {' P) H& ~3 f+ q7 g% l( p& b" m
( u3 x9 { f1 W* @' N数字万用表的单片机源码:$ d' T; _4 h! E9 t: E1 g5 x0 h* y, B5 c
#include <AT89X52.H> 1 X; R) Q; o) ~- q7 _
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};
4 [! \7 u) S+ e9 h- Eunsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00};
: W: a' l. k: z2 _6 vunsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
. O9 W6 k4 v0 i3 {" [2 h1 J3 nunsigned char dispcount;
$ y/ c8 y- q6 \; X) kunsigned char getdata;
O$ X1 K }& b! Munsigned int temp; & h4 r! P4 ~6 T% F6 I
long int i; 9 n* H* S: g6 Y) Z: `3 C a6 ]
unsigned int R1;
: o. i( m8 Z! L& q) ^2 z& }( s) Y1 [
sbit ST=P3^0; 8 a' i4 P$ {" \6 Q7 O/ B4 z
sbit OE=P3^1;
. E( p% q) I9 L" W# V0 U5 qsbit EOC=P3^2; / k; u- }8 R% M7 S
sbit CLK=P3^3;
+ h- E! } }) ^! {. f
5 I+ _9 t8 l' |7 Dvoid main(void)
. _5 D5 \# p7 F# C7 k{ 4 @. e! g8 D- W, K- v! c
ST=0; # O' h! r+ R( Q
OE=0; , F" ~, L8 w' `1 V
ET0=1;
5 ]+ x6 U& k7 ^, V1 p) K; x ET1=1;
7 P6 `' h1 e0 w4 f" C7 f) h' B2 w EA=1; . S' ? q: f7 X3 ^6 I8 t# W
TMOD=0x12;
( h) P( K& b3 [/ l( T% p TH0=216;
+ n# A0 W; n, _3 |& g& h5 ?8 S$ C5 v TL0=216;
& U3 Z& ]1 Y1 v4 n TH1=(65536-5000)/256; 8 u+ \7 b' B* k3 A9 v% k5 V
TL1=(65536-5000)%256; ; v: P( l' d3 j. A" u) P/ f
TR1=1;
& r' S, ?! W% H2 \: N2 D- {, F TR0=1; & n) h) ]2 v9 M6 |: G/ s6 x) B
ST=1;
" |6 N1 [) _" Y3 n: w8 K ST=0;
7 ? M& D$ ?% i" b while(1)
4 P" L" G" {) p# `1 [* Y1 E$ k$ ? {
/ o9 Y h% z* m9 W+ p, h if(EOC==1) 7 Q( @1 p5 B! `! l U- \( n
{ . a. |' U9 V9 V" l" r
OE=1;
" R. g1 S; [$ x4 p3 V' s getdata=P0; & [2 n/ }" K8 `% l) s' e! o C
OE=0;
. r, M: _7 F8 I8 W: I6 _1 o i=getdata*196;
. \' ?$ S2 B& e* m# ~, {# R dispbuf[5]=i/10000; ; {, G2 ` ]- q( ]
i=i%10000; 3 O& Q* E, F" ^& M9 d
dispbuf[6]=i/1000;
5 O% X% l# b9 C+ ^ i=i%1000;
4 h5 T! t+ w( K1 U( e1 s+ ^5 w dispbuf[7]=i/100;
) e; g" T5 d% X ST=1;
* L q( J" r; ]; e( V8 S ST=0;
6 r8 ~5 Z' i2 o( q p9 `( D5 X }
6 F# c8 s5 |0 b5 [ z" P }
6 z$ I2 ^: G- L! E: H1 F2 J} 2 ?! N3 c, Z8 R
! M7 M0 S$ j; X2 f8 F0 Q+ \6 |/ _void t0(void) interrupt 1 using 0 //定时器0 中断服务
8 h G z7 g3 I+ a2 S: d* T{ 7 `5 j% {% L# q, `8 R. p V
CLK=~CLK; ! e% _' r7 v6 r+ W9 X2 ?5 s Z
}
3 N9 a0 {8 R0 F; _ + m, C j* E, t. [2 ]: N0 T9 R
void t1(void) interrupt 3 using 0 //定时器1 中断服务
, @' G. Y' c# @5 i) |* E1 ~/ @* E{ & u5 n5 I! w. w4 Z7 j7 I
TH1=(65536-6000)/256;
# t3 @$ }+ g- S TL1=(65536-6000)%256; L8 X8 q1 k& I4 l+ E! D( m
P2=0xff;
. K' _5 o" G5 J& \ P1=dispcode[dispbuf[dispcount]];
6 Y) L& k0 D9 U: x+ {% s P2=dispbitcode[dispcount];
$ N* |6 [* h. R7 b e* k+ V8 o7 D3 k3 `" V if(dispcount==5)
6 y3 ^8 s2 C) W; F' e7 @ { 0 g. H4 E! B1 P
P1=P1 | 0x80;
+ ]( q' v4 R! V8 Z }
/ E3 Q: J& P* N3 V) f0 O/ @ dispcount++;
4 H3 ^2 u* H8 i J4 u3 d if(dispcount==8) " b/ U$ k0 R# y; i* L+ b/ D: K: Y
{ ( W* w7 X, N* I! Q3 D
dispcount=0;
% N1 M* o B$ x3 y. _) y. R } 6 W: {* }1 Y2 i/ |' \3 P+ s1 u
}
9 ?6 }# |9 M" ]; _$ r
5 }' H' f$ `6 U- T, `. G! |
6 X7 ^; c% E2 L0 `9 X E; h+ C
3 i* e6 o, F7 m) q T, t3 N下载:& i6 k2 l6 a5 W9 U- l* [
, U. D9 j( ]0 Q& N2 W
* x8 d+ C% \' h' D5 }
|
|