|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MG-811 二氧化碳传感器 测量控制程序
+ W+ y$ j/ b) l; E, P7 q& C* ?: i L* I1 p3 q
- M K5 ^& s* f, l完整程序代码下载:, P3 \: I$ w. S) Y" \2 O: f/ b
/ r" E2 B& f0 c1 N# T
9 \2 u! @) I7 R8 }4 f V: p9 P Z( N" T6 W2 S' C6 L# Z
, z- A) b, k. A8 q- q
" J; ]% K5 P$ J. t+ p h下面是主程序:1 N; `9 c0 l! e* T- e, w9 j# g
#include "lcd1602.h". \1 d+ P. x! @* B# v
sbit ST=P3^0; //A/D启动转换信号 D! t; H d0 V! ^% H/ O+ j- _
sbit OE=P3^1; //数据输出允许信号
- f M3 K. W, H: Z [* M" psbit EOC=P3^2; //A/D转换结束信号* h; W2 ]7 ^% a6 ?
sbit CLK=P3^3; //时钟脉冲 . f z" B. {. x, U5 w L; F3 Y! y
uint z,x,c,v,AD0809, date; //定义数据类型
* g) k, _- p) n6 o( B% e& H2 A0 O( [4 |
8 o1 B! B) l- D6 S% [; w4 }7 i/**********************************************************************6 @; A# U n1 t
数码管动态扫描4 \! g' k8 e: |" ~) W3 d# g2 o
*********************************************************************/2 b S4 E* v' g3 J$ g7 ]6 |
void xianshi() //显示函数: q; ~4 f( c! e! B4 v
{
! l; V7 B$ w; @% m: h- e) [uint z,x,c,v;
7 r) Y$ f, I. h8 T" r z=date/1000+'0'; //求千位
+ R. f3 p& M1 c" O% e; D x=date%1000/100+'0'; //求百位/ J. ^8 M" l: h6 j2 A7 K
c=date%100/10+'0'; //求十位+ L5 D8 U6 v& G/ P( j7 e
v=date%10+'0'; //求个位* P3 }- E3 ?* V# m/ Y. F5 i, }, P$ Q
DisplayOneChar(0,0,z);
3 |- b( d9 u3 R* y# `) C1 Q- N, K DisplayOneChar(1,0,x);
3 e$ y4 s2 F" V; y* t; P DisplayOneChar(2,0,c);
# a6 U- F7 [8 X* x! j DisplayOneChar(3,0,v);
z/ P1 |, n- a5 h7 n }4 x: L+ j2 l. K' y
/*************************************************************************
+ _9 L* P+ q# R' ~3 M CLK振荡信号
4 x- h" f+ v$ l H& N**************************************************************************/
# i$ P ]! T" {$ G2 V: r- O9 ?2 _& ovoid timer0( ) interrupt 1 //定时器0工作方式1
. r, q* n5 D" A6 U% a{1 T9 P+ l- H3 v2 z
+ {1 ^6 T8 d5 \! Y, ^TH0=(65536-2)/256; //重装计数初值
* ?$ p! v) o" ^) x+ o" x5 U; ?/ Z: nTL0=(65536-2)%256; //重装计数初值- i- s/ {9 O5 U9 R: @- A
CLK=!CLK; //取反
" U: W) x" D7 B& ]6 n}! o" k& C" Y* y& k7 N" T% N
7 [: x& h2 r& ` x' z /*************************************************************************+ T0 w6 U3 R* D/ q% X! }
主函数
/ i b% S) b, z( X4 ^! i**************************************************************************/1 s Q8 c! k+ O- i
void main()( e$ \& D% r+ ^$ x) }
{ 3 { `/ t0 _, |# G$ [! ~3 `- B8 p
InitLcd();* S5 ~; l) u- M
TMOD=0X01; //定时器中断0
) @/ E( o! ]7 D4 g2 g5 ~; I g, P( M' C* J8 ]
CLK=0; //脉冲信号初始值为0
/ C. P/ u, e) F R& V UTH0=(65536-2)/256; //定时时间高八位初值+ L4 i1 T: g m' p5 f
TL0=(65536-2)%256; //定时时间低八位初值
/ i: H. t. P% E( g0 R7 REA=1; //开CPU中断4 t$ \& e: M, ] K' U/ E
ET0=1; //开T/C0中断- l! y1 ^7 U; z3 x8 g2 U
TR0=1;
: a" j% x) a0 s* o( v( n while(1) //无限循环# z+ n( H4 \) G3 O3 g7 ~. t
{1 k0 ^1 D* d. v# w' A9 J
ST=0; //使采集信号为低0 l5 m1 ~, m# _ a: V3 _6 J
ST=1; //开始数据转换# R; D' `9 S/ [4 s" `7 }" E
ST=0; //停止数据转换3 S) C. q. B; i$ E/ p% R
while(!EOC); //等待数据转换完毕" I; j0 d' u' b
OE=1; //允许数据输出信号% m- ?+ S$ Z9 n3 ^1 H9 _
AD0809=P1; //读取数据: U1 |9 B/ C2 a0 P" j
OE=0; //关闭数据输出允许信号
: A) p r! |- ~ if(AD0809>=251) //电压显示不能超过5V6 D; ~+ Y9 b8 U! N" `5 o- X1 Y' U2 q
AD0809=250;
. ~" t; S( P) ~; r; m date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值
1 J+ b( x5 P% j w. O xianshi(); //数码管显示函数/ n* b+ a( Q1 X
delay(100);" \9 a) T( I6 q e. G+ }4 r% ^
}9 u, g3 z, {& F$ B0 B: V
} + ~4 W: o7 |! s6 D& d" S" e( V" ]
( M& [: V2 c: d, a: U8 @. u/ t; x
|
|