|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
数字电压表设计proteus仿真及单片机源代码! [- _5 ^; O3 d# ~' G1 Q1 G& E
3 ~: s* y' V; C9 q0 X& \
3 Q; L1 R6 b6 \单片机源程序:
- V, c; j9 a8 ?& l: u, I#include <reg52.h>- o/ Y9 _# ~0 l
#include <intrins.h>
' E4 ]) h, X3 w/ Q# g# z, Y3 r
9 C. M. R) ?4 \2 o5 @1 s' C: }: [( u& ]% ^+ _8 G2 U4 V5 g
sbit EOC=P2^6;- o+ u( t) \7 T' V% N
sbit START=P2^5;
+ r7 D, S. g2 Q1 K/ ]sbit OE=P2^7;
) O# o) w3 W; n) \+ E2 G2 }4 Isbit CLK=P2^4;
) _! n3 Q% I7 b/ N- e& H+ M, c% e( xlong int a;
. v6 b2 f+ j6 t: h! Eint b,c,d,e,f,g; //定义长度为7的字符串
/ A2 V: h% H1 R) Z2 J' Nunsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
2 d a7 d! y4 j# m, m void delay_display(unsigned int z) //延时子程序
m/ C- }8 M; d8 k- U7 `{. Q7 z: K Z9 T# f0 D6 `0 G
unsigned int x,y;
- W8 E3 D- X: O$ J- I for(x=z;x>0;x--)
$ P1 B2 m2 {) i8 e) B* d for(y=110;y>0;y--);" s( {# ]# C- L% N, A
}
, y6 j2 h/ X4 avoid ADC0808()
3 O' Z& t- T. m{2 s( Y- a/ a# P8 z- X
if(!EOC) //如果EOC为低电屏,则产生一个脉冲,这个脉冲的下降沿用于启动AD转换
" s9 C- L& J! }6 ] Q {- b, ?9 t& X' G' W6 W6 u
START=0;9 O# m. z' Q- r" Z+ \8 P
START=1;
3 V( m5 C' ], m& K7 c START=0;* d* ]+ @' Q1 c: o) l
}! g, i! f4 @* ^# a
while(!EOC); //等待AD转换结束
3 E* u1 W! Z0 A1 _0 A7 DSTART=1; //转换结束后,再产生一个脉冲,这个脉冲的下降沿用于将EOC置为低电屏,为下一次转换作准备
! \7 j) Q- y4 }0 \1 f" n7 Y d START=0;) m) J* ~+ u3 v2 |1 v3 Q: v, X
while(EOC);
" R' W$ G$ A' W# _3 L b5 [}
6 x! f1 J* j1 d7 m3 ~void bianma()
( S* f' j: o4 s: Y, m1 ^{ ; B# `0 K2 n6 w( ~& Y, r& |
START=0;
1 D- a" v/ c+ O0 ~ r$ t ADC0808();
; e0 j) o: G. K; F& e( v a=P1*100;
t8 L8 J6 |1 R a=a/51;" n3 M# e% F; B" W7 t
}2 k# e3 l. ?- V$ M' J' y
void yima()
8 y: H. C+ a" O3 X{
7 r d" t, H) C2 P9 v //定义整形局域变量
- C( u5 G) }$ x1 N/ s9 E) P b=a/1000; //取出千位
) d+ z- Q& q, c; M* O: n c=a-b*1000; //取出百位、十位、个位
1 @* w% f- h( p% ~6 E+ U1 b- h d=c/100; //取出百位7 h/ d2 j7 e0 b) _* m1 G
e=c-d*100; //取出十位、个位
$ V0 s+ Y/ ]9 x Z) ?+ w$ k0 i f=e/10; //取出十位$ N' X, P5 E( }/ |
g=e-f*10; //取出个位8 d I+ s, k( q' R4 _
) @" e6 O: r9 [" C7 P: W5 [" q' T1 t( y9 k
}$ l) y! S! w E+ K
void display() //显示子程序
0 e' H/ p, V" ?' i. c9 T$ n$ C0 V9 B{0 z/ \) Y" N' }6 O0 t' b
P2 = 0xfe;
' W5 Q* o4 j8 o3 K! w) b' m P0 = table;
, d7 j) y* Z5 |6 x% {" [! `& A" K% B delay_display(1);
" u, U$ {% ]0 k% ?: R
' \8 |) Z" z: [ P2 = 0xfd;
* i) i5 _% o/ r5 M0 V7 n P0 = table[d];& O( ~$ O. H4 h0 l& N
delay_display(1);' b/ ?5 d, `& U0 G' H/ G g% p
+ }/ E) k- @$ ]$ K5 h- O1 Y& \( e
P2 = 0xfd;
1 w4 c( j7 N+ B$ t* u P0 = table[10];2 M5 s7 @: F: d" V& H1 U2 u
delay_display(1);8 ~- t) @! I1 C# {8 m5 M
% c' _+ U( v% F7 ^ q4 v- a1 K
) \3 j! ^ K1 K! z+ \
P2 = 0xfb;5 }: P* \6 u; n7 z J: ~' h, ~
P0 = table[f];+ L9 Z! X! c, R
delay_display(1);4 `7 y# M0 h x \
+ b5 _% |- z5 ?* w7 s' l
P2 = 0xf7;
! {. }& `- S$ L. Y. J. U2 v P0 = table[g];, S ?' m) O- C4 Y1 ]
delay_display(1);! w" P7 g" z ^; A1 S8 N
}: X7 U& X8 j; d5 r/ V$ V
void main()( |2 `: ?, a3 h6 k: h% M* j
{# Y B+ C# G) y1 G2 y
EA=1;
& C1 r+ X8 w* ] R TMOD=0X02;
- l6 h& b( R/ q; P3 |9 F TH0=216;
# C2 ~) D/ L/ k* a `- j TL0=216;7 G9 [% @( J0 }
TR0=1;& l* ]; y6 s) c- J2 G
ET0=1;
2 |; o1 F7 \ r9 Z' v2 r while(1), M5 B$ D/ B/ z, F# a& q
{, X: V# T9 N4 g% x3 ?5 F1 E
bianma();
0 N; J2 |- W2 Z2 B% I7 z! q6 ~ yima();
( V2 z- h8 P1 y) s L display();
/ c: K$ v1 q1 h% F8 {0 o9 u3 I }6 i9 ]- G; P8 B2 h
}; j& v7 _6 }: e; M' q
void t0() interrupt 1 using 0" G* N2 e& _; F- w
{
* q+ [9 A+ B/ | u CLK=~CLK; J: r2 C( Q5 F" x( j6 j4 Q
}
2 O9 e& D0 x7 k6 x. |- j/ u6 K8 R6 \- y& f' @8 B
, {/ a1 x# Q6 {+ F0 m* a
: A8 l2 c' ?( b3 J6 B |
|