空气质量检测仪C程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
空气质量检测仪C程序
程序代码
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Data P0 //数据端口
/*****1602管脚定义*****/
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
/******AD管脚定义*****/
sbit STA=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
/*****按键管脚定义******/
sbit key_U=P2^0;
sbit key_D=P2^1;
sbit key_L=P2^2;
sbit key_R=P2^3;
sbit key_S=P2^4;
/******报警用管脚******/
sbit beep=P3^4;
sbit led1=P3^5;
sbit led2=P3^6;
unsigned char num=0;//记录设定键按下次数
unsigned char k_flag=0;//记录设置键按下次数(用于调用)
unsigned char wei=0;//光标位置
unsigned char c_num=0;//记录切换键按下次数
unsigned char c_flag=0;//记录切换键按下次数(用于调用)
unsigned char voc_ad;//AD读取数据
unsigned char flag;//DHT11函数用到
/****************************/
sbit DHT=P3^7;
uchar WEN1[]="wen:16.00-28.00";//温度第一行数据uchar WEN2[]=" 00.00 "; //温度第二行数据uchar SHI1[]="shi:30.00-70.00";//湿度第一行数据uchar SHI2[]=" 00.00 "; //湿度第二行数据uchar VOC1[]="voc:0.00-2.70 ";//湿度第一行数据
uchar VOC2[]=" 0.00 "; //湿度第二行数据unsigned char shiZ,shiX,wenZ,wenX,check;
unsigned char tr_shiZ,tr_shiX,tr_wenZ,tr_wenX;
/*********延时*******************************/
void delay_1ms(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
void delay_10us()
{
unsigned char i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void DelayUs(unsigned char us)//--延时函数
{
unsigned char uscnt;
uscnt=us>>1; /*12MHz频率*/
while(--uscnt);
}
/*******1602显示*******************************************/ /**********写命令**********/
void lcd_write_com(uchar c)
{
delay_1ms(5);//操作前短暂延时,保证信号稳定
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/**********写数据*************/
void lcd_write_dat(uchar c)
{
delay_1ms(5); //操作前短暂延时,保证信号稳定
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/**********LCD初始化********/
void lcd_init()
{
delay_1ms(15);
lcd_write_com(0x38); //display mode
lcd_write_com(0x38); //display mode
lcd_write_com(0x38); //display mode
lcd_write_com(0x06); //显示光标移动位置
lcd_write_com(0x0c); //显示开及光标设置
lcd_write_com(0x01); //显示清屏
}
/*********显示单个字符**********/
void ShowChar(uchar pos,uchar c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高4位为0xc else
p=pos+0x80; //是第二行则命令代码高4位为0x8 lcd_write_com(p);//写命令
lcd_write_dat(c); //写数据
}
/*********显示字符串**********/
void ShowSt
ring (uchar line,char *ptr) {
unsigned char l,*p;
p=ptr;
l=line<<4;
while((*p)!='\0')
{
ShowChar(l++,*(p));
p++;