|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机数字万用表制作 adc0809 带仿真和源码/ D" N! Q1 r5 U$ q
7 J! f5 m' i( v% w1 W, V2 A# t/ i0 r: E. T3 {
. H2 K0 }" b: V( [3 Y6 ]- b希望对朋友有帮助,精度还可以,能满足一般需求,AD芯片用的是便宜的adc0809,如果能用好一点的比如MAX197,精度可以更高!, Q C! m4 @. g- q; Q
: L/ e7 t m! r/ B0 e% V8 {, Q* D
r* o; }2 C& ]4 s) B! i+ T% H/ P7 |1 K9 \; e
单片机数字万用表仿真原理图:
2 f# @- c2 T' b
: c- j/ W2 n9 b6 x& M6 ~& X. R; z4 ^- `* Y% T
) h2 `' ~: `% |, R数字万用表的单片机源码:
1 p( u7 e X* I4 E X" ]#include <AT89X52.H>
; q+ t3 ?1 E3 b) ?0 W& b4 X* qunsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};
4 k& _0 U) Q7 A. n+ A, Zunsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; ! x' i3 R! K9 T4 n
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
; D) O" E1 i7 W* `% Qunsigned char dispcount;
. y2 j+ Z& N! ~9 R5 h; gunsigned char getdata; 9 ?1 \1 M# R1 i# c7 L" f+ L
unsigned int temp; # k4 j+ D( H) L0 i& |
long int i; * B9 v$ |3 N" J; G
unsigned int R1; 0 {) D) s) n1 [( R) `1 S L
) |8 t/ K6 B6 i' ssbit ST=P3^0;
% q& z9 Q* o6 Z2 Zsbit OE=P3^1;
3 L5 |, G0 z2 N" d) Csbit EOC=P3^2; & I' R4 L$ x a- T: s0 [
sbit CLK=P3^3; 9 u( C) _/ ^( u4 X* r
' q J: ]. t9 n
void main(void)
- F5 N7 j4 ^0 |. M& f{
2 p7 C% L) h- K; m ST=0;
) P) a- {* V1 S6 A/ l OE=0;
4 u$ f9 N' c- F ET0=1; 0 I+ M; o. |" S1 ] K7 e$ ]7 O5 Q
ET1=1; / w1 ^2 v, I2 c- d; E: |+ K
EA=1; . s9 ^$ H8 L0 r; b9 ]
TMOD=0x12;
: g6 G2 A) N) A, U3 R/ D TH0=216; - B% J8 z1 F( A' y- s# Z
TL0=216;
) ?* [' x( F9 S- E TH1=(65536-5000)/256; ( l# t& k5 b3 I/ N
TL1=(65536-5000)%256;
" Y6 U0 A3 z7 \& u! J TR1=1;
' q- @$ j+ w) |+ m TR0=1;
& h3 Y5 y, ?, Y- N! R+ b ST=1; ) X3 `; `; g! i4 p9 U% X% A
ST=0; % U! j+ h- H- M* h1 X
while(1) 6 x; S6 `4 C: ^0 h1 P% i8 `4 b4 g
{
, v3 r9 H. _8 R if(EOC==1) : O- E. H, ]5 I
{ - s2 u7 E3 x- A
OE=1;
( o3 k" E7 C9 t% R+ Z/ s( d8 n getdata=P0; ! I* I3 z) k+ L! f) O; _
OE=0; ~& R$ ^: |( x6 ]
i=getdata*196;
0 \6 p3 }3 ~+ n! L% Q dispbuf[5]=i/10000;
' r6 s' V* T K9 p& L& ~+ r: [ i=i%10000; - o4 L, y' K& s. z- K
dispbuf[6]=i/1000;
! ?) Y6 \- G& n' f i=i%1000;
( {; G, v7 x) O3 E8 n dispbuf[7]=i/100;
& Y: _7 K9 ~) F7 e ST=1; 2 E+ n- v1 q; }5 ~: }$ V
ST=0;
: h N Q6 e! V5 P4 {; U }
9 k8 n% F/ [- v5 ? } / G% {, r7 V4 c9 _" { {# G; Y4 q& L
} 6 ]2 ]) `% T( I2 U& i1 _( b O
4 P7 B5 o1 a% W. F
void t0(void) interrupt 1 using 0 //定时器0 中断服务) q7 i, P, w) x1 i5 A
{ 9 r+ F- R4 l1 `. |
CLK=~CLK;
* M( W! x% Q* S}
" z% O+ N6 O$ d s! J! b5 f3 R2 ]& I
void t1(void) interrupt 3 using 0 //定时器1 中断服务- U' r# Y# d% A% n( r3 \
{
0 Q6 L, r+ Y1 E TH1=(65536-6000)/256; 1 w& i1 h) }# d
TL1=(65536-6000)%256; ! q& L& r; \& i0 n6 b/ D4 N Q
P2=0xff;; I3 q( v6 I1 Q% X) ]1 P
P1=dispcode[dispbuf[dispcount]]; + [" z* F& M7 o1 a. Q
P2=dispbitcode[dispcount]; 3 x1 w( R) P% ?" ?2 f) \
if(dispcount==5)
$ n% B( c- R8 l, {0 z; n+ Z { ( M4 Z8 r2 M) m* M
P1=P1 | 0x80;
; L$ k/ l7 z) ?% r/ m( Z6 A$ w } 8 I& A& H$ @- D1 a/ n
dispcount++; 1 E1 ]$ c, M4 |5 {. b- Q
if(dispcount==8)
5 O( F( X! b5 V r+ _7 H {
$ ]- j4 s' U9 l6 c, T dispcount=0;
/ x$ S, E0 |9 p3 O6 S5 H2 i. Y l% k }
7 A! x9 L3 G' x) J5 C: ?$ n. s} r. W+ q" E2 X* S
) O4 f$ X+ m( }" w8 o
3 L8 \+ I: W2 \7 I
& f3 q" j5 i+ P- R7 y. O
下载:
P/ h6 a8 |2 [5 z9 T8 T6 S* l% I( ]3 {& C" F3 I# l
( s. y+ n" X7 |% }* T e, k
|
|