找回密码
 注册
关于网站域名变更的通知
查看: 366|回复: 3
打印 上一主题 下一主题

用AT89C52采集电压超过3.5v左右显示不正常

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-4 11:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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$ g
9 `6 @- |0 i3 F: B

该用户从未签到

3#
发表于 2019-12-4 15:58 | 只看该作者
你的单片机供电是几V,单片机采样最够只能采集单片机供电的电压

该用户从未签到

4#
发表于 2019-12-4 16:10 | 只看该作者

/ h, F% I7 ^6 \# m5 t* z! s2 e0 p5 A
% V- [+ a0 ]3 a
4 s' v; i9 r* q' ]  |9 ~( `+ v这一句你改为6 x4 Z, q: n# l' E. \+ k6 P
if(i>=5)试试1 ~% t% D6 }8 C' H3 z6 [* o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-15 06:23 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表