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

请教关于ADC0809转换程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请教关于ADC0809转换程序
3 T! W9 R" q0 ]. {, x' k7 A- r9 _- }+ K: F0 y( O! @9 c
这个是ADC0809转换及显示程序,我想问AD_DATA[0]-AD_DATA[3]是十进制的吗?3 s4 x( L' Y. C- e
#include <reg52.h>
" i% L; c6 h6 |#define uint unsigned int
( q; Z" |8 {- S# B$ f#define uchar unsigned char3 M* X9 g- `' ?) g! S  h
- e, y- K; l( R3 |2 O  |
uchar code LEDData[]=
  r9 z" X* S3 W. G- u& s{
! }1 m. s* e  S$ ]         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f( _4 ?! X( R- N* R6 U! c" |
};# X! m  R. r3 F# R1 g/ M: O( S
sbit OE  = P1^4;
8 s  z* x8 m$ A) d* x5 Y) N% F# N. `  Fsbit EOC = P1^5;2 v! a$ ~  k: w& `! [+ l
sbit ST  = P1^6;
% y7 k, \" y+ p7 ~  K1 \' Tsbit CLK = P1^3;
& S# {: ]# |7 |4 Puchar AD_DATA[5]; 6 e1 _6 i3 B8 |' [
int i;
; i& J+ M/ q( G" ?1 e( g! uvoid DelayMS(uint ms)
0 x: C) T1 a! z1 K9 {& d{7 a; o" E4 y- C
         uchar i;# v# m1 z' s- E0 N1 ~3 G& y4 h9 _
        while(ms--)
# ~! a( x! n: W5 d# M$ F; \        {
4 O+ n5 ^- _' Z8 c                 for(i=0;i<120;i++);4 l# g9 D7 T' _
        }
! W0 w  s# i: n( |2 n, T}: C$ z2 o! s4 }$ V( {4 L

4 G, c9 C' `) I' |! B5 |1 Zvoid Display_Result(uchar d)
1 d$ S3 P9 Y, V$ G% G* h# b' }{2 W8 n" y# Q6 p- L/ M  G5 G
  for(i=0;i<100;i++)1 ]6 I! ?& ]0 ^$ l; ?  q& N
  {: q" P* C. Y# H: O3 a) U

# g8 j! x. s8 {5 B  Y. J         P2 = 0xf7;
( a( q5 P$ A. f' \- _' m- c2 [        P0 = LEDData[d%10];8 p; k* c- J/ ~' c0 ^
        DelayMS(5);
6 x! E  F# P. b- l- H6 p        P2 = 0xfb;
9 p- `* J! [0 ?: r% l  n8 i        P0 = LEDData[d%100/10];
  c! l- X# z7 D3 q. F5 ~1 ]        DelayMS(5);
: u* ^; B8 U* z0 D9 `0 o        P2 = 0xfd;
4 w8 A) U+ e% {9 z! Q" R0 b& D        P0 = LEDData[d/100];
- Q6 E5 l: l, z+ U" z6 G' o9 V        DelayMS(5);
% }/ T1 a$ R9 o# L' w- I% j5 {9 H5 s( z* f  }
# o( t  k& H9 F# c}+ M4 F8 n3 m9 W4 Y" k' T
7 k; M9 {: G( m( S
void main(). K& m, c: U: O( q! i/ q) S
{
0 b4 e: ?" a; A4 s/ T) J7 z2 K4 o         TMOD = 0x02;, G1 f3 B+ z! f9 o1 G+ ]
        TH0  = 0x14;
" y5 e1 y' D" o$ f4 }        TL0  = 0x00;9 `+ l+ P1 i  U2 S; e
        IE   = 0x82;
/ [+ f) u4 V% i4 X. n& K! i  Y        TR0  = 1;  U5 |4 {% M7 w$ o# G
          G% [+ a- f, }. W1 X$ m
         while(1)
0 t! Z' h/ ]2 H" j! ~+ i# ~# A2 m         {  $ s  ~& K0 A( I
                P1   = 0x7c;
1 `; A8 L) d% }; @2 n0 ^- I6 e) O                 ST = 0;
7 Y6 w) G+ a  w% E5 F                ST = 1;
, U5 S2 N! Q$ d- i6 c                ST = 0;7 e; L7 ~6 ^5 C+ g' g6 f) Z& T
                while(EOC == 0);
4 z( [& O2 L' B! R; ~; ?, M                OE = 1;
/ P. V) R% ^: ?, D                AD_DATA[0]=P3;( r: e; A! A* }9 C8 C
                Display_Result(AD_DATA[0]);' V- B6 x: ^. I% z% q* m5 f
                OE = 0;
7 _. i1 b1 v' `7 s! f                   DelayMS(500);* E1 b( S. ~$ h/ {0 v" j

" B* W% ~! m0 R" u# B& L( U                P1   = 0x7b;
$ l2 Y' L8 I& J" r$ q9 x7 w                 ST = 0;
1 `* _: E& r, I  Z                ST = 1;
+ I. u* D( g; }8 H8 f! ~                ST = 0;
8 Y; W. `2 R9 y7 c" H, Q) I$ z                while(EOC == 0);' c5 e+ G/ H( L8 I9 ^3 Y. }! F7 z
                OE = 1;" M) y$ W. Z& b4 ~- D2 \7 y# P
            AD_DATA[1]=P3;
7 Z, T0 h' ]/ {& L% x/ C                Display_Result(AD_DATA[1]);
" u8 z3 J+ z0 s- z) e& F1 h" T                OE = 0;: t+ ^& T, b( i: w" Y
                   DelayMS(500);
1 r% {8 I1 a( Z" x1 F! j  O$ O) w7 s$ G( S. d" \: R# Z
                P1   = 0x7a;
& z" m  H+ C3 n1 Z: W; `                 ST = 0;9 D1 x6 m% q. o* F& h7 i
                ST = 1;- d5 j+ R3 x4 A8 Y
                ST = 0;0 P1 t! e# z2 K! H3 u
                while(EOC == 0);
( V8 d/ b+ F( d                OE = 1;; j1 p% ]8 _: v3 f
                AD_DATA[2]=P3;
  I) P/ P$ p8 s4 G                Display_Result(AD_DATA[2]);
, u/ C7 R6 t8 c: @9 n! i                OE = 0;
( i/ N- K; O7 M# F3 B                   DelayMS(500);! l( K8 k& z9 Z) G9 O% s0 q; ^
# f2 t1 ?5 w7 b9 @
                P1   = 0x79;6 t; _1 S+ v; ~% y; f' F
                 ST = 0;
# w6 D& I2 C0 k& m) x                ST = 1;
# F, G1 E% y: B, M                ST = 0;5 v. b) Z! ]" R+ f/ B
                while(EOC == 0);
1 X8 I4 e- v9 h/ ?2 k5 ]                OE = 1;
" d; i/ W1 \; H                AD_DATA[3]=P3;
$ f. R- h8 L% h9 i, @# ~                Display_Result(AD_DATA[3]);
% W7 ]* X1 b! R5 I) i3 @4 k                OE = 0;
: a% D! L: g9 S% Z                   DelayMS(500);+ }( C1 I3 R$ P0 v; W- o

( [* J, E3 G9 `* [8 {            P1 = 0x78;
8 j5 P$ p; T0 g2 ^                 ST = 0;
* X' V- {: }) x( e                ST = 1;
9 @" L4 V: N' l% g                ST = 0;
: f- m( ~# _! N                while(EOC == 0);
+ s) T7 E4 s, Z5 D2 f                OE = 1;
0 e, l0 l/ q& F2 J2 A, K( Y2 j2 o" v                AD_DATA[4]=P3;
8 r3 ?8 S9 o# c                Display_Result(AD_DATA[4]);
; u' P" e4 l# z, D6 [; N' j- v                OE = 0;
  y  [7 x+ ^2 f2 v                   DelayMS(500);8 R. K7 @7 V; k: e& L
            z  e- |, @9 w
          }+ p8 ^  E" t  }

' F, y  h, o) G          # P& y; ^3 Z: b

! Z" a6 g% b% a$ Y) Z}0 _8 C9 Y) d8 l7 H# l
# V: B$ y! A7 {' s  b
void timer0_INT() interrupt 1
; O; @, M. Q1 J1 \5 i; P{. X  ]8 m) ]! Y3 D2 `( I# T
         CLK = !CLK;4 \* ^& m4 f2 k+ d3 M2 S. Z
}
' |  U" n) J6 \' d! F6 b& U

该用户从未签到

2#
发表于 2019-4-16 09:36 | 只看该作者
我可以肯定的告诉你,肯定是16进制!
- n7 P9 ?2 B  l& [为什么呢?首先,单片机是以二进制形式才能识别才能运行的,其内部数据如RAM,ROM都是以十六进制进行存储的。编译器会把我们编写的所有程序都以十六进制形式存在ROM中,包括你问的问题。
6 w" f' T0 j, J* z0 ^! l这时你可能有疑惑了,举个例子:P0 = LEDData[d/100];这里的100是十进制,为什么d(十六进制)/100(十进制),这样除能行的通?为什么能行的通呢?# m& O0 f8 k9 o+ i% X: k
编译程序的时候编译器会自动把100变为十六进制,这里d/100就变为十六进制除以十六进制,而不是十六进制除以十进制。所以我们不需要把100变为十六进制再相除!!
8 l$ ~; B/ }* W: Q. ]/ w明白不?

点评

大神,那我想要把它和一个十进制的数进行比较怎么办?  详情 回复 发表于 2019-4-16 09:43

该用户从未签到

3#
 楼主| 发表于 2019-4-16 09:43 | 只看该作者
helendcany 发表于 2019-4-16 09:363 R2 V3 `/ _" _; s1 y
我可以肯定的告诉你,肯定是16进制!
) q# X9 D& p: _1 s0 r* Z: s为什么呢?首先,单片机是以二进制形式才能识别才能运行的,其内部数 ...

- L3 ]7 ]( ]: _) L1 x- {: a. G大神,那我想要把它和一个十进制的数进行比较怎么办?0 ?5 {  o' N  H4 w

点评

一样的,比如if(AD_DATA[0]==60)和(AD_DATA[0]==0x3c)这2种写法都是一样的  详情 回复 发表于 2019-4-16 09:59

该用户从未签到

4#
发表于 2019-4-16 09:59 | 只看该作者
罗斯 发表于 2019-4-16 09:430 Q( e* T# f( Q/ f5 T
大神,那我想要把它和一个十进制的数进行比较怎么办?
% K+ t( F- C/ Z
一样的,比如if(AD_DATA[0]==60)和(AD_DATA[0]==0x3c)这2种写法都是一样的
3 b/ e& Q# U) H: P3 Z( c* g& v

点评

不对呀,我下面的程序不论e是什么值,都只执行 motor_forever(); e=0x96; //150 if(AD_DATA[0]>e) motor_appoint(); else mo  详情 回复 发表于 2019-4-16 10:14

该用户从未签到

5#
 楼主| 发表于 2019-4-16 10:14 | 只看该作者
helendcany 发表于 2019-4-16 09:59
2 X- x3 @8 F3 N+ W6 i一样的,比如if(AD_DATA[0]==60)和(AD_DATA[0]==0x3c)这2种写法都是一样的
( `6 b* g1 y/ W& u9 T
不对呀,我下面的程序不论e是什么值,都只执行 motor_forever();3 o$ b  n) N) e
e=0x96; //150
+ f" Y4 ]4 N& uif(AD_DATA[0]>e) 9 p- K0 b9 I$ N
                    motor_appoint();         
$ `6 ?4 T; P5 k# ^        else                                          motor_forever();
: l! m& t: X  r4 u9 N
+ Z6 E  ]1 b. X6 Y  ^+ U9 j

点评

你把AD_DATA[0]=0x97;试试  详情 回复 发表于 2019-4-16 10:22

该用户从未签到

6#
发表于 2019-4-16 10:22 | 只看该作者
罗斯 发表于 2019-4-16 10:14
; P2 c3 }' A& y2 n( L) L) e不对呀,我下面的程序不论e是什么值,都只执行 motor_forever();: S( ^5 K4 ~; r
e=0x96; //1502 j2 b. b8 y+ x) y
if(AD_DATA[0]>e)
/ m* k7 t4 n3 C1 o
你把AD_DATA[0]=0x97;试试
2 q5 J% J0 [- w$ b& g

点评

果然可以了,为什么呢?  详情 回复 发表于 2019-4-16 10:37

该用户从未签到

7#
 楼主| 发表于 2019-4-16 10:37 | 只看该作者
helendcany 发表于 2019-4-16 10:22* F" b& y% d4 Y: l  A1 c' }
你把AD_DATA[0]=0x97;试试

: L  j8 Y4 X2 Q果然可以了,为什么呢?
% K. p' B$ t/ D- I5 h+ x2 z

点评

AD_DATA[0]有可能为0  详情 回复 发表于 2019-4-16 10:44

该用户从未签到

8#
发表于 2019-4-16 10:44 | 只看该作者
罗斯 发表于 2019-4-16 10:378 g7 m* G  ^6 Z/ T+ ~2 H
果然可以了,为什么呢?

# G' @7 M+ g) R# `3 X; dAD_DATA[0]有可能为0. F8 N  Q, t) w: u4 p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-23 04:13 , Processed in 0.093750 second(s), 32 queries , Gzip On.

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

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

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