|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MG-811 二氧化碳传感器 测量控制程序- V+ I/ K: r( f: n T
. C$ C# E3 C! U9 T! X& g
1 Q) u# P" C, y2 o完整程序代码下载:; ?0 P# Z L2 B
8 M) o) d% f2 L4 c. Y! ?5 r A% d% b
) X5 R9 H+ \% F8 C. z. V* a
. n; S) \0 R7 f$ q
9 f9 d1 I, [8 ?6 h3 I- M
' B$ R+ h! P; _2 O! K下面是主程序:
3 v( g8 Z9 w5 ^# @#include "lcd1602.h"0 o$ @3 w1 c! d% l; C( o5 V% d: [
sbit ST=P3^0; //A/D启动转换信号
- p8 f4 ]+ m+ [1 Isbit OE=P3^1; //数据输出允许信号4 M, h7 q6 a2 W' n
sbit EOC=P3^2; //A/D转换结束信号
- a) |) l6 \3 Q1 dsbit CLK=P3^3; //时钟脉冲 ; k1 d- P! ~- [- _) M4 v, `
uint z,x,c,v,AD0809, date; //定义数据类型
( b! v" i, s* d3 _, B
2 e. }! [" G- N& N! c7 ~7 f/*********************************************************************** ]& A9 J6 v3 y( O0 G
数码管动态扫描
2 F' F8 r) P3 ^; P4 W: F*********************************************************************/$ Y, z& j3 }) r, ^% }$ `# k
void xianshi() //显示函数$ v7 U+ e0 Y% Q( ]: @3 L
{ ; { m" e8 O7 n0 a! a3 K
uint z,x,c,v;: Z) ?; r- {5 R7 d3 b+ W }7 }* A
z=date/1000+'0'; //求千位# Q+ O8 D6 A9 ]5 s
x=date%1000/100+'0'; //求百位
) D) g8 x Z# |1 j$ Z! o c=date%100/10+'0'; //求十位
/ R b" \' ~, I w# v4 J v=date%10+'0'; //求个位
k5 e3 X& d( i2 l$ i4 Y* D& C' n DisplayOneChar(0,0,z);
1 g( W+ m, t! y) n* Q DisplayOneChar(1,0,x);5 P, [# ~ {& T/ g3 @
DisplayOneChar(2,0,c);& d# B& A3 W$ L8 ]
DisplayOneChar(3,0,v);! ?+ f+ Z) c0 B Z8 i
}/ c! D% P" E) p& o
/*************************************************************************
) n0 I0 ^, L1 G$ P3 {5 U CLK振荡信号
3 V2 k# _/ M' z) ?, ^; t$ O: C' I**************************************************************************/
6 l* M: O' v* l/ }$ kvoid timer0( ) interrupt 1 //定时器0工作方式1
% ]- W8 B; J/ V, @( I g4 w% ^{
" Q! o9 I5 s1 w/ k& \2 P! G3 ~: l! Z( H v$ x* h x: P/ Y
TH0=(65536-2)/256; //重装计数初值9 O* Q0 v& ~9 L2 ]! J5 M, Z5 \+ Z
TL0=(65536-2)%256; //重装计数初值6 T6 f$ a$ l {) q4 l2 p
CLK=!CLK; //取反8 o( u: o. |$ V, l- t
}4 I% F |8 e$ I
4 G* S! L9 u4 e4 I2 r
/************************************************************************* V5 R, [7 `9 P, |; ~) l
主函数 ; u7 n0 i# `- m j
**************************************************************************/2 O* G, G/ V9 C' u
void main()5 q' X, V! M& L4 N* f
{
$ @* J U+ L& ?; _( yInitLcd();% }8 y2 Y& Y$ m& l# d
TMOD=0X01; //定时器中断0
0 C& R5 M( ]$ y. B, x1 u6 n1 C: `) y: G8 ?+ ]
CLK=0; //脉冲信号初始值为0
' B: ^$ @* C6 o3 aTH0=(65536-2)/256; //定时时间高八位初值. D( L' o" R' A: b
TL0=(65536-2)%256; //定时时间低八位初值
4 n- W; m! w- e+ I( z j! DEA=1; //开CPU中断7 w8 I) p, C5 j9 j. r: N
ET0=1; //开T/C0中断
9 O- i0 I& h; P# R# f! u, ]TR0=1;* y9 D0 G( r( x# b, I) {
while(1) //无限循环1 T4 P" ~4 u* K* q* e
{
; S+ J k9 J2 o# y% M! J. H ST=0; //使采集信号为低- @4 S. j: Y# b, o
ST=1; //开始数据转换
& p2 `2 U% [: y/ N6 |$ Z ?; g ST=0; //停止数据转换* W* s2 E' C' h8 K" |' f7 V( G
while(!EOC); //等待数据转换完毕
& g% c9 S% D L9 Z8 R, n) Z4 i OE=1; //允许数据输出信号9 S8 K& A* Z# Q
AD0809=P1; //读取数据
. X4 ^9 i& p& ^ OE=0; //关闭数据输出允许信号
! b; _, d4 G' s( `, T% [- U3 Z if(AD0809>=251) //电压显示不能超过5V6 K. g; |# M1 Y
AD0809=250;
3 a, ?. x1 {' v* U) r% b date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值& k0 `8 T; o/ A4 S# R
xianshi(); //数码管显示函数
4 L* _% L4 r7 g) h9 Z+ C, m- y6 g- s delay(100);7 \9 w2 M0 C6 a& F [1 A1 n
}. E/ \1 G/ x* `1 }
} * a0 q( `" a( X2 a
! n! N0 _, a; h9 e' a
|
|