|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机ADC0832和1602显示电压值 proteus仿真2 Y) s& @6 K+ F4 S+ o1 ?- |# b
L7 Z0 G6 v& O8 |- Q7 ^ `4 }* Q k" Q; f7 A3 a E5 i" c) g( @: }. |# j
proteus仿真关于51单片机ADC0832的下面是原理图:
2 p/ t2 ^& y9 A2 {3 ]- _
: J3 D& N' k" F" u
, f, F4 m" x( z- i& k( F5 I6 r% w
0 z4 `/ U7 P7 c7 H( X C
, G6 z+ B" y2 H" M8 T' f单片机源程序:
0 T- m2 o, q ^6 B* x#ifndef ADC0832_H, |3 j3 L' i0 u3 c- g/ V4 k2 H7 H1 R- F1 }
#define ADC0832_H
3 p, s2 H% e+ }
B, |0 D7 J# K8 P' o5 C: c; I1 D+ t5 ?4 A8 J
% M2 V$ B& V4 C$ n9 L
- M8 o8 d) y/ ~' l1 wsbit CS_0832 = P1^4;$ r( ]& O7 B8 t& S3 F9 s0 `
sbit CLK_0832 = P1^5;
( s/ S) D8 T" ]) `1 I. a) n& fsbit DO_0832 = P1^6; // DI、DO不同时有效,可共用一个接口
2 |" Z7 V1 Y/ ?' _; r$ Usbit DI_0832 = P1^7;6 i% O9 O% @, [, r2 z
" E, c7 w) L5 c: p9 \
- `7 U% |! P$ I3 D
. f- r E3 Z' v8 @/ _4 G
) D# S2 H3 U, G3 E4 a+ Nextern void _nop_ ( void );
2 n0 a0 C* ?& x- o- ?#define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0
" T# q3 b' R8 ]( B5 u& J 6 G' A- u& ^" {0 b+ H
//把模拟电压值转换成8位二进制数并返回
" e1 ]2 f9 E% e/ J1 eunsigned char read0832()
( B- g k3 T% M1 {2 u{
5 [, G, |3 R9 B. D5 r unsigned char i, ch = 0, ch1 = 0;* I* @9 _' o8 V
CS_0832=0; // 片选,DO为高阻态
6 W- z- {3 `8 x- H# l f% W
0 }& q& @3 o4 a+ i( z DI_0832=1;
6 B; A6 i4 T; F; e- }0 r$ z
6 T% P# O0 _/ h0 w // 此处暂停T-SetUp: 250ns (由pulse0832完成)6 Z4 I* j; T+ k) E. ]8 `
pulse0832(); // 第一个脉冲,起始位,DI置高
+ T4 @1 w0 \8 l+ ^2 g8 h! \
9 t$ Y, z N* \& n j9 C4 { X" X DI_0832=1;
# }. W( J& s( g' B: z1 N0 u: [ pulse0832(); // 第二个脉冲,DI=1表示双通道单极性输入& p' G9 }$ z# W% {( E5 F u; E
; G! B, J1 ]6 o$ Y7 d: A DI_0832=1;
3 H' e" z/ o& z7 r, W& n; z; z: a pulse0832(); // 第三个脉冲,DI=1表示选择通道1(CH2)
; t7 i9 D5 U5 v. G. [' Y% ~ & q+ M6 |% J: H5 Y# Q
// 51单片机为准双向IO口:应先写入1再读取
+ A0 q2 x4 s9 D Q* r DI_0832=1;
! H' i1 b( C9 C4 X3 [* x' t+ N+ ^. G/ G
: q N9 d A S( V // MSB FIRST DATA9 U8 k' O" j+ t; \5 V2 N% e/ e& F6 I
for(i = 0; i < 8; ++i) {
* Q& M% A5 y1 U+ a pulse0832();
0 m3 `" _! |7 v+ H8 m- j ch <<= 1;3 E: v' ?+ M% Y) a& K6 a
if(DO_0832==1)
8 z' l1 Q' `) U+ M/ U' | ch |= 0x01;& h1 J; P# U8 X) ?% a. Z; H$ |
}+ h# d4 q* z8 Y. z$ U$ z
7 w) d! w( T9 P7 C2 ~ // MSB FIRST输出的最后一位与LSB FIRST输出的第一位是在5 f+ f" D/ d' K6 c
// 同一个时钟下降沿之后,故此处先执行读取,后执行pulse
' g" T. e9 C8 `: q9 V: l // LSB FIRST DATA3 ^4 n8 z: C8 `7 B
: @, G6 ]4 ]7 i" b0 R4 W
* Q/ G3 F2 k, t# V, R5 ]; R; w7 f' t
0 P2 }' h' C- z…………限于本文篇幅 余下代码请从论坛下载附件………… }5 R2 @( ~- B6 {: @8 _) }
2 b: X* E6 R, Q: R! @& G# U+ s/ j. W; K
" q9 o5 n$ ?: D; d3 a ~. f8 S9 } |
|