|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
酸碱度ph传感器 单片机源程序
! C. g @ ^$ _! I, K3 U B9 z1 \3 T, Q/ B: B3 q
; s: n+ o$ s0 q$ x! f+ H分享一个测试酸碱度ph传感器的单片机源程序
$ N; U; _8 `5 Z" n6 b 5 k2 @8 z# y6 }0 i; c
0 ?% l0 j6 m7 R D2 @单片机源程序: | /********************************************************************
8 T' B( g: m6 j2 k9 G 龙戈电子
4 T7 b9 S' M, E( S5 k' o*********************************************************************/
" n* Q: Q: e. I5 V( i" u/ Z" ?#include <reg52.h> //头文件
& L/ f/ H. B1 `9 x( ^0 E#define uchar unsigned char //宏定义无符号字符型% M' j8 B' ^+ v' K* M
#define uint unsigned int //宏定义无符号整型
7 H& d) P1 X+ R9 X& I8 r2 e ^code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟/ @( X4 v5 v, G
uchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端 //位控制码
! z. d1 f1 q. Wsbit ST=P3^0; //A/D启动转换信号( ] W. `( @) q- Z' y% c
sbit OE=P3^1; //数据输出允许信号
2 j; a3 w% H, M- Wsbit EOC=P3^2; //A/D转换结束信号- v3 z2 X( h8 P$ l2 T& P
sbit CLK=P3^3; //时钟脉冲
2 h2 X: c, p8 \% suint z,x,c,v,AD0809, date; //定义数据类型
* C* L& P' l# z' i1 D- g4 e, W/******************************************************************
: c& H1 U7 i$ |: |延时函数
/ |0 M) }; K: g7 W* P2 u******************************************************************/5 A1 s) X, K& u9 e
void delay(uchar t)
6 ~& n- H1 J0 T- S{
4 I! ]! ]( y/ P! D uchar i,j;' k8 H- n. L' h8 }$ r
for(i=0;i<t;i++)# J& m; ?" e5 G" D, \' g+ P+ z
{
' I' |7 d: K& M+ c, O! |$ b! N for(j=13;j>0;j--);
! e2 a" A' ~: x8 q. }3 [ { ;+ T: X% e6 T+ A0 Y, b+ [
}
2 X8 N1 O$ V- \* T4 q }' q8 b2 t5 v9 m/ f9 k
}- n& O, X1 Z1 l/ w: }& J$ S
/**********************************************************************
4 J2 _8 {" {$ U 数码管动态扫描$ w( c0 g( o, [ s8 P8 X E" a4 D
*********************************************************************/$ c \. p9 l& ~. H5 E
void xianshi() //显示函数4 Q" ^" G7 g6 z" _, |6 N5 g
{
: a1 A" n, X. a5 nuint z,x,c,v;$ O2 g( V0 M7 E) U) D
z=date/1000; //求千位- i$ t+ r0 d6 \, d7 ]
x=date%1000/100; //求百位
- I; C! {# R. o; t8 v c=date%100/10; //求十位
+ S2 S" u) y3 h1 ^% _8 H v=date%10; //求个位
9 T9 A+ H( e4 g9 C% e2 W b" q. ?
3 J- o8 M @) M0 W2 r/ o P2=0XFF;! i/ N4 `/ e8 ~) K# t- V+ |( Z
P0=seg7code[z]&0x7f;
. m" E- p& W% x3 y) Q* T, \, R2 q7 A P2=wei[0];
2 ^5 o1 G1 P' u- N; ?1 `. l* S delay(80);
x$ `7 z; T/ R* i W: k P2=0XFF;
x4 q" p7 J/ ]' X' f P0=seg7code[x];* L/ n7 v3 k+ b- z) B
P2=wei[1];5 Z7 v$ A4 j4 `- ~+ q1 k
delay(80);
3 ?7 o) \- v: H: `) h* h P2=0XFF;
' q9 I$ }7 _: M7 b( F" ~ P0=seg7code[c];8 X8 R7 x/ L8 N$ P8 W
P2=wei[2];
+ o6 K; D0 x5 `+ v: T/ I delay(80);! A" O. R; X( @6 Y/ k7 C2 r
P2=0XFF;
! r% U$ [, k( E( U; h! C P0=seg7code[v];( K8 _' [. r2 L( m( s* v- l
P2=wei[3];- c& S2 [. }, }: S2 U
delay(80); + J+ z q2 U4 `( v
P2=0XFF;
! Y% l1 J( L; ?4 u }
- Y# A6 | D9 J- g /*************************************************************************
; l" L0 `& g" {! t) W/ S: a l CLK振荡信号
# t: {! Z/ e8 {" V' Q" {8 \0 _**************************************************************************/
9 v; L0 A z- Q- ]6 D% U( F8 P4 g" ~void timer0( ) interrupt 1 //定时器0工作方式1
! W' V' {1 ` `{( u( h3 H8 H& t8 j: \/ {4 z! c
m0 m& F, q$ k U+ v# ^9 ?8 p, [3 {$ xTH0=(65536-2)/256; //重装计数初值* a. T2 g+ Q+ e/ k1 P9 e
TL0=(65536-2)%256; //重装计数初值% a: g" s6 u. \/ k; ^" Y
CLK=!CLK; //取反
. T% X7 A$ X0 H# f Q5 @6 O/ v; S}
* b# a: l8 E/ ], v
- \2 B) A7 v1 ~8 @: t /*************************************************************************
2 E, e0 M9 W5 m0 g# t! m 主函数
+ {9 B9 s/ U, E8 _**************************************************************************/8 [* ]% p, n: E+ x- p/ a/ C
void main()
$ L# y8 u" W( a) T( ]5 M1 t+ `{ , c( g7 r' G# a
TMOD=0X01; //定时器中断0
7 ^3 o3 C( U# ]+ g7 J- K- o
j5 V3 B( r) C, u* H. `CLK=0; //脉冲信号初始值为04 E0 m& {5 v& E7 s; I; _3 U5 H
TH0=(65536-2)/256; //定时时间高八位初值; Q6 M5 W L/ Q$ T. f5 e, Y% m: h, t
TL0=(65536-2)%256; //定时时间低八位初值
$ F* s9 M% J% r9 |) C9 A. m" K9 L4 jEA=1; //开CPU中断8 [# e2 X7 O+ X$ ]
ET0=1; //开T/C0中断
8 F6 k8 @+ ~, }# W# gTR0=1;
& B; D" H" F1 k while(1) //无限循环
+ f3 A& j' u& l1 K {# @1 G& z& B5 o( S: p" C% l7 y! Z0 A
ST=0; //使采集信号为低
. @4 H9 C6 | m# V: y ST=1; //开始数据转换( @/ ~) R' J2 k2 R( `; u
ST=0; //停止数据转换
7 q" K) S/ f( q7 ]( p/ x+ j( P" h/ Y while(!EOC); //等待数据转换完毕
4 l- p! C5 Y0 t OE=1; //允许数据输出信号
- t) ^! h% [* C6 @' ~, d AD0809=P1; //读取数据: j" S# H5 u* E, p+ Y& X
OE=0; //关闭数据输出允许信号9 F# C% P$ B6 q9 L% M
if(AD0809>=251) //电压显示不能超过5V
% I B: |8 r1 w' q. T AD0809=250;3 |3 c: ]$ z0 `+ C' O
date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值$ x m: v* o- u1 x; x. h
1 w! d8 H% c& N" v" Z' s: N( D
+ ?8 ~" l3 P, i6 I' d9 ?
…………限于本文篇幅 余下代码请从论坛下载附件…………3 n) x0 L1 I( }: e1 n1 Y: e
- ^/ _3 r1 r/ I# c! z/ M3 C( C x' m
|
|