|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如题 电压小的时候可以正常显示电压但是一高了就不行 是哪个参数有问题还是程序有问题,程序如下+ E6 _3 e* m& U' N/ I( E( ^
#include<reg51.h>
) F' N( n- r- j& a3 ~# p# [2 m( ^ #include<intrins.h>9 t8 a3 p* J- p+ N
#define uchar unsigned char+ D1 c5 X9 ]( w1 } C+ m% t5 n! u* i
sbit P2_0=P2^0;# l. \. m5 O: e& K& |
sbit P2_1=P2^1; //定义数码管位码端口
; s3 M5 I3 J2 A x: Lsbit P2_2=P2^2;7 a- z5 b4 _2 f5 s. s2 k
sbit P2_3=P2^3;
# q1 y( C8 [' ?" a+ J sbit OE=P3^0; //定义ADC0808端口
: c- D6 [$ u# z1 Z! {$ _ ~sbit EOC=P3^1;
0 M- x. J* y6 R+ o. @$ Z sbit ST=P3^2;, Q- q0 z! @ Q- {& U7 q- _3 B
sbit P3_4=P3^4;
0 Q: D0 C" y$ f+ {# _ sbit P3_5=P3^5;% l* g/ l' `" n- F
sbit P3_6=P3^6;
" \ ? d; G/ ^' h( R uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个0 ^2 x. e3 k% @- U& \" T) ?
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9十个段码/段码; I" c0 M) Q, O
uchar volt_data;
9 R5 \& \9 f: u2 r9 X void init(); m# X1 O6 |6 H3 s3 h7 E7 S, ?; C
uchar i; : F5 h1 [; d! t3 p" t
//*********************************; i. J1 r' A' y9 m
//延时子程序0 }# g4 t& l9 k* u* t. g
//*********************************
s; A# h/ n) q" A! x) Vvoid delay(uchar z)
" h0 @- ?$ |7 y# m5 N0 M9 _+ b {
6 c- w2 }# Z5 @9 Q uchar x,y;: R' r; f. Z" ?
for(x=z;x>0;x--)4 A6 ]6 f# W. [# E; E/ Z3 _8 ^
for(y=110;y>0;y--);
* r7 {2 S% c0 r H3 J }- L: K# k) p% G- B+ p4 n _
//*********************************
5 `& E8 l9 w8 U* @ H( R7 \* u //将AD转换输出的数据转换成相应的
( t! I* ^* X w- M! _4 i//电压值并且显示出来& O5 h- L- K4 y
//*********************************
( i" v" O( K1 X. D: |$ f9 }7 Mvoid convert(uchar volt_data)
: ^" x6 X- G, b. Y4 g5 w- B! R% w% N. ^ {
; s1 R: w- H; o V! G P0=table1[volt_data*196/10000]; //AD转换的个位的电压值
, y1 Q: X" m) F* h' n7 x P2_0=1; ' B5 k3 O4 e! M# u0 O4 {7 e1 G) Y% \( Z
delay(2);
" k9 I9 P$ n& X' K, O4 s P2_0=0;
+ M. l' b" \" Y P0=tab[volt_data*196/1000%10];; b2 ?6 {3 C" g. a
P2_1=1; //显示小数点的后的第一位
! A' o* n, n& a+ n5 @ v delay(2);
z I& R) U- c% o9 F2 m' k P2_1=0;
" r9 P! ?& y( a2 [ P0=tab[volt_data*196/100%10];
+ K( ?5 C3 v- x. `# ^1 A0 x P2_2=1; //显示小数点的后的第二位9 c: B/ m. w) K7 B, ?1 I( z( W( z
delay(2);
8 x0 R% A9 h- d6 Q4 Y P2_2=0;1 p* N5 S c# w" ]2 [* `; X
P0=tab[volt_data*196/10%10];& E1 n& v8 R& y' j
P2_3=1; //显示小数点的后的第二位+ y1 E; D5 M2 }# C
delay(2);
b. \. B" ~( `+ ]7 R1 ` P2_3=0;
/ v* |5 a5 w6 z* @9 q- O }
& P9 p% v, t. N) Q' t/ N void main()
9 P9 P) ?$ C# A- u% e6 i {: g# P; q# w' _+ C+ n3 C
uchar volt_data;! T8 `9 b- b7 r8 \/ f$ `) J
init();//初始化子程序
- f# o7 G/ m: D2 F5 }$ k while(1)
! w! G) I4 F W0 D; x/ L% M. Z {
( u4 y: O. `: v8 y& l9 } IF(i==5)
: ]8 w6 L, v2 i. A {
1 D$ M- W: ~' w i=0;
m5 ~- a3 O: `0 f) j; i ST=0;( V8 E4 d$ N; z# g+ R
_nop_();/ k5 |! `+ l& @+ ?
ST=1;' M& g y# _4 V, f
_nop_();; U1 |9 O8 k+ W% k) Y5 U
ST=0; //启动AD转换& D) {6 N5 p" L5 G& M" s% @
if(EOC==0) //等待转换结束0 ~! v4 x# q' V! n; o0 ^
delay(2);3 N5 G- b, }5 {! l
while(EOC==0);
! b" ]8 k. C6 A. `3 K OE=1; //允许输出
/ }$ D2 k9 `* G1 X volt_data=P1; 0 P% L, g# Z# J( d/ q
convert(volt_data); //调用数据处理子程序5 ~- P3 z( ~$ n& y8 L4 x: n% R
delay(2); //暂存转换结果" f' S$ ?- |2 H0 {
OE=0; //关闭输出! b- R: C1 N* z
}( G/ q+ y7 w; X: [/ U3 [
}/ \, V7 e& e# W/ c1 H7 @2 {$ j
}( r, e3 `+ \$ h9 O; `5 H3 K+ \
void time0_int(void) interrupt 1( |0 g% d5 d; S* o' _& _
{
2 m! m, h% E: A9 a TH0=(65536-1000)/256;
" Q% h+ M% ~* p) Y TL0=(65536-1000)%256;
) J. p t; W% G2 T" d6 t i i++;
. \8 }/ A/ m1 {( i [* M }
% j" V( @: i4 [ void init()
9 C7 k/ \ R+ R% w }0 ~ {
" [2 B4 ^$ i! G* X% b2 a P3_4=1; //选择通道3
- J% q2 j% s& a$ d" W" A, \& p P3_5=1;- C$ [! l% ^! v: k5 o- [3 k
P3_6=0;4 ~( x4 q+ Q9 o5 j
TMOD=0x01;" M% u6 h8 t8 r5 I* t
TH0=(65536-1000)/256;
) h' r7 o. Z7 W2 [ TL0=(65536-1000)%256;) {7 A6 Q$ R$ S0 N
EA=1;ET0=1;9 J7 {0 }% t: x% [
i=0;. A I Q! `( |' K( c/ }$ q0 \% h
TR0=1;
7 {4 D' {2 k0 |$ r5 h6 r }; V! Z- K- {$ @ T3 R" c' B5 k; n
4 z/ I0 @5 r' ]6 q5 B. }6 J$ g9 `6 @- |0 i3 F: B
|
|