|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
酸碱度ph传感器 单片机源程序2 M5 b8 H0 g" ~& N, T
4 f; v7 ?; u+ I, f8 b+ N/ }: ~: M% v3 M+ A8 G
分享一个测试酸碱度ph传感器的单片机源程序
1 s5 S: l+ J* L0 z- z
! v7 g- p' e3 J* o
- @% q; a8 R2 g" l- b4 m0 V+ a单片机源程序: | /********************************************************************
) j7 b' N6 a( X- Y9 ^/ i 龙戈电子- {3 r8 `) j3 n
*********************************************************************/: }5 d( {1 c* d" U# h9 m
#include <reg52.h> //头文件! C: B2 c. z! X& M) T: k5 \
#define uchar unsigned char //宏定义无符号字符型
3 P5 E4 Q& g3 z#define uint unsigned int //宏定义无符号整型) \. j# \6 x7 a$ R# [, d. k( J
code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟, t( q0 s- U1 Y2 E+ ~$ c7 _1 e* @
uchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端 //位控制码
6 x4 Y% l I- D, F3 Z& O# fsbit ST=P3^0; //A/D启动转换信号
& W; A( n( K6 C$ E9 x, fsbit OE=P3^1; //数据输出允许信号$ P" Q1 i5 a6 D, ^
sbit EOC=P3^2; //A/D转换结束信号; q+ _! _: D& y: u" F7 d5 G4 Z
sbit CLK=P3^3; //时钟脉冲
7 A: r' Q0 B2 ?6 m/ Huint z,x,c,v,AD0809, date; //定义数据类型+ E8 Q& i, ]8 h1 ~
/******************************************************************0 T" r7 d( \& J0 ^4 q5 H" e- a/ }
延时函数6 ?# |' q7 Z7 S8 h4 H
******************************************************************/" R. t" n! c$ O& {: q# ~* B
void delay(uchar t)
2 a* Q8 v" R9 k- W6 U! G{
5 K2 T+ _+ f) |% }3 I N uchar i,j;' r! Z2 |! h4 V+ k
for(i=0;i<t;i++)
& g; ^. D, u8 y" _! ]! N( g {
2 h5 k+ ?. n* s9 i! A" t# z for(j=13;j>0;j--);
& y% j' G+ S1 k, I { ;4 {/ b4 C& z/ O, M; H, O% @) U. F
}8 S" R, j+ E8 H! C6 _6 ^( |
}2 b K$ E" p+ {& V" q
}2 {7 r0 H( P' a, [
/**********************************************************************8 s( F# L/ e% g; D0 i
数码管动态扫描; U# v3 v3 Y! N' x* p) }7 u# D
*********************************************************************/
, ?8 L/ q# j, z- ^9 @: v. Nvoid xianshi() //显示函数
0 G4 m6 i" _- m" B2 V { 2 T0 S% H+ g6 b* X# D
uint z,x,c,v;1 P0 C5 V% C$ ~' _
z=date/1000; //求千位
+ T( j. U) L" t x=date%1000/100; //求百位7 L+ o, P+ B X' m. ?( H+ R! C3 L
c=date%100/10; //求十位3 f; V: M- ~: o! b( _2 `2 T) t4 o/ U6 V
v=date%10; //求个位
! N0 H! q5 k5 b+ |+ I. X3 X4 q- g9 M8 j% [, g) v
P2=0XFF;" Z' g' E* [" g) K. m& u5 H
P0=seg7code[z]&0x7f;
& z% ?, T: h+ C P2=wei[0];
$ y) V: [# }1 V% W/ n/ d delay(80);- u1 D. y6 P* M# G. y( [
P2=0XFF; 0 `1 f0 A/ q# F! J! z$ y
P0=seg7code[x];' t6 {/ n: b1 l$ T
P2=wei[1];
' A7 e" i+ Y% ~0 f delay(80);: a2 W: l. ^' E: k0 q; K( i
P2=0XFF;
5 ?; o* [5 z. q. v% Y2 x: i8 p P0=seg7code[c];
3 l+ W) P' j( I3 Q' ]# D7 O& q# p$ n) I P2=wei[2];
+ p$ p h& @2 @2 I+ g \- W, i8 V. x delay(80);, L! s% R% C0 v
P2=0XFF; / J' b; @* v: w5 o* d2 W
P0=seg7code[v];
" u! z. ^0 w! g" C P2=wei[3];" N& J' F6 v: |8 n
delay(80); 5 m% ^* M5 K+ Y/ F5 v7 t K
P2=0XFF;( M, V" E1 f$ T1 G
}
" e" |' _4 P& U /************************************************************************* J1 p# `8 v8 G9 u. `
CLK振荡信号 7 j8 L( j$ G! n. n3 O% N0 E
**************************************************************************/( c; X, q$ s! `
void timer0( ) interrupt 1 //定时器0工作方式1% k7 a B) M9 k) u/ l9 k# h
{
( a6 k0 w+ o& ]/ j/ a4 a4 t
5 H) x0 ], h9 ITH0=(65536-2)/256; //重装计数初值
4 C, z( `* Z5 L& [4 L7 |/ ?: k( l9 F, xTL0=(65536-2)%256; //重装计数初值
$ e# J% u4 g+ K1 |$ E FCLK=!CLK; //取反& n7 C5 v9 z, J. K2 U
}3 b9 J7 i5 I* F4 Y* G
! v# d' P/ W$ ]) \$ r
/*************************************************************************
' L+ P4 U/ e1 @/ I% c) F 主函数 : q( x2 T# b I+ C+ w/ i
**************************************************************************/; ?3 u9 U' |8 N z+ `% q) F) J; v
void main()) M M2 z3 Z% W R! x: [( {; [
{ 8 x6 f4 c8 U2 g4 O: B% [! Z
TMOD=0X01; //定时器中断0
, R! P7 w" B P2 A+ Y5 c+ ]$ i: ?- O- h* q# n* [
CLK=0; //脉冲信号初始值为0
% [/ e( R$ p0 k! {& aTH0=(65536-2)/256; //定时时间高八位初值7 B4 g& A, _, G# O8 g5 G6 i: t
TL0=(65536-2)%256; //定时时间低八位初值
3 i! g( ~0 H1 A1 Q$ @/ ?5 pEA=1; //开CPU中断/ _/ ] v$ j( E& Q/ [
ET0=1; //开T/C0中断( x: x! p, a, i; e$ n
TR0=1;, D- U* T$ o- \5 e
while(1) //无限循环9 c4 \% e' z+ K$ `' t4 r" B: R
{0 q9 J$ z0 k: l2 T3 w0 N
ST=0; //使采集信号为低: @! g) X% c& i+ ~5 U
ST=1; //开始数据转换
l2 s2 u6 K, z ST=0; //停止数据转换/ b+ @$ f) Q0 ~) k" i( n$ S: f
while(!EOC); //等待数据转换完毕: @+ c; z0 t) o7 k' z
OE=1; //允许数据输出信号+ U4 J2 V" ?/ z. j
AD0809=P1; //读取数据
5 s1 y5 L3 o7 V, Z) | OE=0; //关闭数据输出允许信号
8 ^+ j j- K. Z0 g8 W if(AD0809>=251) //电压显示不能超过5V
( t3 ^0 |/ u4 v# l) V9 B; q# e5 m9 G AD0809=250;0 A7 g& W7 p" ]+ k
date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值
6 i& v- e3 e$ Z1 L3 y. [) _* Q- h9 C0 J3 h4 i9 x
2 W! Z1 F/ g( {# D5 K- g. Z7 c1 g
…………限于本文篇幅 余下代码请从论坛下载附件…………
* [: g) X. {9 ^8 V) l; m' F5 u2 W8 H ]$ _' E
" ?& k+ m' i5 o4 F0 j |
|