|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
数字电压表设计proteus仿真及单片机源代码1 x0 ` R! A" f; D+ ]* H
4 T. Z' H& Z- h5 s: S# {9 ]# O/ a, X! b, n2 y
单片机源程序:" ?' U/ a) R! F* C) g P# ~
#include <reg52.h>
+ W' l- s( H% a. U* |2 t% D0 T" ?4 I#include <intrins.h>/ K. S4 A- k8 H+ K7 F
1 ~; x4 e( d! X+ ~$ i
6 ^6 ^8 t; j! ^sbit EOC=P2^6;
3 M- L! y- M+ y7 j: p/ Csbit START=P2^5;/ s4 q2 |8 [& e
sbit OE=P2^7;9 x! [# U A' d, W: {* A: p/ u
sbit CLK=P2^4;( P! R# N0 r8 F; E
long int a;1 J) S4 E7 R( {* v* ^! c; B' {7 F
int b,c,d,e,f,g; //定义长度为7的字符串
, k* r2 `6 c' V/ D, g! G) h! t6 ]unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
; {5 L( X6 B& g void delay_display(unsigned int z) //延时子程序
9 {- \8 q8 G/ N8 r{
( K6 J3 ?6 ~( n7 j2 I unsigned int x,y;' K1 M, D3 C2 K+ z8 j
for(x=z;x>0;x--)
% ]- y0 T6 Z* Q3 j* x L for(y=110;y>0;y--);5 s! j% o* |/ g, t7 }
}
9 t. j& M. ?" D' b& B2 ovoid ADC0808()
X! @* J* ~4 [$ J: c) w{
- [8 _ v6 V. A7 W6 Y, k if(!EOC) //如果EOC为低电屏,则产生一个脉冲,这个脉冲的下降沿用于启动AD转换+ F0 @5 l" _* a+ x
{$ R9 N* G6 A1 X9 C
START=0;
4 q+ A& w- a( z% C START=1;' j5 M+ H% ?9 O; e
START=0;
- u% Y3 H! [# R2 } }1 V! ^& i& \ K" ?, v
while(!EOC); //等待AD转换结束
3 p5 h5 y, j) v) ]( J xSTART=1; //转换结束后,再产生一个脉冲,这个脉冲的下降沿用于将EOC置为低电屏,为下一次转换作准备# B' ~. ~4 i1 v& s9 V
START=0;, ^7 Z* Y( s% F9 U8 }0 e1 f; C
while(EOC);, o+ I8 `5 l- Q7 ?" @, j$ t
}
! n6 [/ F- W0 k. C. Avoid bianma()8 ^1 M8 r' y3 ]: I# Y( o
{ ( J! W+ J8 i/ X+ R( c' {& _
START=0;
, l2 _4 V: h. B ADC0808();
6 n$ m. l1 e4 p2 ]8 U a=P1*100; q% v4 d4 P& U6 i1 L1 S. Z
a=a/51;
+ D! q- `8 Z( X" u8 I}/ v, r' m, A, ^$ ~+ B: i; o1 @4 s2 C
void yima()0 T3 v! X& p: m$ j
{+ {. k0 [* L% i' d5 [
//定义整形局域变量
+ V# A6 c1 C( r2 |0 N/ r b=a/1000; //取出千位* P/ A; u( o1 Q) s" G! \1 ]
c=a-b*1000; //取出百位、十位、个位1 u. z! \6 f6 | n! v
d=c/100; //取出百位! v$ b( d8 Q2 z
e=c-d*100; //取出十位、个位
$ G4 M1 m) ` U* ? f=e/10; //取出十位- y" y' b( x% c @: g0 s# \
g=e-f*10; //取出个位* b2 [7 x' Q2 ~4 x3 q! F" X
! o- f. V1 b5 S( ?3 e
9 p1 {4 n( C) q2 ]. }6 w' e) [}
! e* m3 D# D( u' k7 d) m/ e# vvoid display() //显示子程序# l* K8 l: G# [/ A
{
% p& @8 H- }3 F" r$ E! @ P2 = 0xfe;
, J, U. S3 S1 Q5 T @' q o P0 = table;
( G1 e/ L# W" T9 `: {7 |* E1 ? delay_display(1);
( M, S6 Y* y2 p' t. U+ y. _ 8 @+ L! W, e3 L2 P1 B$ Y5 a4 v
P2 = 0xfd;
' A D4 k: T) K P0 = table[d];
/ w K5 ^# A- i6 s delay_display(1);
. T) @, E, D: V) O0 _ ' a2 M* n; Y7 n. t
P2 = 0xfd;0 ]8 C7 H& o6 ]) h
P0 = table[10];
: B' U, _6 b' g' Y delay_display(1);
& |5 j/ ~7 E! f6 f4 B# `' q" X" Y4 x$ K$ T+ o9 {0 r8 N6 \
* k% I' S. k X/ {, {/ `+ M h P2 = 0xfb;
$ m% k m7 ^7 \/ H7 W P0 = table[f];
& I, A2 s+ y- J8 _) d* L2 d) L+ e& q delay_display(1);% A5 G- R/ m; I( x+ R; Y: G
& T- i) t* J/ W6 R, a3 p5 m
P2 = 0xf7;7 H1 M) U3 L$ d5 Y% P
P0 = table[g];& M6 j) j. t( u, t- O. w8 x
delay_display(1);. ?, l+ ?5 n7 e# g. G; a, u
}
' v9 v" F. ~7 Z2 avoid main()
) E1 v; _: ]; J! c# z{ i& {; n3 ~: d4 A
EA=1;
* f/ w+ y* _) p; E7 ]6 ^ TMOD=0X02;* p& A2 ] f# N2 R" O
TH0=216;
K% h6 I# f% e* R/ Q& k9 ^3 r; u6 z TL0=216;
; C1 Y) ~7 k% I* S' [+ o TR0=1;( w7 W7 b% F9 Q4 |
ET0=1;. p/ W! m4 F: I4 ]7 J
while(1)
{; E( Y% ~3 o { v: D, U7 `+ i3 m' V
bianma();
+ x; o* Y2 j4 b4 w0 z4 i yima();% _1 B$ i$ v, F# m
display();' I# T4 e) ]7 e9 r# v9 c( u f& a
}
1 n9 U/ p5 g( g0 X3 V}' U% w4 j! k$ F+ }% n& z& ~
void t0() interrupt 1 using 06 F7 g- t; A& `. b$ Q+ @# q, E
{
. b( q$ O, M& g/ B2 j/ i5 ? CLK=~CLK;
3 D' z) y: o. @! A* \! M# l7 w}
5 C6 I% v( ]* |3 k& a# s' \0 f, S: S a: E& f8 y
6 x) B5 x# b, K' U" d% L& Q, t" [
7 U1 ?( ^5 M% S2 ~" [
|
|