|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MG-811 二氧化碳传感器 测量控制程序. V$ ]( Z0 Q1 N3 l1 f3 [
0 g) q3 N: |) I# K
' e ~4 r/ f- m6 @0 W/ I完整程序代码下载:# m, K2 N* d: W q
5 f# _+ V2 Y5 V
& I9 _+ Y" U" N) s+ [
; J6 u2 C+ w- B: C
# g) ]1 ^/ X0 v& W0 Q- H5 p% O7 S+ l- J D. w1 ?- n
下面是主程序:- u# e( C/ v% S7 l) G
#include "lcd1602.h"
& f+ g2 E8 a* H( Bsbit ST=P3^0; //A/D启动转换信号4 y, }' M' }: P. r( R8 I6 X
sbit OE=P3^1; //数据输出允许信号/ @2 Q5 W. R' O+ b' X. ]9 G& c
sbit EOC=P3^2; //A/D转换结束信号# J4 d# N1 U* H" _$ b1 P/ l% l
sbit CLK=P3^3; //时钟脉冲 $ Q3 ?* P$ {6 D. G
uint z,x,c,v,AD0809, date; //定义数据类型- v* U5 r1 _0 v( _8 a( j
' I3 B {7 W' r. p2 H" {
/**********************************************************************
7 Z7 D3 q; ]5 p% T' w0 l( g- C/ K 数码管动态扫描
& u* G2 V0 B M3 i*********************************************************************/4 }. u- l5 V& p: v+ j
void xianshi() //显示函数# n# k, p# k- u8 y; {( n) w" ]
{ 1 p7 ]2 @- J& A% J) I! G$ Q" N
uint z,x,c,v;
& S# v3 b: p' H z=date/1000+'0'; //求千位4 b+ G, b+ L/ s$ S/ b& T
x=date%1000/100+'0'; //求百位
: v6 C$ S" K" E2 b c=date%100/10+'0'; //求十位
. f. _" m( W( t/ S# b' P v=date%10+'0'; //求个位
0 O# f2 M0 S7 C2 |! X' }3 o4 y DisplayOneChar(0,0,z);1 G7 m3 U8 p( m' n+ f& ?7 V7 c: X
DisplayOneChar(1,0,x);
9 v1 f' g) E" l DisplayOneChar(2,0,c);
2 i7 {1 [0 x5 |+ s" I1 r DisplayOneChar(3,0,v);# O7 f4 e" W! W4 g7 d# ]
}; J6 e4 Q3 g$ r- h
/*************************************************************************
w5 R8 y F6 j$ S- @5 h* f# v CLK振荡信号
e$ A2 X9 n2 x6 e**************************************************************************/; {/ Q% n1 I" _! \
void timer0( ) interrupt 1 //定时器0工作方式1
) Q* y1 ], ~5 z8 H6 Q- H3 |+ a, m! Q{
7 }* y! G# Y# w% h
* X( `+ ^9 m" o3 g) G7 h9 JTH0=(65536-2)/256; //重装计数初值
& U+ S$ [2 A8 B! d$ \TL0=(65536-2)%256; //重装计数初值
: R. W4 a! |0 p7 C3 Z P# I4 N# r$ uCLK=!CLK; //取反
# i2 o+ p4 g3 X6 `5 B}
8 |+ p# W# e; K0 {2 W
) y# _1 g' W: B) ~# X /*************************************************************************- l9 Q6 j! X* M. n" i# H
主函数
: }7 G& l7 f- h% k S0 z! r2 P**************************************************************************/
m3 ]1 R& {3 x; ] void main()
$ {& V/ |* z5 O{ 7 h2 C; _; l2 {$ }& g- m. c5 W
InitLcd();
5 x9 Q2 m" m! }8 l& |TMOD=0X01; //定时器中断0
6 n% w$ G/ l4 R U
$ L7 \5 S$ y/ BCLK=0; //脉冲信号初始值为0
! ~; E3 w- S- STH0=(65536-2)/256; //定时时间高八位初值
" a4 c2 Q9 c" i) z5 RTL0=(65536-2)%256; //定时时间低八位初值8 M$ d# o2 X9 j# x
EA=1; //开CPU中断; z! ~7 ]8 j: B) n6 a- K" R
ET0=1; //开T/C0中断
0 p1 N- f1 I2 T4 vTR0=1;8 u9 J0 \# t5 Q( d
while(1) //无限循环
+ g4 j ~! u# r- n1 b {
# b+ G1 {4 @$ [' V6 u1 } ST=0; //使采集信号为低
3 @) T/ A/ U( `6 v$ \ R ST=1; //开始数据转换
" g$ c$ U6 D* ~- D ST=0; //停止数据转换. b# ^& p! G' l
while(!EOC); //等待数据转换完毕
8 W- c8 K, V+ Z! m8 j6 F* g4 Z4 G OE=1; //允许数据输出信号' i' n+ i+ | X8 Q+ i: @1 B
AD0809=P1; //读取数据$ U8 o7 T8 v+ Z$ u3 Y' r
OE=0; //关闭数据输出允许信号- u. u+ u1 r; ^% g. K! D( u
if(AD0809>=251) //电压显示不能超过5V( m: B3 S2 U1 x; O* S' l
AD0809=250;
, k' @/ @. S. W% W date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值9 C$ j) z/ R- g% d
xianshi(); //数码管显示函数
4 q/ }2 ~& Z' I8 I' G delay(100);8 A# {/ Q& E. d0 U! k! Y1 D
}4 ^' W, d* r0 D6 P" k3 E5 ]
} 6 X) H! ^3 \* a* a: k
9 r6 `: k* b9 _. L |
|