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

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

[复制链接]

该用户从未签到

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

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 D
6 T7 ~5 D4 ]3 c, ~6 i7 @1 T6 I8 e* x

该用户从未签到

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

该用户从未签到

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

+ Y$ R3 I8 d. {7 \* r* {; x4 L& B$ C4 `5 h3 V0 H% ~. U& I2 |
3 @/ j2 K3 p; `' A9 u5 B
这一句你改为) K/ y" I1 \& p  W+ I
if(i>=5)试试
5 ?+ z4 Q% l* k. \+ M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 18:23 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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