|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
酸碱度ph传感器 单片机源程序: H; d: U1 D' q
8 U6 I! o% |0 f6 g3 T% E# x2 u5 R
) q+ w) {2 X0 i' a( \分享一个测试酸碱度ph传感器的单片机源程序9 E# _3 L0 Y5 U0 ^, _
: o6 l. d& G3 b2 o, p7 v
1 x+ `8 u4 {* M; \
单片机源程序: | /********************************************************************
3 V% E( p+ j% i) c 龙戈电子
5 Z' u9 Z1 Y# G) o$ Z- e5 v4 t*********************************************************************/# W1 L9 H% }" ]+ m' l' `$ L
#include <reg52.h> //头文件3 l& l+ {% J8 `
#define uchar unsigned char //宏定义无符号字符型
+ ?% L- L! I6 d- w" P#define uint unsigned int //宏定义无符号整型
1 a7 ~3 _5 Y# x+ l3 S5 xcode uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟+ z" m' Q5 v9 c
uchar wei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端 //位控制码! x* j6 w- e9 f2 i; j
sbit ST=P3^0; //A/D启动转换信号
; \, v. N8 O2 `) ]sbit OE=P3^1; //数据输出允许信号
* ?5 S; I" k! u. Q& E* t$ M/ h/ ^sbit EOC=P3^2; //A/D转换结束信号
% v2 _& v% f! lsbit CLK=P3^3; //时钟脉冲 t/ c& N( p, m, c3 G2 r
uint z,x,c,v,AD0809, date; //定义数据类型5 R+ X0 a. v5 G4 y6 `
/******************************************************************
/ E1 {1 I) o3 i; y9 V" D9 z延时函数
3 v0 R9 `( K) t' _$ I1 I******************************************************************/$ _9 R& i1 V6 ]0 X9 x
void delay(uchar t) t; b5 h; h7 W# q' G% T2 M
{
3 G+ M0 Q0 y- z" i( ` |# D( O uchar i,j;
) J3 `1 z* Q8 K0 F3 e for(i=0;i<t;i++)+ J/ {7 v5 I8 W6 M
{/ x$ ^+ s0 ^# H& ]4 Q
for(j=13;j>0;j--);" |3 F0 W7 N- `" V& Y$ [
{ ;
f$ S/ Q0 G" P7 R }
$ Z+ H6 O* g$ T$ I6 W/ h5 u }5 N' ^4 h* y3 Y, [, G2 Z
}% l, L7 k0 [5 r1 Z' S
/**********************************************************************$ ^: P! ^$ M: d* ~- E5 i- K
数码管动态扫描
) k( x/ `; |( G9 C6 F1 m+ p*********************************************************************/
1 m5 Q0 b: [/ u: J/ B( q( kvoid xianshi() //显示函数/ T& c, H2 E+ g) E9 V' J6 O
{
- E" W6 P; G @* q; Vuint z,x,c,v;% `' j$ h. d! i6 p4 Q% c& w6 {: J
z=date/1000; //求千位
- H. f3 q, ?+ T8 \% Y Z/ ?2 w9 E x=date%1000/100; //求百位% D) n( n4 |6 j! i6 d( _0 D
c=date%100/10; //求十位) I O, M& U9 ]
v=date%10; //求个位
; S1 l& u' J- x5 Q u! B+ f: e
$ N5 y# ^7 [# L+ {6 \& A P2=0XFF;0 O8 j/ X) B' I5 `: w+ T/ z& r
P0=seg7code[z]&0x7f;( Z _& M4 A t; x$ H( I
P2=wei[0];4 ?5 A* C6 W( \6 Z5 G# T7 J' b. [
delay(80);. [. G2 N$ ]1 f& A; n
P2=0XFF;
% [! S- v4 v+ K9 d" u( P4 _ P0=seg7code[x];
- Q+ U* h. E- C3 ~6 b' X P2=wei[1];
" o- V/ h" F- e5 _" p, T( @' R. L0 w delay(80);# [1 K6 s& V! K
P2=0XFF;
' B, J, {/ j. s2 H* g2 J P0=seg7code[c];7 q" [: B* C# w6 |1 c; C+ N1 [
P2=wei[2];
0 k+ Z1 }* V/ y! p# v; u delay(80);1 g: T) ?1 A+ t) `! f
P2=0XFF; ; q1 j6 H3 U* M( u" k, B, u) [7 v
P0=seg7code[v];/ w/ w$ N8 ^& G- E- f9 D9 J
P2=wei[3];
, G6 O/ |. U9 U7 y3 g/ U delay(80); , v0 D- E9 f8 H" [+ ~9 U
P2=0XFF;! o3 f$ i5 S N2 p1 U' p
}
' g9 n5 e4 p/ M& \- y8 C, u /*************************************************************************
, D; q# I+ E3 k/ G) b- P! F CLK振荡信号 ) Q) T. x, b% O5 V
**************************************************************************/
2 b0 R9 ^6 |$ v; `9 @+ `void timer0( ) interrupt 1 //定时器0工作方式15 s" H$ w2 {9 O; T7 H
{3 O3 l- j" E! V T# v9 v( J+ o
, I. {, J, U7 X ]" p' c& d% T
TH0=(65536-2)/256; //重装计数初值
! e3 i2 @! U, N2 v% o% L- e+ }TL0=(65536-2)%256; //重装计数初值3 P0 ?2 Q0 ?+ k& A( D6 p! [
CLK=!CLK; //取反6 n9 y9 d) n- ^0 g- e
}0 t6 P, j1 q E1 c' E
' E. F5 k2 A6 }' s; o- l. I0 \. H' Y /*************************************************************************/ q/ R( Q4 p0 \! }0 s+ s
主函数
% L. P% W' w& F: t# }**************************************************************************/
# E% }1 v% [7 b4 q6 z; k8 x8 A void main()5 o! e& E8 i, B, m
{ & E7 P7 d. [" X7 q4 _/ i
TMOD=0X01; //定时器中断03 K4 B8 w7 i) q/ v$ t! w
: w# o) T$ S3 f9 s8 Z1 {6 QCLK=0; //脉冲信号初始值为0
8 i/ c: X9 h7 jTH0=(65536-2)/256; //定时时间高八位初值
, g: P- C A- v1 ATL0=(65536-2)%256; //定时时间低八位初值
4 a3 _7 L- z/ T* P0 K% @EA=1; //开CPU中断$ |, a) t0 P o6 ~$ ~$ X
ET0=1; //开T/C0中断$ O1 X8 g1 u2 `- N( U
TR0=1;
( x- e( x' b- V0 `$ D1 A while(1) //无限循环2 ]$ D$ m G. }3 m
{
) a) P3 j; r" ` ST=0; //使采集信号为低( a8 r; j6 Z- W* e0 S
ST=1; //开始数据转换' S) Z; M; ?0 Z. {+ g
ST=0; //停止数据转换
& |+ P- O* S2 s1 S3 j while(!EOC); //等待数据转换完毕) s7 ] D C, Z; e
OE=1; //允许数据输出信号, z9 J1 i! i( b/ w) N
AD0809=P1; //读取数据
$ O8 x7 p1 j# p; t* [/ W2 h OE=0; //关闭数据输出允许信号) y0 x+ v, {" F4 A. n9 A9 K* o* V5 Q
if(AD0809>=251) //电压显示不能超过5V4 e# Q, [( ?! ?5 c3 c/ W
AD0809=250;
5 o5 W' V9 P* N' N$ r* R& E date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值
1 r- C( H: B. [ ] D W& ~- Y. Z
4 A$ L7 x% L! V- ]2 P; C5 y/ B4 U, ]: _: z* o0 L
…………限于本文篇幅 余下代码请从论坛下载附件…………+ L1 d) e1 I$ q$ W' _- m
# ~! A& u% J+ }5 q# @1 R, M) K
& \' d" T5 r8 C+ W8 \: o- |3 @ |
|