|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
数字电压表设计proteus仿真及单片机源代码- `0 P. T) q! F* i
- O9 s$ a* u1 p) D1 }/ G
( S0 h/ O M7 a, U
单片机源程序:# ^* @& y+ m4 ~& J7 F
#include <reg52.h>
+ \% m, `$ J$ P8 g( E, E' @# l2 T#include <intrins.h>
9 B( Q/ K" C& e+ d/ v* X5 ]! P: t7 O! |! v
) j# E3 b) j) h6 ~9 k, j
sbit EOC=P2^6;% U7 g7 Z7 Z: U. s
sbit START=P2^5;& R5 I' {& W( X
sbit OE=P2^7;+ V1 e8 E( t( B) u$ V& d* i% \
sbit CLK=P2^4;2 ?- U( _1 B4 g" _9 S
long int a;
* a3 ^3 U. P! R; C: Xint b,c,d,e,f,g; //定义长度为7的字符串
- G9 B( Q7 D! ^) j+ |9 _4 ]unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};- w$ U3 M& P+ G
void delay_display(unsigned int z) //延时子程序4 o8 _% _3 B8 F5 C+ Z; C. G
{* W( L8 ]8 J% o; \; S+ E
unsigned int x,y;
, d0 _' i5 S/ ~* h7 L! d% F% i for(x=z;x>0;x--)5 o, S* Y! r- P1 i) }$ b
for(y=110;y>0;y--);" d4 D$ F. t6 `- i* H, _
}
# ~8 H' G# ?4 R+ vvoid ADC0808()
: c. K7 }' i( I{0 y; [- Q+ I& Y( d2 J: e* j) _
if(!EOC) //如果EOC为低电屏,则产生一个脉冲,这个脉冲的下降沿用于启动AD转换
" t6 h9 @* ?. y {
/ N9 R f4 U( W x' W1 b START=0;; W: I6 J) |6 q P0 A6 Y6 @
START=1;- ^# l" f. y7 E& @: e
START=0;9 x/ V/ \4 E4 k$ S) ^
}4 Q% Q5 n$ D' Y9 W f$ U5 c" m
while(!EOC); //等待AD转换结束
# E& }) i- G5 M8 o# |9 v$ }START=1; //转换结束后,再产生一个脉冲,这个脉冲的下降沿用于将EOC置为低电屏,为下一次转换作准备
' q6 A/ k" N7 ] z/ {( d START=0;5 |# F* r, _ y' N7 {0 c: [, K
while(EOC);
+ R) o3 s9 @, E}2 O! X5 C. \3 D/ F7 Z: m; e E
void bianma()
9 E/ z$ }5 d4 \2 c{
3 b- b) S" X% J: Y5 x START=0;
$ B8 N% W8 D6 D% F+ N9 X, ` X$ J: f ADC0808();. y' |+ R1 G3 {0 v/ ]/ e
a=P1*100;9 N4 P$ n2 o- D: j; @- P
a=a/51;: m8 Z2 G2 R/ _+ v1 p% d$ U
}
2 g0 I4 ?/ [3 L1 }0 i. f4 Cvoid yima()
, Z6 m0 J! C9 x6 ^6 I{+ r6 a2 Z2 ?# C) I. s. n1 @3 O
//定义整形局域变量
4 Y8 J" W; H; V+ {% q% M. M b=a/1000; //取出千位
) O/ O* X U+ Y' t( t c=a-b*1000; //取出百位、十位、个位
# u% N* k1 k: T% L2 S1 M& B! `; y d=c/100; //取出百位& D$ X& l& Q6 _. p9 R
e=c-d*100; //取出十位、个位
6 L; {/ Z% L: h) o% y, k9 v- m+ T% b f=e/10; //取出十位5 }) c; g1 b7 e- v
g=e-f*10; //取出个位5 `% t& M. \' Z" L* B3 N9 n
2 |8 r& \. }0 L- [- p
& M7 C6 K+ N1 U% k7 u% V! u}3 c7 I. D: @& Y3 ?
void display() //显示子程序' B |$ V* `% g3 ^" d# g' o) ~
{! `. X( e; W. T5 A
P2 = 0xfe;
# ]0 V3 N: ]0 k$ O% j" T# o P0 = table;
$ M# |! s: h; v/ ? delay_display(1);
j) d# l" P0 g+ E) J; O8 V
1 q, u3 d8 \; w( F* Q P2 = 0xfd;
1 d+ U' P9 s t/ b& R2 _. f P0 = table[d];
6 {- p- z9 c; f7 K5 d delay_display(1); m3 R# r' a8 R; e
# E5 t! Q# t. A& Q- u# k E
P2 = 0xfd;
( E) z1 o! I, [6 L P0 = table[10];( ^6 I% E" l; F0 Y, T
delay_display(1);
# y. D% A H1 b0 ?$ v$ B
' @ N7 {% V/ l! |; r/ R" X% c0 _" v
P2 = 0xfb;
( z, e/ f! d* \5 p& ^, k% ~* R/ s P0 = table[f];
! a4 X; ?7 l: c+ W( b9 v delay_display(1);% u6 _( |: }6 w! N# {
& d+ L* N8 Y! B- L( R5 C7 d P2 = 0xf7;4 ]0 X; Q5 v4 `) Z& O" A3 y
P0 = table[g];
* X: p4 l+ x$ C, j# Q+ J delay_display(1);
9 w/ H8 n/ d0 W, ?" U8 h( Y}
! M0 M9 b/ Z" F7 |9 `- ^" U, hvoid main()/ y" I8 O, c9 e" p. ]
{
; w; @5 W0 y- i' X EA=1;9 A5 P- y7 j$ s5 F
TMOD=0X02;
5 G" B# s* P3 [+ X8 ] TH0=216;
/ n# Y1 e) f6 R9 z) _- O& f# R TL0=216;; O: v! W3 G* R% C
TR0=1;
1 ?6 G* c; n6 f4 n# u ET0=1;
# _; r0 S$ d0 | while(1)
' u" Z! B4 Z) U {7 f% p# w% p7 d8 w3 P
bianma(); x4 z9 z- h7 O2 b d
yima();
8 F) n0 E9 ~( W6 _) j2 t9 g }/ ^) K# O display();+ i1 K) q! @+ d, `; g+ }
}5 Y, W" x2 \" u# y( x& Q! |
}/ F2 F5 J* w; k8 T8 ^( ~ [
void t0() interrupt 1 using 0" f H- V8 t# T0 T( a, E. q
{
7 ^( e: {7 h. l `$ g9 g4 U+ C& k CLK=~CLK;' L& B* Y( k4 d! ]* c4 e/ W/ b2 K) b) u7 t
}
: r ~. {$ _- r: Z8 {
6 M( d8 M6 B" K$ B: F7 a& Q5 N! E
$ K: F0 }/ K! S# N$ L }) _; q0 x |
|