|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机控制ADC0804检测运放TL084的电压仿真3 d( T9 n: }$ L
* v# |9 w5 `: B4 a u
' n1 c9 }8 W9 H
下面这个是整体单片机系统的原理图:$ z5 d: X/ X6 S9 P
- e: V/ o( S8 X/ @) M
0 u- Y% ]0 o. R7 T5 m8 i! a
adc0804检测电压部分原理图:
8 j% f B3 c; f* i) V- M
b/ x: k. |$ W, t& i6 I4 V- \0 w' j: Y! ]8 ~
运放TL084产生电压部分的仿真:
' j s- |8 S3 I4 W5 b+ [ % f" |7 W8 ~+ X6 m4 Q3 A
4 i, v- ?' ^' V3 d* @/ x单片机汇编语言程序:8 Z/ B, v$ ]* Y: a) O4 ~
ORG 00H
/ B) P7 m" |0 m/ C; }* b5 }ANL P1,#0F0H, j+ C/ x; O' @' t! M% @
START: MOVX @R0,A# m+ e; e; _9 s
) S6 D4 i9 l) l& `
+ I4 |' N' K- O/ j* UWAIT: JB P2.0,ADC
# K0 |5 t! l, S) H CALL DISP; o3 C' o" V9 ?( I5 C3 V) M
JMP WAIT! [2 f% b" \+ G& M% o$ g
3 k/ k. A+ d; |6 d+ p& c- r- @
, x3 G' z" j/ C5 f( H6 D. V0 sADC: MOVX A,@R0" W7 `) Y3 {+ I
CALL L16 @ a. O+ v, @% H/ x1 o5 |1 b: `
MOV R1,#0FFH3 V7 G0 R+ j7 ?3 O3 d" l
' h8 T2 J" ^$ z. u V# ]# x* o. X& r0 J
DISP1: CALL DISP" E! I8 F/ ? `4 u. h
DJNZ R1,DISP18 F& r# E1 `+ V" j* F
JMP START- b9 a! R* j( O4 q% |, v# U
, }7 R8 X$ v% t2 ?
. q: B% T8 s0 q9 j& FL1: CLR C7 L) z; y6 b& ^7 z
MOV R5,#00H; S$ b5 i: J1 u" y% c( V [9 f
MOV R4,#00H: ^( _) W- D; o- o% ?
MOV R3,#08H
$ O0 |5 b$ _" l
- l. ^2 [" c. _2 ]* v
$ Q4 U- }9 s$ k5 R' [4 u/ S& a; E, q vNEXT: RLC A/ c5 G* d1 P9 \" O
MOV R2,A
1 v6 M% F0 q) o6 u MOV A,R5
5 G4 {! f& X9 F# C ADDC A,R5) a/ S3 b/ X2 b, O
DA A3 D5 z6 H7 q3 b/ K5 e
MOV R5,A9 o1 Y/ r6 j- P; ]1 M7 v) k
MOV A,R4$ N) U* F! A, Q _4 R( M
ADDC A,R4
1 U1 h/ a6 v+ m6 W* T MOV R4,A
$ E" Y& M2 d. c+ R! v( M- J7 _ MOV A,R2
1 _7 W4 v J h, { DJNZ R3,NEXT
2 G7 L8 w- Y+ B- |/ p MOV R7,#020 N- Z: Y. ^5 o! e+ k) Z. z- f
+ v1 h4 a( G# C5 L3 T7 t, S
- j, D2 C1 A( @) F$ z; M. y6 QL2: MOV A,R5
" K( D4 t2 ]0 I. O6 q+ |& j6 x8 t7 C5 J ADD A,R5
: F" K9 ?% l3 P DA A
- d4 z$ @6 w8 Z: P MOV R5,A
! K7 J6 y% b# T& }* t$ l8 G2 { MOV A,R4
& P3 ^; v& f' h8 \6 z) O DA A6 h4 U( F2 ]2 l. p7 R' H
MOV R4,A+ E; p Z* n$ Q5 @, S. j
DJNZ R7,L2! {! F" T" L/ y
RET
# F: R3 F# k3 l* |: H6 z* j
' O! o6 S1 y: ^* j% N) w$ v0 q% i$ m
* ~8 V3 ?& b- R6 ]1 R/ J1 WDISP: MOV A,R5
' d8 R# `$ f, q( \5 |4 f* |! R ANL A,#0FH
. t- h% b$ O, ` F% Z, m$ y6 s ORL A,#10H! m$ C, U: a& T& o
MOV P1,A' I0 [9 G6 r' N6 E
CALL DELAY0 z' J/ f! B6 J9 E8 ?- C# f' k
MOV A,R5
. m! |4 A/ a" x ANL A,#0F0H
# i) u5 s6 B6 M SWAP A
2 I# d# R* Q, d* G" z" M( N. |5 V$ F ORL A,#20H# \# W4 E- O* F% p7 ^3 U) r1 ~
MOV P1,A, \2 C. R+ n5 S# H( d
CALL DELAY8 `) [: A! A7 K7 ?9 p) E; I( W
MOV A,R4
9 S9 h# H0 e% h8 [+ M* n8 g1 F ANL A,#0FH- Q: h' o! H% ]- N( ]; r
ORL A,#40H6 M/ G4 u0 R0 F; E& `( q0 A
MOV P1,A
: {$ J/ h8 C3 s. s, P CALL DELAY5 W6 j. q7 E# R9 N
MOV A,R4
. L) P2 q* v+ h+ p5 U+ j ANL A,#0F0H2 i7 V, _# D5 N. y! r& e
SWAP A/ v) `3 U5 @, S: ]0 A8 u
ORL A,#80H- J I. T$ p3 e) R( ?3 E' C
MOV P1,A
* I' Z" l y5 U) W& b- V CALL DELAY
& g4 g6 t @$ V3 t- q4 b' @) e CLR A0 x( k" Q) [: w; [" I" B9 E
RET1 T% f, U$ j% ~% Z: X6 Q
% z" g F) M! ?" ^
T. \, }& u0 b6 R
DELAY: MOV R6,#10; T3 f4 ]# c( P
* j( X. \' u5 n
% f) K5 T) q' K+ p) j
D1: MOV R7,#248
/ B8 L9 M( G8 ]/ ?1 \) I DJNZ R7,$
6 H' |9 S ^0 j1 C DJNZ R6,D1
2 f) Y: B8 N# j& f RET
( l3 p% A) K3 y3 y; |9 N END2 X) H! j/ }6 S5 \, c! g2 f
8 m: v; J, ]. Q$ p- O( v0 \9 Q0 \1 S& X1 t8 O) [
" \, Q' x+ d1 }
. m" y7 n/ c1 V# }( Ac语言程序:3 K+ v1 a/ Q. ]
#include"at89X52.h"& C" V$ j( n* g* z- f
sbit LCD_RS =P2^0;
" P0 p) a ]; Q6 X. nsbit LCD_RW =P2^1;) r6 G; ^; P+ K3 e( W: f
sbit LCD_E =P2^2;
. e! r9 }3 d$ g zsbit ADC_CS =P2^3;
6 g) }9 V; D& A+ Fsbit ADC_WR =P3^6;
7 C0 l; S5 P4 \sbit ADC_RD =P3^7;
- y9 {& o {9 ~+ O' g- N#define LCD_DATA P08 @+ q% X. D8 U% e3 M
unsigned char LcdBuf1[10]="";
% U8 \$ I% t- }1 k( R3 v/ \ c- k
) N' O: S6 P4 }unsigned char code Bmp001[][8]=
4 ^) Q# @" n8 U# g{
0 W, w9 ~' f3 E& E {0x06,0x09,0x09,0x06,0x00,0x00,0x00,0x00},7 \3 ^: a& ^6 t8 _
{0x06,0x09,0x10,0x10,0x10,0x09,0x06,0x00}
; b f6 t8 g: |& L' u};
* o' K1 k$ b- F7 }4 `2 m7 L
; H8 b' ?0 ]) G$ ~, @# |void dellay(unsigned int h)
+ Y" L1 p3 p2 y9 l8 A{
5 |+ w7 q$ w E ?! A/ V while(h--); //0.01MS
6 L" u9 e3 T; W( r}
6 w Q6 _- j0 h) U9 e, c& A
/ a3 X! T& L: y+ W8 i* vvoid WriteDataLcd(unsigned char wdata)* T7 x6 Q1 }" q! e
{1 n/ N: t( M7 u. m w% h6 m' c
LCD_DATA=wdata;6 L7 m, V/ Z: Z
LCD_RS=1;
7 X, ^7 w+ q4 N/ { t' Q% l0 j LCD_RW=0;
2 P0 n5 ~" S0 T7 ` LCD_E=0;
9 o3 X$ ]0 G9 o dellay(1000);- n' U. B7 R2 V8 ~
LCD_E=1;0 n& i0 v- S. `
0 z& g9 o9 L* M* S6 [' [1 F+ |) Y}
8 a" G% b# C, I; F2 f2 Z
5 \) b3 {% _+ m6 Gvoid WriteCommandLcd(unsigned char wdata). {) p. i" O0 b; Z3 ^) C
{
: H+ g; R9 V ?: K" _6 b) q LCD_DATA=wdata;5 G( @# d9 B* r. [5 J
LCD_RS=0;
5 B% `0 B/ \( W, G5 h, e LCD_RW=0;) Q* N: C# n7 `
LCD_E=0;1 j" q' N- j( q6 v
dellay(1000);. `/ L5 Y# z/ W! Q( }
LCD_E=1;; H' I, X$ O5 d2 \4 V
}$ a a% o- I; @ o7 D
( {8 T& b, _5 R# @, a
void lcd_init(void)6 @0 ?; K5 ]( s w: w
{; ]) ?- Y. @; `8 Z4 Z
LCD_DATA=0;) j, M( C! t) m
WriteCommandLcd(0x38);1 y% Z9 \8 m, K) s/ G \& Q6 [
dellay(1000);3 T/ L# f) N8 b( C; R2 W
WriteCommandLcd(0x38);
% ~+ f" `# @* u1 J( `' @5 z* o$ d dellay(1000);
2 N. T, w# E+ h% I) d$ u WriteCommandLcd(0x01);
0 T& w7 Y; t4 r" u/ e7 {; l WriteCommandLcd(0x0c);
2 J; K) t# W3 `) u6 l1 T( X8 ^
1 d9 x0 t$ W0 S7 M9 M}
. Z$ n, `. z, C$ U1 z1 N! @# v7 `
void display_xy(unsigned char x,unsigned char y)
7 F! O9 N# D n0 J, o( ^7 d{1 a7 D# I8 d, r1 O1 y( W6 S: J
if(y==1)
; [" h. o+ D: N) u+ Y0 o: u x+=0x40;
2 d. M, v6 I5 z: d. \" N x+=0x80;
- d( ^4 r( J1 u9 h' M% ` WriteCommandLcd(x);
$ J( \8 k6 j% N( V* b! i: M}
: U' ^& e O- y, _
; Z8 }3 \$ L; ]) \8 C- o7 d& _0 pvoid display_string(unsigned char x,unsigned char y,unsigned char *s)6 Z9 j4 `" g/ _4 W+ ^: I
{1 {5 M V2 ?. @- }
display_xy(x,y);! M( _5 ~- r p# C. E/ f1 n2 `: A
while(*s)
) ?. ]# R/ |+ r, K- P" d% v {
' R6 a1 L3 C9 [; g2 l, ]' d WriteDataLcd(*s);2 C) D! g9 j j& D G& P& H8 n
s++;
- @1 h) R- M" o
5 a0 r, c' g2 ^' C/ U7 _& c Y$ I% r }0 H1 G. n, d5 C# f5 j
) r _8 P( a6 v% D3 |' `% C% e}+ m# F" j8 U# |- r
+ W7 I3 r& W; m) C1 S
void Write_CGRAM(unsigned char add,unsigned char *char_num)
% F' b. w6 B" S6 V) u6 j{
7 P. z/ D/ e* F& ^6 r unsigned i;2 J% ?5 j# t1 z) ^( x0 ~
add=add<<3;* D- Y$ J" a/ |5 \/ t* z
WriteCommandLcd(0x40|add+8);
6 d: I6 ?9 `: n- o for(i=0;i<8;i++)/ z; M/ d. u$ O8 }8 Y+ p( Z' g
{% \4 A/ q" `+ C
WriteDataLcd(*char_num++);
3 j. ~% g0 o# O
: |3 \2 F; ^$ t B/ E3 _6 H* Y$ s( v }
) r! ]( z6 u. R8 }3 C' p" x. n
* f8 f8 s: } g}
- r5 r. h1 g3 x# E4 i2 H$ m! v1 p9 y" {/ [1 p
void delayms()
0 S5 |8 l E* l P: |( j{+ J1 X) J5 }+ R5 c
int i;
/ ]2 J3 n0 T* I% W- c6 v- l) H for(i=110;i>0;i--);& q7 G: O: `2 l/ G0 T
; ?6 ~4 F, [1 i: D: R
}! D& \ H2 E: g1 ]/ W4 F
void delay1s()
1 E- D/ G9 C+ ^& b5 D{* |9 o7 z* _8 M' {; {! l7 x
int i,j;
4 G: ?- d0 B- U# ?4 V for(i=1000;i>0;i--);& L; y# ?! {' X7 V. y8 u2 T2 Y
for(j=110;j>0;j--);
, q- Z- b6 n" U; u8 g}0 e' F. K5 V0 S$ |6 B! r# `
" L. b) g) I) |5 Q& ivoid convert()5 [4 ~* U0 I! H; P
{/ g; i {/ {0 f3 E# x
unsigned long value;
" {9 I0 s4 [% I. c3 |3 M char i;, t/ M, v* W( O+ D) T& l, e8 W! L
unsigned long res;0 Z7 \. i$ r% L% I: r. p
int temp,temp2;' G) P$ I3 w& R, H% B
int w;; Q. `# Y4 L* G2 r2 C; A
P1=0xff;, j% g0 c) u7 B5 M
ADC_RD=0;
# {- d, U- H, A! n0 m3 \ for(i=0;i<10;i++);
1 e# g8 U& n5 [( D0 { value=P1;
* D) f% E- {1 z8 j. G$ J res=(float)(2550000+110000*value/30)/(2550-11*value/30);6 `) q& b" F1 @- e9 c6 L- L1 U
temp=(float)(res*10000-10000000)/3851-545;
D% R) k* _5 [. b temp2 = temp;
4 }* h8 {4 w3 `3 k if(temp >= 0)
9 f7 _9 J6 K( R; H% N {/ T+ b5 {4 j- _3 V q3 x: \2 M
for(i=6;temp>0;i--)
L* }0 |3 U) e3 y& O {) H) u% m _- x6 F8 A" e
LcdBuf1=temp%10+48;
; E( @+ Q- r& A8 }- i8 t! B temp/=10;
8 v' v% f; m. _# Q }4 A8 p, ]0 F7 U( s& U
}
: I' }, @1 d0 R* r. g' w- Z if(temp < 0 )
& B8 c$ K) l+ [5 ]2 K( l {$ Q8 L/ L" [4 D
6 U+ T+ _8 p h Ww= -temp;
+ R( l2 n0 G- _8 ]& e' k for(i=6;w>0;i--)6 t B8 z. s3 v! ?
{
1 B) \, i+ ^) ~- O" `* \% C LcdBuf1=w%10+48;
/ V) |1 s8 g: N2 o4 U0 a* r6 O6 B w/=10;2 d+ ~& E k+ n' K* I1 k1 u
}
$ r0 w% V3 [' {}
& p; ]2 ]6 O4 b8 g! d if(i>=0&&temp<0)1 l9 b0 z j) l! q# E+ S% J
{
, R* F, C3 m- r, v/ a% u if(temp > -10)1 M) r' h& Y/ h" F2 j8 v
{
/ t, P% ^0 _8 ^5 E. L( g$ C LcdBuf1 = '0';0 T. I1 {: u$ n/ b/ a; q2 J
i--;. ^7 i7 [( x, l9 _" F8 D7 J
}9 A. X$ C) S( k: i
LcdBuf1 = '-';
9 U2 O+ R8 [; j, f. o i--; * ^+ x. @; ~) h! ], z: w1 H
/* if(i==5): S3 m0 e4 g: X
{
3 F) q/ {: U S LcdBuf1[5] = '0';
4 u5 _; O8 T0 q i --;
3 i5 J. J; d. m5 j3 J0 ~% G% @ }; f; E" j" y* O. O1 Z
LcdBuf1[4] = '-';2 v! i$ u" t8 e4 _: [2 y' q3 F! q6 a
i--; */
( W+ i, k( i* p2 ?
5 L& } G" K/ ~* p }
3 v4 P q2 n" | for(;i>=0;i--)' q7 z9 \! L9 E/ h2 w
LcdBuf1=' ';5 Q7 t1 t; R$ k2 c0 _& s
for(i=0;i<5;i++): `: L" o1 i2 S l4 r- x
LcdBuf1=LcdBuf1[i+1];
/ V* ~& s" c: N3 ~2 v if(LcdBuf1[4]==' ')LcdBuf1[4]='0'; : H7 k4 @* M4 s- B; R# d
LcdBuf1[5]='.';
! O/ C; |/ k' V9 o! R LcdBuf1[7]=1;
8 E% o) G' s. z4 }6 a9 Y8 ? LcdBuf1[8]='C';* b0 [0 F3 ]9 ?& X' E* |5 }: E% h
WriteCommandLcd(0x84);
* w* D/ [- Y3 b display_string(3,0,LcdBuf1);9 m' O: A' O) R6 B
ADC_RD=1;
6 E/ m' `- F" t# T; i$ M* o ADC_WR=0;1 _" `% \0 e; M0 `
for(i=0;i<10;i++)- B- t# \. n- d6 C; H: ^7 E+ M; Z
ADC_WR=1;
; c/ Q) z8 z% E0 \# E" e; M delayms();
5 b; m! l& ?7 R0 E1 r5 j- H
+ I, A$ a+ E2 c9 C. `
, W: j% v m. _5 C2 g. g$ t}# x2 W6 N0 l m& |
- B, C$ J" m! l m2 H0 O6 {, l. Qmain()% P$ P2 q2 I5 d
{: v* G+ a! x1 r: e6 Q3 I. e) n8 u
unsigned char i;( W5 y" ?: f8 t' N; W6 a+ h
lcd_init();( I9 K, r9 ?. h: p- U# q6 m
for(i=0;i<2;i++)4 J: x. C7 _0 y( N
Write_CGRAM(i,Bmp001);
" s/ j7 C% }6 B# I1 O ADC_CS=0;' Y- Y: w3 {/ J* w
ADC_WR=0;
1 p+ [" A" r+ X! d& T# ^0 `+ ? for(i=0;i<10;i++);
/ H7 @# F+ e; B- `4 f ADC_WR=1;0 K6 H, x0 k! E. Z: M
while(1)0 e9 X. }2 Q$ g: ]
{
- P; q: X0 g- K% A
: D/ r: u* F3 F. ]下载:
& J9 J$ h9 V/ I% \% j3 U& U5 e* f3 y! S" Z) |/ F
3 ?4 y) k4 m+ {) p1 R- F( e) n( f; H: l! Z5 a3 t
|
|