单片机控制二氧化碳传感器程序_第1页
单片机控制二氧化碳传感器程序_第2页
单片机控制二氧化碳传感器程序_第3页
单片机控制二氧化碳传感器程序_第4页
单片机控制二氧化碳传感器程序_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上#include <reg52.h> /头文件#include <intrins.h>#define uchar unsigned char /宏定义无符号字符型#define uint unsigned int /宏定义无符号整型typedef unsigned char BYTE;typedef bit BOOL; sbit ST=P30; /A/D启动转换信号sbit OE=P31; /数据输出允许信号sbit EOC=P32; /A/D转换结束信号sbit CLK=P33; /时钟脉冲 sbit LCD_RS = P20; sbit L

2、CD_RW = P21;sbit LCD_EN = P22;uchar m;uint AD0809,i,cdisplay,ppm;uint ppmdou;/定义数据类型void delay(int ms) / 延时子程序while(ms-) for(i = 0; i< 250; i+) _nop_(); _nop_(); _nop_(); _nop_(); BOOL lcd_bz() / 测试LCD忙碌状态BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)

3、(P0 & 0x80);LCD_EN = 0;return result; void lcd_wcmd(BYTE cmd) / 写入指令数据到LCDwhile(lcd_bz();LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_(); P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0; void lcd_pos(BYTE pos) /设定显示位置lcd_wcmd(pos | 0x80);void lcd_w

4、dat(BYTE dat) /写入字符显示数据到LCDwhile(lcd_bz();LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0; void lcd_init() /LCD初始化设定lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据delay(1);lcd_wcmd(0x0c); /显示开,关光标delay(1);lcd_wcmd(0x06); /移动光标delay(1

5、);lcd_wcmd(0x01); /清除LCD的显示内容delay(1);void timer0( ) interrupt 1 /定时器0工作方式1TH0=(65536-2)/256; /重装计数初值TL0=(65536-2)%256; /重装计数初值CLK=!CLK; /取反 /* 主函数*/ void main() lcd_init(); / 初始化LCD delay(10);TMOD=0X01; /定时器中断0CLK=0; /脉冲信号初始值为0TH0=(65536-2)/256; /定时时间高八位初值TL0=(65536-2)%256; /定时时间低八位初值EA=1; /开CPU中断E

6、T0=1; /开T/C0中断TR0=1;ST=0;OE=0; while(1) /无限循环ST=0;/使采集信号为低ST=1;/开始数据转换ST=0;/停止数据转换while(!EOC);/等待数据转换完毕OE=1;/允许数据输出信号m=P1; /读取数据OE=0; /关闭数据输出允许信号 AD0809=(uint)m; cdisplay = (uint)(AD0809*(5.00/255)*1000); if(cdisplay>1072) ppm=400; else if(1049<cdisplay)&&(cdisplay<=1072) ppmdou = (

7、500-(cdisplay-1049)*(100/(1072-1049);ppm = (uint)ppmdou; else if(1036<cdisplay)&&(cdisplay<=1049) ppmdou = (600-(cdisplay-1036)*(100/(1049-1036); /ppmdou = (500-(ppmd-1049)*(100/(1072-1049);ppm = (uint)ppmdou; else if(1023<cdisplay)&&(cdisplay<=1036) ppmdou = (700-(cdispl

8、ay-1023)*(100/(1036-1023); ppm = (uint)ppmdou; else if(1016<cdisplay)&&(cdisplay<=1023) ppmdou = (800-(cdisplay-1016)*(100/(1023-1016); ppm = (uint)ppmdou; else if(1006<cdisplay)&&(cdisplay<=1016) ppmdou = (900-(cdisplay-1006)*(100/(1016-1006); ppm = (uint)ppmdou; elseif(

9、1000<cdisplay)&&(cdisplay<=1006) ppmdou = (1000-(cdisplay-1000)*(100/(1016-1000); ppm = (uint)ppmdou; else if(966<cdisplay)&&(cdisplay<=1000) ppmdou = (2000-(cdisplay-966)*(1000/(1000-966); ppm = (uint)ppmdou; else if(947<cdisplay)&&(cdisplay<=966) /2000-300

10、0 ppmdou = (3000-(cdisplay-947)*(1000/(966-947); ppm = (uint)ppmdou; else if(924<cdisplay)&&(cdisplay<=947)/3000-4000 ppmdou = (4000-(cdisplay-924)*(1000/(947-924); ppm = (uint)ppmdou; else if(907<cdisplay)&&(cdisplay<=924)/4000-6000 ppmdou = (6000-(cdisplay-907)*(2000/(9

11、24-907); ppm = (uint)ppmdou; else if(891<cdisplay)&&(cdisplay<=907)/6000-8000 ppmdou = (8000-(cdisplay-891)*(2000/(907-891); ppm = (uint)ppmdou; else if(874<cdisplay)&&(cdisplay<=891)/8000-10000 ppmdou = (10000-(cdisplay-874)*(2000/(891-874); ppm = (uint)ppmdou; else if(0<cdisplay)&&(cdisplay<=874)/8000-10000 ppm = 10000; lcd_pos(0x81); lcd_wdat(ppm/10000+0x30); lcd_pos(0x82); lcd_wdat(ppm%10000)/1000+0x30); lcd_pos(0x83); lcd_wdat(ppm%1000)/100+0x30); lcd_pos(0x84); lcd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论