|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机控制ADC0804检测运放TL084的电压仿真+ b; m" m# Z3 s& E
% \2 y' @# ?6 Q! i( A8 @2 T
/ c& t% x, Q! R' H2 Q7 L9 g# B
下面这个是整体单片机系统的原理图:; u- b+ H3 [( }
$ J% p& y0 }) W" p% N
% ]: r) s; U) G6 m/ e: a4 d. K
adc0804检测电压部分原理图:
7 q6 k$ S) u' I1 D/ E$ } $ g' R! m2 x# q; ~6 \
( O" Q$ C! o" m! Q7 `5 ~* x" x运放TL084产生电压部分的仿真:
$ |+ k9 x8 B1 e" F& W& G # J' l% K; X* Y& B+ D$ x' @
. h2 o$ ~8 N8 W) P# d4 ]% x7 {: k, A
单片机汇编语言程序:
8 R+ j8 J" o3 O8 ]2 `4 VORG 00H
1 @2 `3 n! g B# h1 [ANL P1,#0F0H; e$ O$ _4 D% e4 A
START: MOVX @R0,A
" V% f; v7 U4 V) `$ E' m# `
0 t! R) W1 T, x# M: y6 R$ H0 x
$ w8 y- K) q( l2 Q) l4 LWAIT: JB P2.0,ADC
1 A* H; d7 C, f; f& |4 H% j$ h CALL DISP
- g4 g6 W& s8 ?, H6 ?8 U JMP WAIT
3 ]3 ]# c$ _; v0 V6 A' A0 |2 ^. J. M
3 l% i9 [' y1 B2 R8 _( l
ADC: MOVX A,@R0+ Y+ h% h; f" J5 ^8 W
CALL L1# ~" O' H V* |- z; z. ^
MOV R1,#0FFH$ v0 Q% A( h( v* O
. I2 I. _1 c3 h# t% W7 p. n/ q
7 c. e1 `0 ^/ W$ D$ ^" p' XDISP1: CALL DISP7 J* o5 K9 i9 y& _6 g% j& X9 Y
DJNZ R1,DISP1: n# _1 x1 f: k; d" C b& t6 A
JMP START
1 Q! I4 z0 [7 m8 O8 q
- h. g0 b% c1 O. f, n2 a+ I* y1 _! F1 g- C7 x3 i9 j% W
L1: CLR C* N9 |. p) D( W2 }8 _6 b d
MOV R5,#00H
& [8 J) H4 v8 J2 ?7 k$ P* I MOV R4,#00H
9 `# O: `: W+ J MOV R3,#08H
, K' i$ g# V7 X1 T0 x& p3 s/ Z9 o2 Y5 c- l
/ l4 Q$ @, \3 J( K1 \+ A+ Z4 ]
NEXT: RLC A
" p1 F6 |! r3 f6 K MOV R2,A; p2 M( q9 ]7 t! e4 E5 E4 B3 T
MOV A,R5! b8 z) z4 B3 _! L5 I, r
ADDC A,R5
4 s. D7 [$ R) b/ r& w; A/ X DA A! h% q( N& [& H" y8 u2 e) E7 z" y+ ]
MOV R5,A8 W+ E- F% b% b; J6 }3 T7 i0 h
MOV A,R4" X4 E! t: a1 B) v1 N. A( a
ADDC A,R4
4 b( G& s/ }5 m# y9 ^! \ MOV R4,A" `( @; w' h& o& k! W
MOV A,R23 }$ f7 U. \4 l7 G" L: y! m) P
DJNZ R3,NEXT2 ~% P2 i+ z4 U1 h2 Z' m) Y
MOV R7,#02
- c" n* o- y! q0 K
) ~, F2 K! G" R8 ]
3 |4 ?: [4 ?- M: t2 q# K. qL2: MOV A,R5
8 I H" u3 ^9 } ADD A,R5
1 T$ B7 U) Y: ` DA A
% i: S: E3 q# W3 Y4 X5 _9 j* u MOV R5,A2 ]; t( Q$ O, R: d
MOV A,R4
# p3 K; Q# h6 v9 s3 m DA A
1 i* `8 G7 B. q6 G4 \ MOV R4,A3 v1 p: N3 S$ w7 c4 L
DJNZ R7,L2
" K/ ^1 p/ V5 N$ W2 {; m RET, b0 p; R" \8 T' Q
l# d# o8 `- Q8 {! ]8 O: J
- e# w2 u% R4 h0 E" K1 x
DISP: MOV A,R5
$ t9 v s$ v/ E! f1 b/ l9 ` ANL A,#0FH0 m/ L8 o) `% g: }! a
ORL A,#10H) ^* v$ i. J. n% J7 s
MOV P1,A+ K- u: y4 S2 `1 s# v2 m1 g
CALL DELAY
7 {1 g" r$ j3 _# H2 i3 P MOV A,R5
1 {0 Q( |8 _; w% J0 H( {* S ANL A,#0F0H
$ q6 e& c3 z$ ] SWAP A0 S7 J' t7 M- s* C v; ?) h; ?
ORL A,#20H* ~5 E; D" P! [
MOV P1,A5 l! e! ?, e, N; g+ t
CALL DELAY
+ |1 u$ Q$ j6 f$ h! A: b MOV A,R4" n1 {& v2 }& s; X- O
ANL A,#0FH D, A3 G. a1 ?1 S w/ P6 S
ORL A,#40H" e$ i2 j$ u6 l! ?- R# Z& b
MOV P1,A$ c% P8 B2 F2 h) j8 V; H
CALL DELAY
) h! m4 @" d/ I2 P8 u MOV A,R4% a$ K1 v. j$ O$ S" p- x
ANL A,#0F0H
& H) p" g! i+ C3 _ Y SWAP A
4 Z# o2 l; b, Q. \1 L: Q3 t ORL A,#80H z, p E; _% ]4 N1 }. I) s
MOV P1,A
& T* T: s) M, Q l, K8 j CALL DELAY3 @( b8 {+ Q8 Z8 P
CLR A
7 \: t" j9 t; |' k! a( J" k RET' T% Z- f0 x8 S: m
W% Q- o2 D' ^, I1 {: x
1 X$ I5 S8 t! ]( r& gDELAY: MOV R6,#10
0 Z! i; _! m- e( G3 z5 f
7 M& s, G& P; T2 | l( T* F2 p$ P7 B+ a( N
D1: MOV R7,#248
; d( B9 r' ^' x" H0 S% k8 Z- t DJNZ R7,$
$ a- P6 H7 f( D6 x! j p1 T DJNZ R6,D13 g* `* X& ?0 r7 x" F
RET6 k) f z* G, S6 x% k, V2 A. L
END- T: ?! \1 v3 z5 V+ K
, x: p2 Y- X$ D7 a# q. F2 R0 G6 K4 P; o
6 Q/ d& i/ d' z/ x
* c+ A* ]: X2 h' u, d) Gc语言程序:6 B! D2 w' ^" _; c; b, n4 B1 e
#include"at89X52.h"( [; [- l$ D5 p5 V
sbit LCD_RS =P2^0;
9 m* s: J% { r# M. M& Osbit LCD_RW =P2^1;! R: q: ?# y0 {( F
sbit LCD_E =P2^2;% H: _' P8 t; R0 G
sbit ADC_CS =P2^3;
8 v; }4 s4 k# W8 q/ z! hsbit ADC_WR =P3^6;7 |, y O3 d0 K6 s4 H* O$ I- K. N
sbit ADC_RD =P3^7;
- l0 N& V6 G: A5 I7 ^8 j#define LCD_DATA P0
@) p9 P4 W3 m N2 R# kunsigned char LcdBuf1[10]="";
5 w0 x% w$ E+ ~2 u2 u4 p" E# O- m! c+ b! K0 j" r$ A
unsigned char code Bmp001[][8]=' v4 a1 f! _" L6 @
{- Q! w6 K2 o( H( k! C7 g% _
{0x06,0x09,0x09,0x06,0x00,0x00,0x00,0x00},) `4 E& x4 P1 ], W' i
{0x06,0x09,0x10,0x10,0x10,0x09,0x06,0x00}
. v% a& _9 J9 k- M3 B9 `};3 }7 k! d" r4 t# G/ ?' _* }
1 K$ h& B5 u& D2 M8 F3 _5 h7 `1 v
void dellay(unsigned int h)
* S' A& C; p0 [{
* n `0 n, I" p while(h--); //0.01MS/ }; Y. w5 t/ Q! s. q/ v) n% y
}
) P+ h$ [* H* N- {" a8 T0 i: {2 ~# W4 }
void WriteDataLcd(unsigned char wdata)
) E; r( b( h8 ]{
; L( O2 Z: ]1 A3 i5 @7 O9 A$ O& p LCD_DATA=wdata;
' M3 I$ Z. G9 u- F# f: n7 z LCD_RS=1;$ h& P: G2 [) d8 P
LCD_RW=0;
$ b+ {( T/ G& j2 A1 X3 |0 V LCD_E=0;! C% ~# x: R7 i7 R0 b3 V8 R
dellay(1000);3 q2 @' \+ t1 r
LCD_E=1;) ?& F, I( e6 \
9 S$ d' r& y1 b) ?
}! ]( y0 G$ e* `8 ?5 Y O
t* o. V& p+ ~" W A
void WriteCommandLcd(unsigned char wdata)
6 z4 d6 H) a% a- j7 V{, Z2 T; v3 @2 x" a& ?. o
LCD_DATA=wdata;$ P- g) Y! U% c; q! i0 d7 V
LCD_RS=0;
& ]/ Q- L" j$ J3 | LCD_RW=0;- [- }3 D* s* D" u2 D7 Z2 o2 c
LCD_E=0;1 X9 f; z3 F; T9 P5 F- d# H( U
dellay(1000);2 g* B) b& D2 N) z* u4 E
LCD_E=1;
: x5 s5 `; x6 G* n$ [" `}
; c* c) S; n6 V9 \4 a, @ {9 Y+ Q% e# S
void lcd_init(void)
- y0 O+ p9 u9 `) d, E{
9 d% d+ j- S1 Q' f# b' ` LCD_DATA=0;
$ v! s" i1 @" B( c8 a. N% _! @0 m WriteCommandLcd(0x38);
- @. J+ ~& g4 S7 N4 v! k8 p" v dellay(1000);
" T2 b' C, d) F& x+ U. E7 n/ z WriteCommandLcd(0x38);5 ?, t, H/ f( E, W9 g9 s
dellay(1000);; b/ {; Y5 d+ P- w. X
WriteCommandLcd(0x01);2 C j4 F. p0 m1 {+ [
WriteCommandLcd(0x0c);1 S- ~- N* L$ w5 C
( A! W1 d8 A0 ?7 L+ s6 r
}
" e0 @! ^+ F% Z, N, @: T, Y4 A9 B4 p/ a4 H3 x
void display_xy(unsigned char x,unsigned char y)
: T X/ I3 e* H+ d{
$ } u# {% |. z3 c if(y==1)
# u4 c( z4 L$ P! C! R8 @ x+=0x40;
6 g# ?) y2 f: m& Q5 j7 i5 A x+=0x80;- | @- D6 L$ _6 e
WriteCommandLcd(x);
( f+ _! P6 N- o: C9 s' Y1 b. J i}
* t( H8 X0 k) G% M E. x2 K, J! z( n' ?" v8 }. _
void display_string(unsigned char x,unsigned char y,unsigned char *s)
* b( O& U/ _5 q9 B: i9 O{
: h* n, T! c) [" @) g( W! a display_xy(x,y);
3 r/ l+ ?+ B0 m6 a& y7 K while(*s)5 g8 g4 T" c4 L& P6 c8 `- _
{3 x) f$ b* N1 i1 \- T' T* d" Z9 `
WriteDataLcd(*s);
2 l2 C) W7 Z- z, R s++;
( K+ |. J( w- m3 Z9 _8 b! }/ ]9 c/ ~, ]2 X* h- j7 Z2 q
}# r* W7 h: p0 v) B' ^1 F5 M
$ G3 ?4 q+ t2 I4 l
}4 T u( y/ E0 h9 c" {% K& W
e1 L6 T ^& B5 R+ Lvoid Write_CGRAM(unsigned char add,unsigned char *char_num)! ]2 f. L0 {0 Z# N" Y/ b# x; I( v
{
2 Z7 K. V( }+ R! \ unsigned i;1 s8 w( G* _: t; o% g. `" `2 f% A
add=add<<3;9 j& Q5 y5 @8 l2 ^0 A0 Z/ ]
WriteCommandLcd(0x40|add+8);4 t8 u2 z- v' R6 J# B
for(i=0;i<8;i++)4 I' g/ A6 A* {) f s
{6 }8 d4 [: C1 g0 v' G
WriteDataLcd(*char_num++);
3 v3 q+ T p) C& B& W6 H8 Y9 i- X9 k+ B) H, k
}7 b& ?3 v y( y- q+ X A( O
9 C+ A' B9 g' M7 E# X+ l
}
0 c0 w8 O( C2 i% D$ w S; h/ N! |2 j" O7 i
void delayms()0 e1 L( c6 {1 U0 u; y' j7 @
{! V! }6 ^7 A0 e- b6 @: D
int i;
6 M' p! i4 X# ?& b, N! Z4 F, p$ E for(i=110;i>0;i--);
9 ?9 {! e8 `) U; O4 `( ~8 q3 O* k0 x: P* D# R
}9 I' }% d$ t0 x A& e/ j7 I' @
void delay1s(): n2 n \% M7 T0 M0 I
{
5 k/ s* K8 u% l7 s4 | int i,j;' B3 V4 T9 L1 `! u, S. V
for(i=1000;i>0;i--);+ s6 F6 }8 Q* ?& |/ ^3 N
for(j=110;j>0;j--);
) [; T5 ^" G3 A! W5 w/ {7 `}* J0 q0 a T# v& f; j. t3 R2 s
4 ^, W7 ]/ z* m! Rvoid convert()+ B6 W; a: P5 I% w$ C
{7 W8 X( p j& @8 F; O
unsigned long value;
2 m7 m/ J8 n8 K c7 W7 Y char i;6 n; w4 m& ~, @/ o" H% q h* ^3 {
unsigned long res;
( j5 }# w8 p$ Y! { int temp,temp2;
% k% T% \3 R& ^! S: v int w;
_1 n% A" Y% g P1=0xff;. w o/ }7 L- J3 z
ADC_RD=0;4 U7 ~3 W& j$ e2 e& \5 {* B2 x6 {
for(i=0;i<10;i++);4 ], {! K% A0 v) d
value=P1;
+ ^" D7 N. K+ |) H8 k' Q' u8 Y res=(float)(2550000+110000*value/30)/(2550-11*value/30);
. D0 C) U: z' u, k K, _& q% N) r temp=(float)(res*10000-10000000)/3851-545;
1 Z: K4 B6 G4 N; k temp2 = temp;* E$ {4 Y" S, w w
if(temp >= 0)1 Q! w/ @9 Z. p5 }- `6 o6 U
{
+ n+ a$ n7 r' h) q for(i=6;temp>0;i--)8 k' m Q8 G# l, ^! c: H
{
) r+ W. I$ f" V, g0 y7 d9 A0 m LcdBuf1=temp%10+48;7 B/ ~2 q, M$ A2 `: E8 I
temp/=10;& F+ x4 p3 H( w- M2 T
}8 E" ~6 ]- r6 h: Z$ U8 T2 l
}
6 B% u- ?+ t# E* a) D, ]$ B: y [ if(temp < 0 )
9 a8 `- J9 Z9 }& q' N9 _; q( i {, ?& C/ S3 C% s5 K
& C3 f& [) S' @
w= -temp;5 C6 G% a4 s* Q
for(i=6;w>0;i--)6 @; p: X3 ^3 @+ X. ]2 O
{
% n, N! D" K" ^8 o) ~$ r/ w LcdBuf1=w%10+48;
$ G4 F* |" {2 {0 d3 }0 d+ Q& P w/=10;. P% ?' |# A6 N, m
}
; l6 D8 i, _- S0 I N+ n0 s6 C}
% u" S# d2 F% Y& h if(i>=0&&temp<0): V! j5 t5 |9 g. k% w& X% m
{
0 n) u- H) w' n& \" I3 k) { q+ l2 s if(temp > -10)
+ v( {; d4 W( k. H6 s {1 x/ E, g& J% u4 @9 d3 x3 i3 E
LcdBuf1 = '0';- I; N: |6 D- I6 S* } |
i--;# X m2 o4 T$ S/ n8 B4 u9 z4 F
}
( f4 _9 x# f" P2 b: P& D# g LcdBuf1 = '-';! ]0 H7 y) r% a8 |2 i5 E' \% S+ g1 P
i--; 8 ~* i, A2 L; [) a0 n) @
/* if(i==5)0 K# s2 l6 T* T2 ?0 R% F
{5 f4 ? q6 s3 a" k
LcdBuf1[5] = '0';
' I" m" I: n! x, _" { i --;: Y' G% v, W8 C, j
}$ |9 \! b# p% W
LcdBuf1[4] = '-';! n3 W; R3 W& N+ L5 m
i--; */
$ B1 @5 f5 }& ]0 U4 U% T) f4 D7 O1 P9 N2 |6 K# \
}2 _ E2 t0 f& w7 C5 c7 E! h
for(;i>=0;i--). K& V% C2 E2 H5 E; P+ j( R
LcdBuf1=' ';
4 z+ K5 y0 a2 n for(i=0;i<5;i++)
: Q3 P c6 r4 v! z r LcdBuf1=LcdBuf1[i+1];
4 x3 H+ b( W; u( c1 f8 u if(LcdBuf1[4]==' ')LcdBuf1[4]='0'; " c Q, B2 b8 p2 u8 h) Y, H5 o
LcdBuf1[5]='.';0 c$ r* P. |# L: A
LcdBuf1[7]=1;
" j. V, O5 l# [* Y# U7 c LcdBuf1[8]='C';* |. j5 k! M+ ]9 z
WriteCommandLcd(0x84);
8 ]7 j& X9 Q* F5 e1 ~, E display_string(3,0,LcdBuf1); K I/ i/ p5 j* g/ e
ADC_RD=1;7 b U* ]5 Q) ]9 X! W& ^( c
ADC_WR=0;
3 `# D, X5 w& a, m- Y$ k; K for(i=0;i<10;i++)" ?7 y# x8 m; @8 K! \+ b0 g
ADC_WR=1;
, D0 Y% @9 ~$ H8 o* K$ L2 B' y4 n delayms();
. f. {- O/ G6 S
- \5 f' d; }9 b7 o/ G' a) W9 u& F, S' K( ~$ _3 L' C
}( R- M4 M# K+ U" d! D
7 S0 K9 T; R% l$ p% h. k+ v! }# ^
main()
" f9 B# ?: i4 q& s{
" T5 v) s X. s( ]" C: b unsigned char i;
5 w/ Q+ D1 w$ h* A J! U, y' _+ J lcd_init();
# a4 h) o; {8 U) O1 e for(i=0;i<2;i++)
2 h- l" y3 s9 ]( E- I Write_CGRAM(i,Bmp001);1 [+ @4 _& w9 E2 h* ^, n
ADC_CS=0;& q8 k9 J! t: N) {4 ]0 u
ADC_WR=0;
7 [! i7 k* k9 d! r% j; K$ D for(i=0;i<10;i++);, ^2 j M$ r) z8 u9 M) ?
ADC_WR=1;
# a/ M: `' k2 o. B% Y" J$ r. d while(1)+ v' C0 w' ]2 k- C. @4 d% M
{
* K8 g. f2 r. N/ r& b' t" H# ~1 n) r+ M. j; g
下载:7 b# @/ T8 U& K. ?
. Z' R4 e6 d# M/ ~) z. W+ x
. j6 R4 [: I( w! X; G7 V
5 q9 F( O+ y0 `- m. u' j
|
|