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

ADC0809程序和原理图中文资料 51单片机例程实测可用

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ADC0809程序和原理图中文资料 51单片机例程实测可用 & R# t2 P) [; |" ^" p/ ~

# i3 u% @( y, q2 Z1 j, `, H6 j
( Y) d8 X9 ?7 h; T9 f) n2 W0 ]

9 h( k& X2 N" ]8 l

% Y; a; p, v* Sadc0809中文资料:
3 ^8 {7 I0 V! H; }  i6 F4 f0 c, e# _ 7 O1 s  L; `; o9 `1 a) p
- ]8 R0 V( x0 _5 o
本次单片机实验的adc0809原理图
0 |' u  X# t7 w
- Z0 n( S& _+ |; S  C' u2 P& J/ A+ b, b! f- p
adc0809模块pcb:
' }% G( d+ c) p3 h6 K
% n% G9 \6 e) X! `3 S* q2 l. l( |6 U  D1 n; i5 g9 K$ n
如果用例程测试时需要注意以下:
一、先调试单片机控制系统,也就是先不接模块,1602液晶会显示:
Xingxiangrong
AD=255  VIN=4.92v
能这样显示后证明单片机控制系统没有问题,然后再接入AD模块
二、插针

5 }0 X. s/ i; d6 c  ^) m$ m3 |# x+ `
J7短路帽套上,使模块上面的可调电位器可调端和IN3接通
2 N- L( m  \$ Y$ L6 q$ j6 m/ O
J3 J4用短路帽把中间和VCC插上,使AB1
J5用短路帽把中间和GND插上,使C0,选择通道IN3;

$ S8 i# a8 S' J* u' U& ^( x & w! l+ S, L4 s/ O- d+ ?

. o1 c3 {: g6 k& |/ _( [1 ^源程序:
. |% s2 @: U) G/ F8 q# o  @
//功能:ADC0809模块测试,读取IN3口的模拟电
3 P* Z/ X$ h8 W  v, O//编译环境: KEIL UVISION2, p' j+ X6 I8 i1 J
//单片机晶振:12M  单片机型号AT89S52& v; _( s6 }, p( P+ U* ?
//单片机晶振: 无特殊要求" a9 l- G( f' ?/ v& Q
//作者:兴向荣电子元件店  p) v4 ^  F; m, }; {
//日期:2013.06.20
$ l& a5 j& O4 B$ w8 g9 h//功能:
5 b" v& Z- a8 n3 z: ?8 V/ d) _, ^0 ]& q% X: p1 \8 `2 g3 K0 l
' l- \6 J7 g- P$ X- g# E: G
#include <reg52.h>; Q6 e0 x5 Q+ Z5 M& \; ~1 [+ d  A
#include <intrins.h>
: h8 o- P3 I' n! `  ]
1 E' {# E4 v( M4 @& e
4 t* L* i) A0 o& D
#define uchar unsigned char
! u6 P* q( @5 A" ^; |#define uint  unsigned int
  l3 c; C- m* [
2 {2 G- H# }& \* M+ x3 t
* y, t! B' n$ W) J
0 U3 O9 a0 T5 B1 [. Y

+ l0 O/ L. A9 k0 }$ H2 [  [// adc0809模块接线1 l8 [; `: j; d+ m9 M
#define uchar unsigned char
9 y! Y% p; W$ Y' r5 Tsbit STR=P1^0; //单片机P1.0接模块STR引脚, 启动转换信号4 X" V3 L9 f& M% m1 k. x" N; X) G
sbit EOC=P1^1; //单片机P1.1接模块EOC, 转换结束信号,高电平有效3 u9 z# [# |8 W8 f! Y6 Y$ _1 C$ g( G
sbit OE=P1^2; //单片机P1.2接模块OE,输出允许信号,高电平有效* V' i2 V/ S8 G. E# o3 h) ]
sbit CLK=P1^3; //单片机P1.3接CLK ,ADC0809时钟,输入50-800KHZ的频率
7 v5 D( a" i0 r3 [9 ^0 P4 C               //一般选用500K9 D  j2 y. S! C
#define adc0809_data  P3// ADC0809模块的D0-D7分别接P3.0-P3.75 G, b7 A  A# W- f) O
/*地址选择 A 接H  
5 Z7 |4 `* j6 m2 g& j# T1 W- s2 O           B 接H
  i7 }& ?7 m& ]  c1 J8 y. g- o           C 接L
8 i% Z7 ~8 n8 i5 V, M3 Q选择通到IN3,当然也可以通过软件设置地址0 A; n: }4 I  T0 }5 B
     REF+ 接VCC
- t0 f0 s- T7 _( g* S     REF- 接GND
3 ]' D5 L- s' U9 ]9 }7 P这样 AD=256*(VIN-(VREF-))/(VREF+)-(VREF-). f7 x4 t7 L6 L, R+ r
     (VREF+)=5V;
+ }8 Z5 W7 W; `; i6 @. `1 N; G     (VREF-)=0V;) J0 H+ z1 E) M" U' B
     AD=256*VIN/51 x, y; x, P/ z- Q! C
所以IN3口的电压VIN=AD*5/256;
+ e9 Y. ]. J" E; x5 o( F1 G*/
( e$ M8 e5 ]$ _3 Q4 Nuchar AD_DATA[1]; //保存IN0通道转换后的数据, J0 F( E- f# s9 ]* v
uint  addata2;) p( f* u. X/ S3 s/ _
//==============LCD1602接口连接方法=====================
2 I8 m: O+ S: w9 J# i9 j5 y, h/*------------------------------------------------------ k! X$ e9 X, q  o: i) i9 @
       |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3    |
9 h) E+ d4 ]  D' Q* M6 c' n       |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4    |" B' C8 d4 R. x1 v
       |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2    |
# V4 O- R  w  ]9 J) E       |DB3-----P0.3 | DB7-----P0.7 | ! j( G. Z% k7 a7 q6 n1 f+ ^; M
    ---------------------------------------------------*/! L: o* N: J9 q6 d
//================================================*/              
6 x$ d* o/ U! C' S" z#define LCM_Data     P0    //LCD1602数据接口
2 e9 ~' |* ^4 w2 q8 L* M+ w#define Busy         0x80   //用于检测LCM状态字中的Busy标识
: E5 `; N% f* T4 i" }' A8 d/ asbit    LCM_RW     = P2^3;  //读写控制输入端,LCD1602的第五脚
! L6 p7 f! r" \: M5 E) G6 jsbit    LCM_RS     = P2^4;  //寄存器选择输入端,LCD1602的第四脚3 h  R0 o' z& Z; D2 T# f& q
sbit    LCM_E      = P2^2;  //使能信号输入端,LCD1602的第6脚& d+ c& I( a6 x* p, H

; t  S* m. r+ b) S# y# }- x

. \- U* U, a4 W* [7 c+ l4 c' }
/ C/ S# I, p. E7 r% y

4 A1 F% W5 o* _2 U: f0 o% |# P7 I7 d+ ?
% m- c$ ]3 k; C! A$ G

% B# K$ c) E: Q$ O, Z1 l( _% |

  e/ j1 J) p) h! h( X) q6 C, {3 d0 E* j% g
# y1 s6 v0 n* u) Z
//**************函数声明***************************************
8 ^6 [( I/ R/ ?void    WriteDataLCM                (uchar WDLCM);//LCD模块写数据
& Z$ Y4 @; v# ivoid    WriteCommandLCM        (uchar WCLCM,BuysC); //LCD模块写指令
+ @. d" e  M# W. X- \uchar   ReadStatusLCM(void);//读LCD模块的忙标
4 \& n! ^4 u3 K: R8 I1 ovoid    DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符1 c( r0 U: y5 ^" z( ~* r
void    LCMInit(void);//LCD初始$ X1 H5 B3 `$ E: c
void    delayms(uint ms);//1MS基准延时程序- n! I) _8 C8 K7 P8 R2 V; L: i' n
void    delay(uchar i); //延时函数2; H" g9 V2 m" C2 s
void    DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData);) v/ Q6 T# t6 w; ]
void   judge_xianshi(void);//显示处理程序
  s) Q( \6 _) G! A; `7 w3 u/ L
6 S+ `. e3 c% p2 f/ Q
+ Y( r" g9 y6 ?$ y: t& y
void init();//系统初始化设置
. o8 l& V; ~& \/ g9 Tvoid AD();//读取AD数据
6 g! O: B% r' L
, w# |; w8 Q: ]1 j, Q9 Y$ u' o0 B5 R

- c, S; F/ H7 @# O" |* V) H. h; muchar flag1;3 E3 p8 [3 }$ q
//***********************主程序******************************1 f; G1 }  @& V5 K- J* k. h
main()   1 i. {- q- G7 n/ ]
{   
& w( q) Q; E2 ?, b   init();//系统初始化设置. M0 M  R/ l- \* j% R6 J) u  H3 q7 v
   LCMInit();9 ?6 \; W& Y; T" z% t! A8 h+ s% }$ K/ b
   while(1)
- O, v0 d4 N0 B" a, v5 x- k   {
& o" J. S/ Y$ O4 F6 H8 N5 K  |       AD();
& }/ [7 D1 ~! B  I, C/ q2 j2 Q+ f       judge_xianshi();$ o# y! J6 [  l( u3 k% Q6 p
       delayms(100);
, F# Y9 C5 R! s( {& O/ ~! h' S9 W       ( t3 W# p3 P' k& n9 |$ ^
   }
0 q! m; s' G* |
6 Z1 K- m! j' Y) z: {

  Y' A3 U" h2 w. N+ s) M}: a7 o1 t. z8 U2 S* h
/*********
/ d! |' I0 R, e' G8 v* ?系统初始化7 Y0 P" [4 A+ C" r& P1 U
***********/ 6 ?  V9 P3 p# W2 [* |) e# Q2 f: {4 D; B
void init()
/ @; R9 s- W1 @) q{  
# a' ], ?) y( v# m6 j4 U; I  EA=1; //开总中断
( C0 x, Z+ j1 o" a6 D  TMOD=0x02; //设定定时器 T0工作方式
3 D; I; {# N1 E- R* t, ?: |* |0 B  TH0=216; //利用T0中断产生CLK信号
$ _6 q8 ^4 _- D! @+ O+ a# i1 N  TL0=216;  - v# E7 _1 L+ r$ i0 f& Q( \
  TR0=1; //启动定时器T0
" S- l1 z4 d% n4 U" q  ET0=1;
& H/ o# ]: W% w% ]  STR=0; % H$ b8 b% R: F; z
  OE=0; . a& Z4 b9 Q" P% Z+ Q1 h+ e* ]
8 _! n4 z8 }2 `7 Q( ~% ^( J+ Y
}  
& R" R! R3 T: G+ M# _! lvoid   judge_xianshi()7 T. T5 n) u( M$ Z) c
{. c# O% b, {, G) `8 X
  addata2=AD_DATA[0]*100;//把数据扩大100,为下面求取小数位后2位做准备* m7 r+ e: Q! `
  DisplayListChar(0,1,0, "xingxiangrong");//在液晶的第一行显示字符"XINGXIANGR"
* q1 p+ ~& _0 l3 f% v; E- n* O7 I  DisplayListChar(1,0,0, "AD="); //在液晶的第二行第0位开始显示"AD="
# k8 H2 D. l3 o' k# t0 y9 t  DisplayOneChar( 1, 3, AD_DATA[0]/100+0x30); //显示AD数据的百位
2 t9 l, R" \7 X+ F  DisplayOneChar( 1, 4, AD_DATA[0]/10%10+0x30);//显示AD数据的十位
& s2 s$ n5 f3 V) ~- _  DisplayOneChar( 1, 5, AD_DATA[0]%10+0x30);//显示AD数据的各位# H* I0 U" G& m$ q9 W$ O' ?+ O
  DisplayListChar(1,7,0, "Vin="); //在液晶的第二行第8位开始显示"Vin="
+ {3 {, U7 b3 X; {+ z1 T/ ^//根据VIN=AD*5/256,求取IN3通到输入的电压
- c# W, y; l6 B. e  DisplayOneChar( 1, 11, AD_DATA[0]/51+0x30);//显示输入电压的整数位7 m  |+ |. R/ u  A; b
  DisplayListChar(1,12,0, ".");//显示小数点" W1 \4 `2 y# k0 e5 g: {& u
  DisplayOneChar( 1, 13, addata2/51/10%10+0x30);//显示输入电压小数后1位$ c3 k5 s/ c' q& d: }
  DisplayOneChar( 1, 14, addata2/51%10+0x30);//显示输入电压小树后2位
; ^  f) W' f5 ], o  N  DisplayListChar(1,15,0, "V");$ r5 T' z: S* e- Q
}$ w  N4 k  }  x& `  q
/***********AD6 T- v2 w+ |* x# y; ^4 p% i
转换函数, }5 \" S; Q( @* @4 h3 K/ i
**********/ 4 f$ k' _- i# B- ?2 h7 K5 z
void AD()
& y9 M5 P; u8 y2 R6 X$ c) l{ 1 a; F- ?4 k3 U5 j. g/ S, V. z
   STR=0; : X, n! s, Q& K) n
   //ADDR这样如果不是通道0,可以在这边加一条其他地址的程序 , [, p, V; y; d9 Q0 Q5 e( A2 |
   delay(10);  
3 h  A% l/ O7 u5 ~; ^2 E9 U   STR=1; //启动AD转换: y( q: ?( H3 e; w$ Z
   delay(10); . j* ~2 Q9 ^) r  l; Q* f
   STR=0;  " {) }* @" a1 b1 H' l% `
   while(0==EOC);//等待转换结束
, L+ h* A% `0 P1 r9 w6 N   OE=1;  
& v' F( p, N: h( f# H   AD_DATA[0]=adc0809_data; //读取AD数据,数据范围为0-255: a! [6 H0 l( p' Y  M! h
   OE=0;  4 B5 s9 Z6 q, Y3 O- G

  u( ?( K4 m: \8 A8 Z$ I" D* R

5 u0 {9 j& F+ }$ e9 p! M: T9 B& O$ r. M; Y3 p  q+ [, }

' j+ B! h( U+ p/ e: O…………限于本文篇幅 余下代码请下载附件…………
+ B+ [$ Y$ x0 D6 n" m8 c5 d3 x, R9 Z+ f8 `& ~2 [+ f6 j# D8 B+ Y) y, ^
: v! x; Q# W, t- q" E8 R
完整的中文资料和程序等下载:# ~3 f! j. m6 \  v/ ^, }
游客,如果您要查看本帖隐藏内容请回复

- p  b% H4 E  r9 i5 V
* \. y9 N% A! ~" Q) W. v
5 z" D; q# ]* R+ J1 U

该用户从未签到

2#
发表于 2019-1-14 15:50 | 只看该作者
不错,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-6 20:41 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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