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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
如题 电压小的时候可以正常显示电压但是一高了就不行 是哪个参数有问题还是程序有问题,程序如下
+ ?3 O: Q* E; O3 D/ ^#include<reg51.h>5 F* v# k3 k2 V$ o
#include<intrins.h>; g/ w: u. A4 d
#define uchar unsigned char
4 T6 W6 W6 w4 c; ~3 [  b4 v& r! D sbit  P2_0=P2^0;0 ]" }( o( P: i; u6 P
sbit  P2_1=P2^1;                                                          //定义数码管位码端口+ r+ e, w: s2 m& b& Z0 H) E# i
sbit  P2_2=P2^2;( y2 Y7 c# u4 i& [( f( ?
sbit  P2_3=P2^3;% i0 x) j+ ?- |( x' D
sbit  OE=P3^0;                                                          //定义ADC0808端口. A- H" d1 f7 S& ^3 y
sbit  EOC=P3^1;
3 M  w: I# a$ H3 _% N, z3 W- Z sbit  ST=P3^2;
% i: F2 L* l2 B. T' X* u sbit  P3_4=P3^4;
* o! n5 G+ b% w8 x1 n/ p sbit  P3_5=P3^5;: q( o! X9 [8 D2 D, x$ ~
sbit  P3_6=P3^6;
2 e7 y, B* B8 i& T+ @, i$ c uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个1 _. c1 W7 |, r% A$ C
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9十个段码/段码; ]- m% Y0 J' ]1 U7 T
uchar volt_data;! T( l! B8 K' r- C$ @
void init();7 E: Z5 ~2 z& Z" y; e' \
uchar i;                                                                                
# o. x6 @2 Q* a4 {1 q: }8 i8 W //*********************************
1 E$ g8 R: q4 H5 T$ O" q2 [ //延时子程序: G- J, z2 d& r0 W
//*********************************$ i6 P& R0 H7 a) A6 N5 }% s1 S1 x/ H
void delay(uchar z)6 ~, X- m) E( u0 ?2 x4 Q; B
{
1 k! _- t2 e  t( _4 Z# @, C1 C$ |         uchar x,y;
0 D; T, i& K, u+ Y  Q         for(x=z;x>0;x--)
1 |2 \8 u% e  j1 b+ Z) ?                 for(y=110;y>0;y--);
! [7 t4 b) J  C7 z }. z! ]. K2 b; k) R1 j0 m
//*********************************
  Y, v. N# _/ C' X //将AD转换输出的数据转换成相应的
3 l1 U/ J, P+ `0 M* w//电压值并且显示出来
' u% k6 y, }& U0 S" M& H& Y//*********************************, I5 S% h3 L4 P( D) g: k2 \
void convert(uchar volt_data)
, y' G& C/ o/ O6 u5 c/ V6 T {( B  s1 G9 G8 I, g$ q. L& M
    P0=table1[volt_data*196/10000];           //AD转换的个位的电压值
# r7 m6 C3 d; u& B& D7 ^   P2_0=1;        : v6 ?7 L; p: c9 g
    delay(2);8 K2 }4 A7 t% T' A: x" p
    P2_0=0;
- z! ~2 C5 f" j/ p! T- S    P0=tab[volt_data*196/1000%10];
; K) c  W1 W& p* A2 B) e    P2_1=1;     //显示小数点的后的第一位
" J3 j1 s% F' X7 R+ {! c+ k1 r) {   delay(2);
, Z# {" r/ B& E7 h    P2_1=0;
3 q3 y3 c. F, R, C! N0 `+ {         P0=tab[volt_data*196/100%10];                           
  X! g' O6 V+ o4 u     P2_2=1;            //显示小数点的后的第二位. G7 \# {9 |  L  @, I: M# f9 s
    delay(2);
2 V6 \8 R. I) @" i7 v9 b0 ~7 G     P2_2=0;- n& q' e, `  ?2 W0 B8 ^' H$ l
           P0=tab[volt_data*196/10%10];
. {! V7 X: E; l/ `" C9 z      P2_3=1;    //显示小数点的后的第二位" l! J; |- {- W( X$ `6 o- N* \
     delay(2);
9 q& Y" z( L, W8 h, B8 s           P2_3=0;
! W# h/ g! W9 t }
) q" x) F* B, M) O: h) x* x5 S7 b void main()
8 {0 y8 k' x2 y8 w1 a6 ^# f& l {0 d% Z# x# j/ d/ V/ J
   uchar volt_data;
1 Q, ?, O. z; C' W9 K% F   init();//初始化子程序
* L! G7 H$ h+ a4 r  Q! m  while(1)/ e2 T1 M! F4 }- i9 h) ]5 H6 l
         {
" p' D! }; Z  m; Z9 u                         IF(i==5)" o; O# X% B2 n. P5 x7 T, N
                                 {
, @. c' U8 W/ B                                 i=0;
6 i& ?+ P( S, l# n                             ST=0;
, ^. C1 g% M$ ^) N' D1 U                             _nop_();" s1 h5 g0 Z, M5 u* b0 ^
                             ST=1;# u9 {* o. {( R9 W' x
                             _nop_();
3 _( D/ h$ f* r                             ST=0;                                                                  //启动AD转换
# e1 R+ d, h7 r) e                                 if(EOC==0)                                                  //等待转换结束7 T  C6 M" s" k; x/ d; `
                                    delay(2);+ b' E, q4 G& ]- K9 v1 ?  P8 g  D
                                     while(EOC==0);$ Z% W' f1 H7 o: w' Z, V
                                    OE=1;                                                                //允许输出$ e! @* h. e! u9 b" F; ~
                                   volt_data=P1;        " H4 c  }0 t4 f; P( j
                                   convert(volt_data);     //调用数据处理子程序) G/ Z% J& e5 i% c3 y
                  delay(2);                                        //暂存转换结果
" s; L1 |/ U- ~                                   OE=0;                                                                //关闭输出5 ]& P& i& p# c9 I$ X+ V
                                  }
& f& @7 E  M6 x& P) I         }0 {  C# ^" V( g% G, W7 v+ D; d6 }
}( ]) @7 L% T) L! B$ z  J! _, [
void time0_int(void) interrupt 1) I0 b6 X% b" h2 v3 {+ A  N1 ]
{
# V% B/ W6 S$ p& D, g* P         TH0=(65536-1000)/256;  5 u# N* d- }0 y# d9 I( E2 [
     TL0=(65536-1000)%256;, x% X- Q: L+ ~1 t
     i++;+ p+ v) H) V! z2 X
}# D1 _' F( v  y. y  I
void init()2 i" n0 Q. B) _, d
{        & S- }/ O; j5 X% A: B) n6 `# M( |
   P3_4=1;                                                                //选择通道33 k4 N+ {2 N8 j2 a" Q# [
   P3_5=1;
" ~) w9 }% T- G" x8 O   P3_6=0;; h. g; Z; J/ M, [0 C( S, u
   TMOD=0x01;, S: ~$ F! A. V0 C
   TH0=(65536-1000)/256;  
. n, L9 i. \- m% `% |2 Y$ c   TL0=(65536-1000)%256;  S: |" L3 x1 o: f  E) N8 u) d: T
   EA=1;ET0=1;. c% v( X% i. |9 |
   i=0;6 {: l2 o' t6 L* j
   TR0=1;
- E2 v3 K) e9 N }& {6 ]4 M1 `: U  n; B! B3 `
# X% V  c1 {) I/ y, x0 I
1 Z1 H" L! K. M

该用户从未签到

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

该用户从未签到

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

( U7 R) R2 Z4 U' J' ?' {8 m9 [5 f4 R0 u8 {+ n' Q
! P3 C) A. S* [' I" i7 f
这一句你改为
" E* x2 c- l7 W5 rif(i>=5)试试! o4 \8 H& A4 k9 h, G1 m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 21:01 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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