|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如题 电压小的时候可以正常显示电压但是一高了就不行 是哪个参数有问题还是程序有问题,程序如下4 w4 i5 r% i) a! c+ B! E' O# F0 `5 N
#include<reg51.h>
0 K) R" f; D4 j. f9 B3 X/ E0 V #include<intrins.h>
7 U6 \" D, q2 y2 I c #define uchar unsigned char
- d( e* d- I( R! E( I- O! S sbit P2_0=P2^0;
/ Q( D Z2 k& v. Z8 W( |' q sbit P2_1=P2^1; //定义数码管位码端口" s8 {% ]/ C) i$ ^" o1 Y4 {
sbit P2_2=P2^2;4 Q6 S V, G( Q) ]+ S, Q
sbit P2_3=P2^3;
$ |/ j4 K% |& A5 N: a, W* T7 x sbit OE=P3^0; //定义ADC0808端口+ H- u& f4 v. T% J" @( w3 T. k
sbit EOC=P3^1;
6 N& l) O) J$ Z, _4 q- j sbit ST=P3^2;
( Y3 ^! Q% A" U sbit P3_4=P3^4;- o' I m! v: Z: [5 ?8 r
sbit P3_5=P3^5;
4 j; z2 w3 B) k7 r& G# ]3 ] sbit P3_6=P3^6;- C; ?1 f/ d- H) M; F& w' _8 v
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个
" N1 y/ t3 G1 E8 |uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9十个段码/段码
+ K% J$ j3 }) n! D: }/ C6 wuchar volt_data;2 O& e5 i3 s! ~1 L
void init();
; C) m' O: w" `2 C" O% D1 v$ u# @ uchar i;
0 I5 V5 P) {0 T1 O6 H //*********************************
4 g: X# R) f. N9 T //延时子程序
# |5 \/ i4 ~6 `+ ^: r//********************************** u& l, i7 }8 h, i) \1 ?7 P
void delay(uchar z)
/ V- F+ a4 V% e1 ]; I# o {
: P _ m0 d7 u0 @+ o+ N2 \1 T uchar x,y;( Y* z! R# w- w" j( m8 i7 @
for(x=z;x>0;x--)
" G/ a+ C3 n# v- f8 p1 x for(y=110;y>0;y--);
( R/ ]' U& A/ c }6 e* ` D }9 ?+ W% U/ E. z9 l! S
//*********************************6 B! }2 V* ?4 N$ v3 C3 x5 Y
//将AD转换输出的数据转换成相应的' a. I* u. S7 z' ?, W
//电压值并且显示出来
) G( v h' x; |; X8 _//*********************************
6 Y( n4 t6 l" t+ ~% p1 H- f$ Jvoid convert(uchar volt_data)
. h( j* @0 r" P# ? {
, j; _8 d& U- x2 T5 \ P0=table1[volt_data*196/10000]; //AD转换的个位的电压值- `& p) F1 L5 L
P2_0=1; . D3 u( u& t u& P
delay(2);7 ~5 c3 [, [$ a& b, N
P2_0=0;
Y/ D8 K& o2 y& V0 { P0=tab[volt_data*196/1000%10];5 c6 H% z* G' ~. G8 y( s3 t, j% H
P2_1=1; //显示小数点的后的第一位
0 p1 f' k, J& B% w$ Y% p delay(2);; [% i, h# Y" J
P2_1=0;) b8 V+ V, h1 _- E9 y z
P0=tab[volt_data*196/100%10]; + I# W1 v1 r- V; p2 u2 b! d
P2_2=1; //显示小数点的后的第二位) f: r6 }0 B! B0 b
delay(2);/ }% z8 I' Z4 ~) e, c/ ] a X
P2_2=0;
6 w* k5 j4 u9 C; |/ W% g1 x P0=tab[volt_data*196/10%10];* \7 h T4 q) y3 q( _
P2_3=1; //显示小数点的后的第二位5 V' r, D7 B4 @$ J
delay(2);/ i- Z# X7 J' I: {& @
P2_3=0;
' V; B3 v1 i; [% |* P0 J }+ ^8 G5 H( Y& M
void main()+ J; y6 |: t9 P t" ]
{$ a% F0 c1 y* \+ v J* _
uchar volt_data; V/ O- q+ b* _
init();//初始化子程序
) K j& g0 B5 g T while(1)+ P) k6 R }+ b0 ^: M/ c
{4 o9 d0 u9 _9 I7 w* G& _
IF(i==5), S- ?+ a* Q {, Q. s
{) g4 R$ V7 _( H4 a
i=0;+ q. r! |( V* B t
ST=0;4 r' B# S/ s' ~) S* u
_nop_();8 w6 J( a( X; k* ~
ST=1;3 m8 X) Z- X) l7 @$ Y5 c7 X" Q
_nop_();
7 j, U7 ^! w! m; y2 `. d& X ST=0; //启动AD转换4 [" L z4 t$ z. W/ ~ S
if(EOC==0) //等待转换结束& U" `( k" o6 K4 t
delay(2);7 Q; @* M, `: I& X
while(EOC==0);
- G1 z, P( J, G/ A* u OE=1; //允许输出
& A3 ^, _2 H( d' F, k- L volt_data=P1;
0 |$ a% p+ P5 y/ z convert(volt_data); //调用数据处理子程序% ~0 p. s2 f$ W1 w6 S$ ]5 c. a( T
delay(2); //暂存转换结果3 q! D9 p# ~2 S& o: I6 `7 g" P( d
OE=0; //关闭输出
4 K% ]% m+ e, P0 k2 i R/ t }) q& M. f$ E6 x# N& h
}5 V- g7 f" G9 P, N& p$ h4 v
}5 i4 j3 X' K: R0 p: C% `' w: t
void time0_int(void) interrupt 1
& k+ e# ^8 S; B7 t { k5 X% \: p: z3 w7 A" A% l& X
TH0=(65536-1000)/256;
, C# A, X: R' H. ] TL0=(65536-1000)%256;3 \2 n/ q; c& v
i++;
% K* u7 F6 U7 y1 ? p }
* |1 b. V2 L3 U7 I- C void init()
# \+ Y7 m: e, k2 W, S { ; y7 n; T/ J: B5 q# X! K2 O+ T; R
P3_4=1; //选择通道3! D8 d7 Y; O R% N: J( V
P3_5=1;
3 z1 P4 E4 M# X( |, p& E P3_6=0;
/ e( s0 R% L9 W# @# O TMOD=0x01;& G. h0 H' r( @% C) U
TH0=(65536-1000)/256; 3 V, t G5 ]' R$ W! _$ I
TL0=(65536-1000)%256;2 K8 a5 T6 @9 c* l/ t+ U
EA=1;ET0=1;
. _% v s; I+ i2 C, Z i=0;) ]' t. x9 Z# y2 q
TR0=1;0 ^- d: J! g9 X# _ A
}
5 G: u/ h' @3 T4 v6 I& ^( g1 M
% ?3 O# P& c F6 B. ~" t0 D6 T7 ~5 D4 ]3 c, ~6 i7 @1 T6 I8 e* x
|
|