|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机ADC0832和1602显示电压值 proteus仿真8 k3 q% d0 q4 }
' o2 a" |$ \! L; R, i8 ?% w
: ^3 O/ B6 |6 H2 _; Vproteus仿真关于51单片机ADC0832的下面是原理图:+ q/ w: y$ {/ v) h
3 q) `# J- q! I) ~5 _' z" t! f ) Q" { [! X0 a# `+ c
8 _) }8 K/ l) S+ V, h( x+ l9 l3 Q
( W. }6 W# ^8 U3 S* O. u单片机源程序:
% F' A" w& R4 C9 U- R+ d#ifndef ADC0832_H
8 U9 a2 d8 B6 ` y#define ADC0832_H& e- o5 Z2 B! |& J8 a* w* X( O
3 ^" ^6 J `* k$ n* ]' `; }8 W
! W6 ^' b# J! p- `$ h( F/ J: [9 o9 X
( x$ J2 ]$ ~- x" x/ ssbit CS_0832 = P1^4;
) ^5 ~9 g9 f7 k6 c. v% Rsbit CLK_0832 = P1^5;
: D8 v% [2 J* d1 Hsbit DO_0832 = P1^6; // DI、DO不同时有效,可共用一个接口
& \* ]8 W* `: f* Z) N, @0 @sbit DI_0832 = P1^7;. P" }( K. p( L+ ^3 w B7 E3 Q
' {) n# Q. h7 p3 C- v- x% z( h; I, ^
9 G% t! O; a1 _$ f9 R
8 n% b0 y' s! ]% h* ~3 `) l/ k
extern void _nop_ ( void );$ R) U3 i+ f1 Z' l; \( B; i9 L
#define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0
" ^( O, D5 K( t) u+ S- ]" k
/ z/ a0 E7 J! a//把模拟电压值转换成8位二进制数并返回7 v& n) C/ C/ c, D
unsigned char read0832()3 g8 f' i, o# X
{ W; G6 Y4 c J' j* z
unsigned char i, ch = 0, ch1 = 0;1 j, \) D1 J1 \
CS_0832=0; // 片选,DO为高阻态7 `8 M- h, u; s' W9 @3 g8 Q9 R
# p; P: B+ V1 c" N2 }: f DI_0832=1;2 S/ i2 N# M [% g* e% B5 w- S' a
" {' x( r9 s l5 j; Q5 P& B
// 此处暂停T-SetUp: 250ns (由pulse0832完成)' s3 V& ?5 `$ h; ~
pulse0832(); // 第一个脉冲,起始位,DI置高. ]% C: O/ k( N$ G
; D7 u# _/ v n; V5 u
DI_0832=1;
" ]9 d" B$ s+ `4 n pulse0832(); // 第二个脉冲,DI=1表示双通道单极性输入! L& l! s" ~, q8 ]8 c
1 `9 s/ A6 v- Q* Q6 Y% w DI_0832=1;
; u4 t. S0 \1 w" z pulse0832(); // 第三个脉冲,DI=1表示选择通道1(CH2)- J" A# R* Q" e/ N V d6 c- u& r* s
3 }6 e1 J/ t7 j* e# |3 a: P // 51单片机为准双向IO口:应先写入1再读取
! g9 k4 P0 a6 @! p4 n+ d% d DI_0832=1;
3 r# @) F2 I0 J d* h h4 g) ~
, ^5 o% k5 o# K3 Y4 d- ?* Q // MSB FIRST DATA' v3 y: s" c( d, t$ Y
for(i = 0; i < 8; ++i) {
4 F7 G/ u: P9 P pulse0832();
8 ^, j- {; q H ch <<= 1;
. @8 i( w2 T8 _" t9 [ if(DO_0832==1)
7 C/ ^+ U$ L: f0 a9 k ch |= 0x01;5 c i% K1 h4 t0 U
}
3 @4 \- ?3 u% I7 ]6 y9 c4 t ) {7 J0 _, o$ s
// MSB FIRST输出的最后一位与LSB FIRST输出的第一位是在
( H( W2 [7 j: x N/ q2 \2 ~4 B // 同一个时钟下降沿之后,故此处先执行读取,后执行pulse
& j; n) w$ Z( k6 Q // LSB FIRST DATA. t# c! N, g. o3 z( r" I
. V4 ~6 U& g$ C* {' N8 j% T- |6 e% F
0 v+ W* F3 d7 P, u+ u
/ B0 D1 F0 ?! L6 u% U1 R2 w2 V v…………限于本文篇幅 余下代码请从论坛下载附件…………
5 Y5 k3 ~. X8 U) H" p ?3 f% y0 ^8 a0 `+ `: i7 u1 C
1 @5 g5 t5 X/ Y. Q) A! b- Q* }. h
|
|