|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如题 电压小的时候可以正常显示电压但是一高了就不行 是哪个参数有问题还是程序有问题,程序如下
6 O9 |7 B/ W1 U- i$ r#include<reg51.h>/ z! d. I' W! l# p5 |: e
#include<intrins.h>
( M7 H! t6 }" E" ]7 q! d #define uchar unsigned char
; v7 E% m2 }, [' g% o sbit P2_0=P2^0;1 @! `2 m. e1 x, z) g W2 M& w
sbit P2_1=P2^1; //定义数码管位码端口
/ @; f) I S9 j# csbit P2_2=P2^2;$ i; g4 V& k6 w# T4 e
sbit P2_3=P2^3;
0 b/ h; e" g! ]! r4 Z- n% \ sbit OE=P3^0; //定义ADC0808端口/ D- N% \$ |, n4 n w( o5 J
sbit EOC=P3^1;; |4 Y0 Y' s. |$ s) T/ U
sbit ST=P3^2;
" ]0 d" J9 A5 v8 b sbit P3_4=P3^4;$ e' a8 U( W/ z1 k) v9 s. H3 f! ^1 F
sbit P3_5=P3^5;' N- d$ i6 @2 f5 _$ H' C* Y
sbit P3_6=P3^6;7 b. i# u, p" U
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个
; u3 H/ @2 W9 A/ v, ^9 P: huchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9十个段码/段码9 B6 {! j4 v2 N
uchar volt_data;+ ~! @ a. I5 y1 s$ T
void init();
4 W( _& G- |( m; d2 l3 l uchar i;
- T( q! `" m/ b, v- @ //*********************************
( v$ Y. G7 h9 ~$ t' T; \4 T //延时子程序
7 X( m1 d- f L9 G5 C7 M//*********************************
0 Z4 s( s* c$ H6 S- I5 y" Avoid delay(uchar z)
! P# G) Y/ D& v5 i4 ~ {
. Y" A6 n& v7 o4 R3 l, W e uchar x,y;
6 O6 w6 Q$ r0 m, F6 S! y! a' |9 ] for(x=z;x>0;x--)
# \6 `8 e: p0 n7 W2 P! ~8 k for(y=110;y>0;y--);
6 M* B! N0 Z8 x% Q0 l! `0 i% B }* v$ O7 Z4 E2 i4 M/ _
//*********************************
! [' I6 Y3 g$ U2 ~/ Q- C //将AD转换输出的数据转换成相应的) i& a: o* g& d1 r$ _, Z" l7 o1 G
//电压值并且显示出来( N) w, y4 E/ o- P( }
//*********************************! c5 f# G( Y& h( o
void convert(uchar volt_data)
9 ~, a6 X$ ]2 Y4 m# Q7 A; o4 B5 h {' L+ o% a; M% Z
P0=table1[volt_data*196/10000]; //AD转换的个位的电压值0 v9 I2 i" v' n! D* t+ n+ E
P2_0=1; " v: r: |7 z; F" S; n1 E/ ]7 I
delay(2);
. d: B* i: q* Q6 I3 j6 F' U8 k/ V P2_0=0;
' A }, d( j1 n+ u4 v2 p- G: u P0=tab[volt_data*196/1000%10];
' N% h; L5 P$ l1 f* F P2_1=1; //显示小数点的后的第一位* {& D- i( L) A, _% E
delay(2);
1 \! j* ?! q) _4 c% X. C P2_1=0;4 R+ y& f% X* `& z7 Y- ?
P0=tab[volt_data*196/100%10];
& I( y5 I3 A1 D! z P2_2=1; //显示小数点的后的第二位
/ `0 N( }* @! m [3 C delay(2);
$ m; l# Q& J6 r5 r1 D P2_2=0;% w* A W' V5 J8 G# w8 N3 P
P0=tab[volt_data*196/10%10];
. i7 Y" G8 s6 s, T6 R P2_3=1; //显示小数点的后的第二位6 z7 H) W6 z6 R& ^. E& j% b
delay(2);
9 R* w' `) W3 r- p" h P2_3=0;
! ` a8 P# x9 F7 D' F) [0 _ }9 s! c# m0 M: Z: a& l) M
void main()
; w8 C4 E: { O3 D* c. ^5 Y {
/ l% r, s% K" m3 [$ i4 z uchar volt_data;; i C) N$ ?6 o1 n
init();//初始化子程序3 D8 `. J4 w; \/ v
while(1)
' {5 Q- _% _/ E) Y. ?+ O+ D/ a {
8 P }! Y! w# a& w IF(i==5)) s+ R6 a1 D2 |
{
6 x7 u6 h0 l, z) e! } i=0;
: I0 P2 T" w4 X, v) U( p: m ST=0;
( \5 h3 k8 Y0 B: k2 F _& C. i _nop_();+ x. }. n. C. o
ST=1;( n/ k+ d! k# g8 _0 a: M
_nop_();+ A" J0 M6 d9 y4 O3 e" L
ST=0; //启动AD转换3 { C+ B+ G f) @: [
if(EOC==0) //等待转换结束; \% D! w# n/ d
delay(2);
# t K8 a; X: H$ G/ K while(EOC==0);
. @7 ]! |$ J, P J' j OE=1; //允许输出. q4 L) t5 h$ s9 P" K
volt_data=P1;
3 ?, y. |' S8 y+ U convert(volt_data); //调用数据处理子程序, a$ j$ D) B3 Y- `2 B2 E. p1 ~
delay(2); //暂存转换结果
+ F4 Z. S: p8 H OE=0; //关闭输出
+ ?0 e* r3 U+ o" f; r- [9 B& n }8 p1 E* F) a& `1 ?/ X- g {
}
) n4 v/ F @& o. b4 \8 i/ ? }
$ k b$ ~7 K- o, c; j4 W" ^* j3 d5 mvoid time0_int(void) interrupt 15 J* U* h$ C$ q, Q" V5 y3 c
{
9 z7 k- s6 E8 {5 b3 l& ] TH0=(65536-1000)/256; 4 ]. [6 X1 {. ^) v8 ~% f( j* z) e
TL0=(65536-1000)%256;
: w+ S8 s& N( e9 k( m$ |% l i++;( H( A1 S( A. J) [2 b: H
}* \% O* `0 x" p) }' G
void init()
+ v3 }. R: P% W6 V+ ?- H/ B {
- C! e A/ s, g/ R6 q% i P3_4=1; //选择通道3
9 x" Y7 F9 |$ y: l, C: ` P3_5=1;$ V" ^' l; u. B9 ?: Q
P3_6=0;2 ?$ z* T! z8 _( d' U) z+ g7 b0 P
TMOD=0x01;, Y. A7 n) }6 S8 M3 v H
TH0=(65536-1000)/256; % e: L/ t. \6 I1 `; J
TL0=(65536-1000)%256;5 s$ V* ]2 L. N: j' [) G
EA=1;ET0=1;) y. b- ]. ~9 J3 m
i=0;% S" s! U7 p, U% z1 ?
TR0=1;
* V# l% h. Y/ L* x/ h4 Z% n }
. Z. N0 E" t% P
4 u, d, e. |" ^" r3 z6 k' W; C. H
9 H9 F& G! p0 j0 `. r4 J1 a& e |
|