|
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 |
|