|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MG-811 二氧化碳传感器 测量控制程序+ R5 V- B8 S- g: A
" [1 ]- v5 |( Y$ u8 @' t8 a
5 C8 z% ~% x2 N* U3 ?( P q完整程序代码下载:$ y ]) Q1 D) _
% j% ^- L/ l6 ^) M& p
6 n) H% B$ Z3 W
3 X5 E- b) }3 F( W* h
& Z* Q9 O$ p5 w% V, L
( k- H' H% @3 ^8 L2 A# u3 O* n下面是主程序:% v5 A& `2 Z5 f; l5 s2 R
#include "lcd1602.h"
; z- y9 M- z5 k( L+ Osbit ST=P3^0; //A/D启动转换信号% q+ S' `$ i# L- h4 j' x
sbit OE=P3^1; //数据输出允许信号
& M% C6 }2 J& Q0 A% q8 @, `, y5 D. vsbit EOC=P3^2; //A/D转换结束信号
7 L0 C2 ]% e1 ?, T) msbit CLK=P3^3; //时钟脉冲
. @: F4 k" A# e1 |, m* E; ouint z,x,c,v,AD0809, date; //定义数据类型 y; k. v+ @% x# T, _$ F; [ Y
, e$ j, `) p; ~9 m+ D" k
/**********************************************************************4 |3 u4 y6 H: a+ y4 e' T4 \* j
数码管动态扫描$ v! j0 ]3 ~' g
*********************************************************************/# M/ ^ j5 @. I9 s+ @' W z
void xianshi() //显示函数2 @; t, q) C# m
{ % V/ `! U3 ^5 ?
uint z,x,c,v;0 ]8 L# h, o+ O; K. _
z=date/1000+'0'; //求千位2 o3 {4 a, H! r: x/ @& |
x=date%1000/100+'0'; //求百位
% {5 h' P, `8 e7 B/ o- Q c=date%100/10+'0'; //求十位
7 ^8 z) W# a$ M+ W3 B7 Y4 q' }7 C v=date%10+'0'; //求个位0 o- E" A- z. k
DisplayOneChar(0,0,z);
1 l! p8 A2 K0 a DisplayOneChar(1,0,x);/ g. [/ `$ c% Y9 u8 O
DisplayOneChar(2,0,c);
7 }8 P, G: S8 U$ Q: z# ] DisplayOneChar(3,0,v);
8 f; W O; }% k7 h: i) u+ T }( e5 M& Y1 O1 o5 w! S# V
/*************************************************************************+ @- S2 L9 E/ Y
CLK振荡信号 & D! |' c, T! u
**************************************************************************/
# J' C/ J8 |8 \6 m! a" V9 ]( G! ^void timer0( ) interrupt 1 //定时器0工作方式1
8 u6 b) \# C1 }% v( f- e- R- a* z) C{ }+ H/ V! x6 P T0 @
/ T/ e% _! {/ }- R3 p+ O/ xTH0=(65536-2)/256; //重装计数初值
* @$ e s% @" [1 S( eTL0=(65536-2)%256; //重装计数初值
7 z. K" ^- B& T1 PCLK=!CLK; //取反
1 Q9 I" A- X3 R% l}
T% t4 q2 s8 P' z0 {' U
3 W+ s+ }5 H" X( ~7 t /*************************************************************************
0 u0 M4 a) f; I% X( r7 v7 b 主函数 " R* H5 s& u1 O( X" Z5 J) A& Y
**************************************************************************/
3 g" j; h4 P* n9 ]- U void main()9 o. t6 |. I) \, t% {5 D
{
1 o1 ~, g. J% u% ^9 E* V' {InitLcd();
; X( |. ] B: ^9 B- X OTMOD=0X01; //定时器中断0
! Q' g' Z" ?* C X
9 v% L' d& B; R9 q! Y( RCLK=0; //脉冲信号初始值为0
1 y' D ]" m9 Z" WTH0=(65536-2)/256; //定时时间高八位初值
T4 J. H5 v* x7 B# C: S: pTL0=(65536-2)%256; //定时时间低八位初值
8 A) ]& @3 [& }; ]( S2 XEA=1; //开CPU中断' `9 o( n. ~0 B @! h
ET0=1; //开T/C0中断
m" t7 t O" mTR0=1;
" w ~: ?# b/ ?% o while(1) //无限循环
. T* E+ }, {2 d* l, V {
& e* M# O% W3 }% \8 E9 V" G8 Q9 ` ST=0; //使采集信号为低% {4 \* j3 N a1 z P% H! v. v
ST=1; //开始数据转换
* O9 s3 Y. r" u5 I6 N4 j ST=0; //停止数据转换6 y1 o% X$ t2 D) T) c9 }8 l m/ p3 I
while(!EOC); //等待数据转换完毕# f w- }, p `- y
OE=1; //允许数据输出信号 v% }5 \) c! P- U
AD0809=P1; //读取数据- `2 h4 g. m4 L$ [& L
OE=0; //关闭数据输出允许信号3 h( Z8 [1 B/ O3 r) b# n. K
if(AD0809>=251) //电压显示不能超过5V
, N& _1 H: S! Q* L6 o! ~ AD0809=250;) @: m: s& m! r. t6 }* B8 v- N
date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值( |2 E3 k" W6 ~' `
xianshi(); //数码管显示函数
1 ^0 h \) H) c$ ` delay(100);
" h" H# G; D# j( J5 f1 w8 ^ }
& z9 X! k8 N5 f: x1 z4 `}
8 s9 F) r4 V9 u t+ v$ M. r, A6 Q' p6 A' c+ V4 o: B2 _
|
|