|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MG-811 二氧化碳传感器 测量控制程序( A; _( Q$ f4 j) Q7 D, D# W
) V! u2 z/ O. K
1 A" K+ N2 |1 ]/ Z- w
完整程序代码下载:- f- K7 M$ R* |7 z
+ B5 E$ E: D+ ?: y/ l" V, T# z4 [
# o5 y% h) G4 [: w4 y" m( Q! _% F3 L
* b5 W$ H) F6 h. q2 B7 |下面是主程序:/ [$ t( [- f( Q1 L
#include "lcd1602.h"5 M# }# Q! q; Z1 H" M7 v6 U
sbit ST=P3^0; //A/D启动转换信号
, s! x: P" k ? Y/ @$ asbit OE=P3^1; //数据输出允许信号! C0 e$ e2 E) C5 G
sbit EOC=P3^2; //A/D转换结束信号
1 {- E; y7 U; |# K9 V1 ^sbit CLK=P3^3; //时钟脉冲
* j; H& _/ [0 H* }" ouint z,x,c,v,AD0809, date; //定义数据类型7 u B1 Z/ ?# w6 B/ _1 H( ^5 {. p
/ {' a! e) h. S ?( K/**********************************************************************, X0 b( W3 s. h' T! _
数码管动态扫描7 c0 A/ \2 M, O6 A
*********************************************************************/
* @! T% Z; s# P' hvoid xianshi() //显示函数) Q; c) e! M/ a0 Z: g7 C, M) L+ g
{ 3 s- v6 o9 H0 t) `3 h8 T! G
uint z,x,c,v;
# c9 e; X: u! c( y0 B z=date/1000+'0'; //求千位
* D5 K8 G& b# t k x=date%1000/100+'0'; //求百位5 [, m. l+ x9 o
c=date%100/10+'0'; //求十位
T( O& t8 D1 B. t) P8 U v=date%10+'0'; //求个位
( G+ o1 O: x' b7 ]) v( x2 M DisplayOneChar(0,0,z);/ i: q& R" F) ?' Q
DisplayOneChar(1,0,x);
$ s. Q" r2 A/ \# u DisplayOneChar(2,0,c);
) T4 T' G+ D$ q; ]4 [4 X" G6 G DisplayOneChar(3,0,v);8 }* F N/ K; X. T% X) C; }
}' V. x. W/ `( ~* E6 J4 x
/*************************************************************************
2 a" M4 {% ~0 {* Z CLK振荡信号
) p g( H5 E3 \" `: j- m**************************************************************************/- a) ], A- x9 `# p: ]* w
void timer0( ) interrupt 1 //定时器0工作方式16 p) v; } A$ ` e" K/ C8 d$ R
{% H/ ? B: G' ]5 q0 L
9 }5 I* d( W2 i! K6 O
TH0=(65536-2)/256; //重装计数初值1 F3 h( W$ B: J/ K
TL0=(65536-2)%256; //重装计数初值, Q- W( D* c4 O/ a
CLK=!CLK; //取反
/ P1 t2 Z1 t7 f7 d4 ~}
2 S5 B1 C/ R9 f9 H5 e3 G5 r5 M- Y' ^# F0 P1 n7 J' n
/*************************************************************************+ z4 n: v7 `, r6 V+ h: x
主函数
( a7 w4 D9 e. ?4 j. X& C**************************************************************************/
! g# j7 @8 G/ S# A# O' v void main()# C) A; s8 A- p
{ ( m H j4 f; B- T8 Z8 O Z3 `1 l
InitLcd();5 N1 D; G1 f1 R4 s z& i) x i
TMOD=0X01; //定时器中断03 N% _2 \2 P1 w$ n% M& w5 B+ m+ }
3 o6 S: a" q HCLK=0; //脉冲信号初始值为0; S3 j+ y }9 v# c* G
TH0=(65536-2)/256; //定时时间高八位初值
+ J, L# c+ t5 o G+ L( I7 x6 _/ uTL0=(65536-2)%256; //定时时间低八位初值$ z6 E$ W6 f, m
EA=1; //开CPU中断* ^1 z/ t- G# S; ]( r, u* V" ]
ET0=1; //开T/C0中断7 j( W* q4 X. {" q
TR0=1;
& K. x6 i5 ]9 J9 P; { while(1) //无限循环/ g; l G9 J' E0 _& r+ J
{
( R% @/ X1 y2 w/ A" b0 p ST=0; //使采集信号为低* c. Y% I2 d/ \5 k! L
ST=1; //开始数据转换
3 x8 [1 {' {1 Z0 O, B ST=0; //停止数据转换+ d1 f' S4 y: T" v, c/ O
while(!EOC); //等待数据转换完毕) i5 f* G" J) _2 F0 i b
OE=1; //允许数据输出信号
8 b5 {+ v6 a& D) h; y- } AD0809=P1; //读取数据9 p/ h& f- f5 L: [0 w
OE=0; //关闭数据输出允许信号
6 b) Y+ K G: x: n7 q# w if(AD0809>=251) //电压显示不能超过5V& e" |" R4 a$ _ T$ A
AD0809=250;* H4 u2 s, u) A7 Q3 w |/ f! K
date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值3 Q2 e4 i8 M) G5 O0 \2 w& h" r
xianshi(); //数码管显示函数" q& ^& C# f, S P
delay(100);
# S5 h9 Z; r% w# }' C }
& W. C4 N4 |' {1 W9 F0 V8 p} ; h: v# ^# y$ E- s6 J" L, M% p- Q
* s/ H V5 f& {% }4 q4 f1 ]
|
|