找回密码
 注册
关于网站域名变更的通知
查看: 388|回复: 2
打印 上一主题 下一主题

单片机控制ADC0804检测运放TL084的电压仿真

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-4 14:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2019-1-4 18:00 | 只看该作者
这个方法不错

该用户从未签到

3#
发表于 2019-3-1 17:07 | 只看该作者
很不错,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-18 10:02 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表