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