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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
如题 电压小的时候可以正常显示电压但是一高了就不行 是哪个参数有问题还是程序有问题,程序如下( ~% a. W" L/ E
#include<reg51.h>
* P% c& p+ K/ Q+ m" o& P #include<intrins.h>5 `/ E  k- J; x& z1 D3 _
#define uchar unsigned char7 M  E7 g( G5 v+ {
sbit  P2_0=P2^0;
* L* T1 \, J7 n7 l$ q- U3 N/ {! q+ q sbit  P2_1=P2^1;                                                          //定义数码管位码端口
" h8 T' _* A# L) S) e& Nsbit  P2_2=P2^2;) ~. |) L5 N. x) e6 M% R+ }
sbit  P2_3=P2^3;0 V% [9 Q6 J2 |4 Y7 O
sbit  OE=P3^0;                                                          //定义ADC0808端口" H( ]. `4 M4 V3 p# k
sbit  EOC=P3^1;
5 F4 Y/ w& ~+ e. c sbit  ST=P3^2;
& M5 r- c$ O5 g4 n sbit  P3_4=P3^4;5 P3 I" {/ w6 ]1 y4 V. l! s1 j. j# b
sbit  P3_5=P3^5;
8 |8 X2 h4 H, S; G0 q' r& ] sbit  P3_6=P3^6;
8 j6 }* R" B' I- O: ? uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个4 c+ ?, V0 y: @* H1 O" g
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9十个段码/段码; I$ \: k' E0 q* q0 N* F4 H& \7 V
uchar volt_data;$ I$ }6 Y+ b1 @2 Y8 c
void init();! @9 q5 P8 X; i1 L6 {( D
uchar i;                                                                                ! z/ @' G  J* n; w
//*********************************" {- N0 }) S. k$ k
//延时子程序
, B% e0 O; |7 \( P2 P//*********************************, D4 u' @, t! R  G" k/ j0 E7 H
void delay(uchar z)8 z8 q  I4 \, a
{# p& g8 F% o* M+ L
         uchar x,y;
1 H- q4 d% V( ]         for(x=z;x>0;x--)
0 ~1 Y, S( q% N' q% c                 for(y=110;y>0;y--);
# {5 Y' r: w9 A: [/ B }
" ~) v6 m: I3 [+ ` //*********************************
7 z& h& }$ F' ?) h% U0 d4 w1 { //将AD转换输出的数据转换成相应的
/ x5 D9 D, D& y//电压值并且显示出来
4 S2 c7 P' S" `; p. Q//*********************************5 e0 ?; J  ~6 o1 k
void convert(uchar volt_data)
& d2 W# T) H- N; I% W1 I, X3 z3 m' n4 r {5 I1 V1 H' {6 v9 ^* J
    P0=table1[volt_data*196/10000];           //AD转换的个位的电压值
! O# H# M& [7 u8 B   P2_0=1;        
( E+ ^* P2 z5 g# D. [  `    delay(2);* g1 r4 Y% T8 [  N" v5 O
    P2_0=0;$ f, z3 v! R5 ~. ?4 T
    P0=tab[volt_data*196/1000%10];, y( y! Y* C4 L+ T4 o5 n
    P2_1=1;     //显示小数点的后的第一位
. N6 e( a4 Y2 U; e& [   delay(2);
8 N# r; o+ _0 q2 l    P2_1=0;3 e/ Y/ n4 d5 p( H7 P
         P0=tab[volt_data*196/100%10];                            ' u# X5 R1 i4 Y/ l. _% F" ]  `
     P2_2=1;            //显示小数点的后的第二位  O- w" ^/ M1 j% _1 Z0 Z/ w
    delay(2);
6 {% i' _" B- w, C; @% O     P2_2=0;
+ i6 }7 ?% r8 P           P0=tab[volt_data*196/10%10];
+ C. j, p* z3 ]& |: v! s      P2_3=1;    //显示小数点的后的第二位
# v7 L( @8 g( ^) d- z# `/ c, n     delay(2);% I& n, r: G5 x7 T* P0 W0 j
           P2_3=0;* a. t/ O" s/ |% c
}- x' w% y* k8 h% D# B1 z9 {
void main()9 L& U. d. g7 f# q3 }) C1 m
{
+ Y8 E( i; w% p; d" ]* p8 y8 F7 D   uchar volt_data;" U% Z) Q! [2 j) F* o' `
   init();//初始化子程序; S/ a  p" p1 L
  while(1)
1 T9 }. [6 X! ]* X         {8 g$ d$ V1 L- }7 N
                         IF(i==5)& ^3 `/ c$ s2 i
                                 {
2 L9 |+ _; ?3 U- V( C                                 i=0;2 h+ f, v6 j% ~2 {1 Z
                             ST=0;
, H3 H6 S' u; t) i9 m& V4 }                             _nop_();
5 Y, S5 `. c' K8 w4 Z                             ST=1;3 r1 r7 Y0 W0 }8 f
                             _nop_();
; g' q+ g: k7 m+ W$ e                             ST=0;                                                                  //启动AD转换$ l* X. [, S4 L: s( I
                                 if(EOC==0)                                                  //等待转换结束
+ D% M# |. ^; {: h& o/ y  l                                    delay(2);4 P0 m) g% D) a# ^3 `/ o
                                     while(EOC==0);
' k: z7 x2 V2 W6 q- S! c( P3 g3 d                                    OE=1;                                                                //允许输出; N$ _% |  k0 T9 H' ~7 Q
                                   volt_data=P1;        
$ P1 R/ f! T! _: k                                   convert(volt_data);     //调用数据处理子程序
. C0 B' c4 F) t1 @) g                  delay(2);                                        //暂存转换结果. `# ^, M' T8 m
                                   OE=0;                                                                //关闭输出
' f9 r' ~5 J' k+ j' @6 A                                  }. s- a0 [& W; j2 |
         }
+ f5 |1 l: S  ?2 ]3 R$ Y }
* o+ f- _$ p3 Z' O/ U. }+ mvoid time0_int(void) interrupt 1
1 x) I! c8 z; i' o' o {
3 N# L* V& ~0 {( R3 K         TH0=(65536-1000)/256;  2 V9 ?3 c) P0 w9 k! @9 l
     TL0=(65536-1000)%256;
& ^6 w& [% S0 z     i++;+ c0 ^$ ~4 R8 X5 s2 j
}
" F% I0 H1 ~; c void init()( r) R( f  F- A: F" j
{        0 K' _5 d" c' `- e. ?9 S
   P3_4=1;                                                                //选择通道3
, d; Q: v4 H& k# I+ x   P3_5=1;& F; Y8 d" r. @- e
   P3_6=0;
9 ]7 ^! [; \- x. {! V1 ]+ m   TMOD=0x01;7 Z* {8 X, t# D5 \  Y6 A2 {# @. d
   TH0=(65536-1000)/256;  ' O' Z% W2 I5 W# P4 {4 T7 s+ k
   TL0=(65536-1000)%256;
* M; U4 z7 ?% V  _   EA=1;ET0=1;$ ^" s1 ?9 b" |0 u6 M
   i=0;
4 B) U4 u  s0 D   TR0=1;
# s) u. A, `# [6 o. g }2 [) @! d& C( @. o
+ N1 W  j2 X7 A5 s. Y

* {, p/ o$ r% ?( W8 X( J

该用户从未签到

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

该用户从未签到

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

2 N8 L8 l& v' W  P, [0 o- S: T7 M+ h# L$ u. f' L
1 Y7 U0 N+ Z# ~- u
这一句你改为
8 C) X) t0 f" V, o& D! pif(i>=5)试试
0 T6 O1 N3 v) M4 L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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