|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
数字电压表设计proteus仿真及单片机源代码
/ H" p# p5 e$ c; A. E% [! P0 b" z( `0 s! |. s& m
* ~1 N n+ D; w+ D单片机源程序:9 L B2 c$ ^* M
#include <reg52.h>
& \; e8 n3 c: O# l1 @; F' c9 k#include <intrins.h>
8 k& ] J# g) ^; N* a% o- O
+ L! R8 e# t4 d/ Z" |/ [
8 `0 f! T5 k$ c* Z7 c7 Jsbit EOC=P2^6;- i. u* i# {/ B
sbit START=P2^5;0 q% ]3 y" ?4 @+ U. c7 a
sbit OE=P2^7;
+ e+ w9 x8 s8 }" Q; l2 V+ F, csbit CLK=P2^4;
* }3 S) G i J8 R% ~3 H4 Jlong int a;0 V( i- d& q, {2 }' }
int b,c,d,e,f,g; //定义长度为7的字符串7 o: x9 c6 t8 H% S& r0 P% s) d6 `
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};/ m* I/ [* b( Q# ?; T2 n \
void delay_display(unsigned int z) //延时子程序
; \8 Q: \/ a; F8 @! P) M{
: i3 ^, Y. p& p unsigned int x,y;
* a) k6 K& J! a5 E) c: ? for(x=z;x>0;x--)
& R; c/ V+ F& k2 k0 d- F- { for(y=110;y>0;y--);
, e) E1 C0 W/ b. M" o}; S1 b8 _0 |; ^* j9 |* W
void ADC0808()/ z0 E' n% u3 z! m$ t- Y, B0 g
{ \' y- [5 g9 L( x$ W; J- |6 C1 z0 w- Z. K) {
if(!EOC) //如果EOC为低电屏,则产生一个脉冲,这个脉冲的下降沿用于启动AD转换
% W m4 e, b2 _3 {0 @0 J8 @+ Y2 }5 E {
) _. v, }- \/ h+ k START=0;" A/ B$ ]* q# Z: M3 L* u9 Z
START=1;
4 R6 L! ~$ h3 w START=0;
7 v. b! l* h, |$ E. Z% I }' W! J/ d/ X3 s, L0 }
while(!EOC); //等待AD转换结束/ q, \: V8 z2 S, L& v
START=1; //转换结束后,再产生一个脉冲,这个脉冲的下降沿用于将EOC置为低电屏,为下一次转换作准备
& ~* F7 |/ N$ b. @5 ~4 r START=0;
: R' |4 c) g3 Y# G# M0 [ while(EOC);- r! i* s/ L; A
}1 j V B& N8 P3 n- S: q
void bianma(), c6 f7 P- v% y! N+ [- n) _( {
{
1 p: t" Y$ e: U B4 O" z2 \ START=0;
: P% }1 R6 [/ B ADC0808();
8 i' t @2 d$ d( k. N: E a=P1*100;
( p8 C7 u( E& A5 h5 M a=a/51;7 s, `! d) `) v* f
}
# \( P/ G& ~# _" ?+ @void yima()) E9 s% g6 H5 @* F
{% m( t F: H0 m* w; F
//定义整形局域变量
1 [1 a3 d6 D! F/ H6 X: {; m b=a/1000; //取出千位6 m; A7 S5 |5 ~% z4 g- h1 `
c=a-b*1000; //取出百位、十位、个位" Y7 Y+ ]/ a; {6 M- s
d=c/100; //取出百位6 V- |" |, _9 | h" W
e=c-d*100; //取出十位、个位# d n- u* c' v$ [ H
f=e/10; //取出十位
- ^8 _: M6 {" @: z* e! Q4 [. V( [ g=e-f*10; //取出个位
! m- Y2 Z" S( @! R* R4 V, v) o( D* v8 C% N. D1 m) Z$ S( Z
! ]0 e) ^3 v3 G' a7 _% g" A* h4 S}# [! c% e \: e" v$ \! G* U6 \
void display() //显示子程序& t! O2 M6 o( ?' R; S' Z6 ~
{
7 C" t0 }3 ^' {5 x9 Q P2 = 0xfe;) P5 B5 o. _1 _) j8 H3 t! G
P0 = table;2 J$ J5 o5 j6 O8 X# n) c
delay_display(1);
" [5 Q p4 w8 [* Q, D$ a! h
# v! A& f, r4 i e- F M! w) ] P2 = 0xfd;$ ?% @. R" ~% M& V8 t
P0 = table[d];+ @" Y' f! H: a! y8 v1 D
delay_display(1);; S9 O8 {, m* Y* o* y1 D$ D
2 d2 E. |# j0 S8 O/ ^' l1 D
P2 = 0xfd;! H0 }: R: W: c
P0 = table[10];) N$ I! g2 z$ Z* I9 u2 {
delay_display(1);7 X1 R( u! X# j/ u
: Z: R/ G) i( u5 Z3 ]
: f2 _4 ]9 k5 Q' ~. `! ?) y
P2 = 0xfb;; c, \: V" ^, X9 ^+ i4 y, l
P0 = table[f];! Y- A0 J/ A3 y, u
delay_display(1);6 v; }$ u+ ]: P+ H
: X' Y- ~" V4 @, z3 P8 J/ p& x# f
P2 = 0xf7;
$ o, ?& L' u# ]4 d. U$ ]5 t( d P0 = table[g];' ?+ k: Q5 w+ o& k2 S, M
delay_display(1); G$ Z( I Y; D* S9 A
}
& [' i. {. a+ {6 v4 \- T6 E dvoid main()
$ r; r! M6 Z+ Y2 F{4 c+ H& ~3 Z4 _2 D6 @
EA=1;3 m' K, w: x0 j1 o% s, Q! m
TMOD=0X02; [* V0 n1 s" ?* J. q, J
TH0=216;
g; i0 e8 c/ A8 D$ f4 i% v TL0=216;
, E$ m5 a9 G& ]* ^! K2 l TR0=1;
A- a. l1 S i6 d2 H- | ET0=1;4 [& V, _7 x' C# d% s* Q' x0 r
while(1)
* |% [' T/ d+ E) c) c& {) h {# P) {# d% y, i0 c* U8 g! w
bianma();
$ z6 U0 A* K$ u) t0 m( q" E4 Y yima();
& D- e1 ?* ?- \. t, L& {* k1 W display();
% L! c$ b1 q* E }
: H# d3 [# ]0 i: ] \8 I}
9 t3 |9 m! R X3 jvoid t0() interrupt 1 using 0
R9 k' {% L- w% N{
0 J. y3 v, ~- }2 r CLK=~CLK;* L; p* e/ e* y( B7 k4 l3 F
}3 m8 ~* v+ C0 D6 ^: r+ H* O5 u
2 b, E% v6 ]; }5 t! n. ~
" W/ [' {3 G U
# p( m" _' Z, D7 ~7 K5 v! b |
|