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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

该用户从未签到

4#
发表于 2019-12-4 16:10 | 只看该作者
5 U- t, c7 _4 p
) j5 q6 s2 e. F

4 ^; P3 v3 e* e: d- d这一句你改为
$ e& y+ b* @# E' wif(i>=5)试试
" N/ `8 X; ?- `  c# c3 `
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-25 03:23 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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