|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
酸碱度ph传感器 单片机源程序7 H( N7 V; m" d% t
" ]! p# a' o2 `
5 o% }1 V$ x" ]4 k# @9 j! `0 R
分享一个测试酸碱度ph传感器的单片机源程序
" b$ q7 z+ Q6 M# j9 N! T6 i b
3 d" e9 U* H, G. l" [9 t" Y c0 L6 P& j) a% F& _. E
单片机源程序: | /********************************************************************! g! q S! y* ]6 y; @
龙戈电子
) I6 k) N% ?# v: P9 a*********************************************************************/
9 W, K" E# x9 ^ k+ C#include <reg52.h> //头文件
( o0 A. J+ g9 D Y$ S3 z#define uchar unsigned char //宏定义无符号字符型
; W' K2 @; _/ M( o5 v! R5 p#define uint unsigned int //宏定义无符号整型
( I" [8 M" V1 W3 N4 ^code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
) P8 y* `$ P6 |6 Luchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端 //位控制码
8 M2 ^7 c" b! y2 V+ L7 @sbit ST=P3^0; //A/D启动转换信号
& U; G" c7 ?' J2 y& [% r3 ~( s6 t Asbit OE=P3^1; //数据输出允许信号
: t9 X ^2 l5 a% E$ Gsbit EOC=P3^2; //A/D转换结束信号
9 w0 ~& k [6 Y3 P: d& Ssbit CLK=P3^3; //时钟脉冲
& E/ K7 }& a$ Y* _+ zuint z,x,c,v,AD0809, date; //定义数据类型- Z6 ?; w. [; l% }4 l3 a
/******************************************************************
) Z/ |4 I3 a8 a: i2 J延时函数
/ _: t+ e5 P) S******************************************************************/6 B* |0 @, S: K8 j+ z# C( q
void delay(uchar t)! I; G. Z: y! {) M9 W
{
$ Q2 m% @/ ?5 x$ D uchar i,j;
9 o9 Q# l6 b; V; z2 U) p for(i=0;i<t;i++)
4 v! y5 z8 G7 U7 p# t4 c {$ F9 l# ^& a/ M3 k% m
for(j=13;j>0;j--);: T5 {# H' ~, c& C# d
{ ;
3 c/ H5 u, C6 ?; f" l }
3 K' z' O! m8 p% m5 \ }4 z" c7 M- S( B- K! z4 |5 g* z! ~; r
}! n# }* B! F3 t2 i8 n7 S
/**********************************************************************/ b$ J) i- y5 R
数码管动态扫描
h7 k. T5 _; u f1 a) }$ ?0 E*********************************************************************/
2 q" H2 _' i$ Fvoid xianshi() //显示函数4 j6 n. U$ V: P" j5 J
{
+ X! z0 z0 z1 K0 p- [2 euint z,x,c,v;
Z+ B7 I" x/ h! u& }+ g5 F ] z=date/1000; //求千位
- M# R- V0 \) @6 Q6 P7 C5 h- ]3 B x=date%1000/100; //求百位* W6 _& C/ z' p* [' A
c=date%100/10; //求十位3 Z) Y0 t- o- ^( V6 R
v=date%10; //求个位- ]1 P1 U; X3 [
$ A4 s4 ^# `8 o P2=0XFF;5 w! H- r' h: n8 p. N% u9 S
P0=seg7code[z]&0x7f;9 ]4 @5 u+ r# _4 X. X* H% Y
P2=wei[0];9 m7 b* P: u! C: E h# [
delay(80);
8 _# G6 E# }4 a- ~7 B+ {% |- E { P2=0XFF;
7 J- y% ^ F! U: S, w2 F P0=seg7code[x];
" R- f+ ]4 m. a* z P2=wei[1];
& }, _% d! g+ \9 Q O delay(80);
% Y3 J& o7 V. b8 ?: ~ P2=0XFF;
8 |9 O* W2 c7 o6 i2 X+ I- H P0=seg7code[c];
0 K8 E n0 I' c P2=wei[2];
4 I2 S- D/ E: T+ v+ ?" w2 U3 x3 a8 H) z1 I delay(80);% V2 K% f: T8 t7 O3 A
P2=0XFF;
5 |' n% ?5 V# x) P; M" [/ N P0=seg7code[v];
+ [8 a" |- }/ i+ y" ?' V" s2 s P2=wei[3];. C, }) b4 E2 ]! l5 a
delay(80);
. P0 }5 T4 ]9 h1 Z; K$ V/ v P2=0XFF;! i8 s8 ^; A9 w; s
}
7 X4 I" J4 O1 U+ L# k1 `' e: m /*************************************************************************
8 E% D+ r! n- D% k! r CLK振荡信号 ) m' L, ~0 }% s- ^3 V7 g/ L( S
**************************************************************************/
/ a* p1 E& R" g o5 D. Z! U- vvoid timer0( ) interrupt 1 //定时器0工作方式1. y7 ~$ w: o3 M/ j/ }; ?
{; ^. f9 V: Q3 z1 H+ |$ R
* D8 C- @" t) `5 jTH0=(65536-2)/256; //重装计数初值4 M% l* G3 @% m4 B) C" ?
TL0=(65536-2)%256; //重装计数初值
4 ~9 ~: ^5 x" L7 v6 dCLK=!CLK; //取反9 }. y- C# F) s3 O9 l3 v2 v
}
4 a% p( w+ {% Z6 W' _
; c4 @# g6 h- H" ^) S- q* A' Y; @ /*************************************************************************4 I: d1 k7 ]4 o9 x! D
主函数 1 A2 `& T" X4 @+ ^; |
**************************************************************************/
* D! ?. R8 h9 E+ {# r7 @2 N void main()
1 u; U/ q$ l4 v0 S$ F. w& N{
@4 S2 w# h2 E9 b' ^( W) O4 `% cTMOD=0X01; //定时器中断0
" \8 j1 s+ g, M& M2 y" X) | C7 U' a+ O$ x8 J: H+ _9 y5 p
CLK=0; //脉冲信号初始值为0' o0 [- B& C7 _
TH0=(65536-2)/256; //定时时间高八位初值
' Q# U9 j0 k& A( c! \; {% {TL0=(65536-2)%256; //定时时间低八位初值
$ h) y/ N7 V* q/ M1 l2 CEA=1; //开CPU中断# X: s- k' R, c( Z/ d' L: q$ E
ET0=1; //开T/C0中断1 a \& t I& b/ F
TR0=1;2 c# A4 n- K2 [% {% ]# g3 Y
while(1) //无限循环& p4 z* M s0 p$ ^
{" H6 e/ Y! P/ |* {! ]2 R+ }) D: m% v9 |# J
ST=0; //使采集信号为低' A! P# _6 _7 C" W) z
ST=1; //开始数据转换, C4 ^) F0 B+ d
ST=0; //停止数据转换. l; r" E ?4 I$ [5 k: Q: }2 o; D
while(!EOC); //等待数据转换完毕
- a$ X+ _3 ^6 ? OE=1; //允许数据输出信号/ F' }4 Q/ t, Y. U- t4 P5 f: x
AD0809=P1; //读取数据% a7 j4 t' V+ @& z7 {( O2 w" p
OE=0; //关闭数据输出允许信号
) |" w; ~0 I9 G: H if(AD0809>=251) //电压显示不能超过5V
/ _1 {$ G% I" }( R( G" ]( z AD0809=250;
P2 Q. w% E& c& z5 z( U date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值. t( ]5 |1 s |% G3 O- X0 j# n5 X
+ \6 @( {& j j! v1 C
& w# m) X T5 w9 P
…………限于本文篇幅 余下代码请从论坛下载附件…………: w# A% e6 y) p' }, V3 h
# E _- Q# X3 t% ~& o$ u: F6 I% f3 K! k }/ h1 `6 k5 [' Z! R: x
|
|