|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
数字电压表设计proteus仿真及单片机源代码
( v% `6 V3 j9 A) ]) C! Z) K
) J/ r1 i2 k) V- P
; d" G4 I# w) S4 k单片机源程序:
3 R+ H/ M/ v- u( a4 S#include <reg52.h>0 T0 y% A' W2 @) f& `; R
#include <intrins.h>3 G) {4 o4 K5 f2 e, ?+ i) s
9 ?0 x+ b( t" F6 K
: h, M1 J" [! M0 `2 b# q3 {) X% F9 N% K
sbit EOC=P2^6;, O _4 j8 G4 g3 V! f9 A; ^7 f
sbit START=P2^5;
7 E! V$ h- m5 s7 B! R# asbit OE=P2^7;
# u: ^) [7 k6 z% esbit CLK=P2^4;
3 `5 P ^& ^6 D/ S. n5 e U3 vlong int a;
* u9 }) Z& z9 u1 Zint b,c,d,e,f,g; //定义长度为7的字符串' t, m. Y+ R' B/ g' L/ x
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};. y7 b0 L5 ?3 H4 Y/ E/ ?) X
void delay_display(unsigned int z) //延时子程序
* T+ s0 a- p: O" V1 j{* J, H: L' t% y
unsigned int x,y;
6 s9 u" z/ w1 |1 P. f% h for(x=z;x>0;x--)3 t, C# N2 K7 y6 v; y
for(y=110;y>0;y--);$ {1 B: g+ Q7 {1 Q q
}
2 O2 Z8 `& Z5 Dvoid ADC0808()# ~6 X0 b9 O$ ?* p; R, o/ d
{
8 z/ J* G3 z1 t if(!EOC) //如果EOC为低电屏,则产生一个脉冲,这个脉冲的下降沿用于启动AD转换 ]+ T I" ^! u1 G) j
{
' S) P6 G! y5 Y! X1 f* d) u START=0;4 f6 d8 f/ ^1 q, [: M% v
START=1;
# S5 P, n' v" e+ ] l4 c8 j; E3 \4 W START=0;
- m- A* E! m/ u3 P q5 i, Y }) L* p/ D. C h9 g C$ ^1 L( L8 Q
while(!EOC); //等待AD转换结束
! i+ P/ ?3 y9 P* x9 z3 J1 a; w* FSTART=1; //转换结束后,再产生一个脉冲,这个脉冲的下降沿用于将EOC置为低电屏,为下一次转换作准备
" {7 h" E/ G) B r0 G START=0;
9 a2 X( C& V7 t; F+ Z9 p while(EOC);, A0 e7 k% C( c- m; N! U J+ r# p
} T0 y6 _2 `; _1 ~
void bianma(); L2 y" I0 K/ L- c& J* L, {9 c2 K% U
{
& d3 @' V: H1 `9 u$ i# ]- S4 x! Z6 R START=0;
3 R- O% S0 u( h$ X! K ADC0808();* k( C) N& Q+ z+ I+ V# ^9 ?
a=P1*100;! P( Y, _# q& N* [+ R. J( D9 R& X9 ^
a=a/51;
9 }" ?# a6 _4 r. b- w3 ^8 L' Y}
7 K* r- f3 T& u7 j: f1 Bvoid yima()
, \) B8 x( X! E: O3 X k& R, @! K{' Q. U7 D: O, O
//定义整形局域变量
1 L n$ } K9 `' {8 ? n& T8 k b=a/1000; //取出千位! E# }" S0 y8 Z% ~; b& p" F+ u
c=a-b*1000; //取出百位、十位、个位- n7 V5 H% m6 y$ ?- R" l
d=c/100; //取出百位
$ O- T# K: \4 K; u x6 W e=c-d*100; //取出十位、个位
7 @+ p& @* R, y% l- g' p" w f=e/10; //取出十位! O, Y/ W0 l! N' S7 X; l3 V. m6 n
g=e-f*10; //取出个位
8 e" U6 _# }7 a* O! V4 `6 L
6 |0 [( J; g- m! z. ]9 |$ h
( L) _* O, C) R) D. v8 d6 e, E& H& g}
" p& T4 c8 \3 }% pvoid display() //显示子程序8 m. ]& \- h& N9 g+ h% g3 N
{
$ y' i! t0 e0 W$ ~ P2 = 0xfe;
8 Y- s- J+ Z, |5 P P0 = table;
. D: |! S2 }( q: S; S6 H delay_display(1);( }/ y% I1 s) h. O ]* R S9 K
1 Q2 o0 h7 k/ [' y; T P2 = 0xfd;
( O2 a* J2 j* A: c3 Q8 k P0 = table[d];
( [) w9 q6 v$ p, I0 ]3 u; N delay_display(1);" t9 A* E$ I! q4 J ^! s+ M
: [- l1 U* e. m' { k
P2 = 0xfd;
r4 ]( R5 Q* ~5 G* C P0 = table[10];# A, E7 H% D( u) |+ B
delay_display(1);; u4 e! Y: u6 j+ Y" H
z$ M( q$ F8 p
9 g' Z6 x) m6 S! @' G# m4 R P2 = 0xfb;
7 y+ n+ Y" Z1 X# [1 q P0 = table[f];
$ I2 U8 E5 A7 R, Y# G delay_display(1);( ^: Y; M1 v6 M$ }: A% p/ P, O
q+ C5 S% T$ [, f P2 = 0xf7;
5 E8 F. F% t1 h# O P0 = table[g];
6 [* b9 q3 x* m, `: O) n2 [ delay_display(1);/ F& _- A; w8 K
}
5 R+ y( e- |/ K ^7 M- Z" Vvoid main()
9 B/ j/ K$ z/ p! n- n{
& P8 ~& @+ W; m EA=1;; z' H" R3 ~: H" d. q
TMOD=0X02;
( |# V- ~& G0 |4 a; G TH0=216;
5 O& k' Q) P, K TL0=216;
2 r0 }* ~+ q$ Z* @ TR0=1;
2 s: x* h* _+ q3 X ET0=1;7 K5 N6 U( W/ p/ {7 f% u( p- y S
while(1)1 e5 {1 _# |3 a# n7 B
{; m! R, a4 Z. D3 G R
bianma();. Q4 @5 ]/ f# P$ ]$ N2 K, x: P
yima();
) m% r+ k" M. J+ @; |! J9 b. o* O display();6 ^3 d' n9 P# s( {
}) {/ b( z# c6 Y7 F7 O
} ^* s8 f) j. v/ ?, C# d9 g3 Z. o
void t0() interrupt 1 using 04 ?7 ?, g% _3 i3 l
{1 v/ \# r- ]: J) X. ]- {2 T
CLK=~CLK;. x% x0 K1 X/ w5 Z: `5 X* G
}
2 R! t5 l5 V1 B% j4 w# i
0 e& q0 C3 l( H4 z
: v! G4 L2 }2 `0 ^9 n
# K$ b# a* a5 { |
|