第一范文网 - 专业文章范例文档资料分享平台

一种基于51单片机的粉尘监测系统的设计—定稿 - 图文

来源:用户分享 时间:2025/5/23 7:09:15 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

附录2:系统设计部分源程序

#include\ //添加LCD1602头文件 #include\添加ADC0832头文件 //#include\

sbit BUZZER = P1^3; //蜂鸣器驱动端口==P1^2

sbit Reduc = P1^7; //按键键输入端口==P1^7 sbit Add = P3^0; //按键加输入端口==P3^1

sbit vled = P3^2;

void Delay1us(uint t) //@12MHz {

while(t--)_nop_(); }

uint read_data(uchar N) {

uint val=0; vled=0;

Delay1us(20); val=adc0832(N); vled=1;

Delay1us(400); return val; }

/************************************************ ** 函数名称 : void main(void) ** 函数功能 : 主函数 ** 输 入 : 无 ** 输 出 : 无 ** 说 明 :

************************************************/ void main(void) {

double PM,pm1,pm2;

int PMVAL=0,HPM=200,PM_count=0,pm1_count=0;

28

uchar bueezr_flag=0,bueezr_count=0,buzzer_time=25;//蜂鸣器报警变量 LCD_Init();

WriteChar(1,0,16,\ WriteChar(2,0,16,\while(1) { Delay(120); pm1+=read_data(1); if(++PM_count>=40) { PM_count=0; pm1=pm1/40; pm2+=pm1; if(++pm1_count>=3) { PM=pm2/3; PM=PM*50/255; PM-=4; PM/=5; PM*=1000; PMVAL=PM; PMVAL+=235; if(PMVAL>=9999)PMVAL=9999; if(PMVAL<=0)PMVAL=0; WriteCOMDATA(0x83,0); WriteCOMDATA(PMVAL/1000+0x30,1); WriteCOMDATA(PMVAL/100+0x30,1); WriteCOMDATA(PMVAL/10+0x30,1); WriteCOMDATA(PMVAL+0x30,1); PM=pm1=pm2=0; } } //PM值与报警值比较 if(PMVAL>HPM) { bueezr_flag=1; } else { bueezr_flag=0;

29

BUZZER=1; } if(PMVAL>=100) WriteChar(1,12,4,\ else if((PMVAL<100)&&(PMVAL>=50)) WriteChar(1,12,4,\ else if(PMVAL<50) WriteChar(1,12,4,\ /*******蜂鸣器报警********/

bueezr_count++;if(bueezr_count>buzzer_time*10)bueezr_count=buzzer_time+1; if(bueezr_count%buzzer_time==0 && bueezr_flag) { BUZZER=~BUZZER;//蜂鸣器取反 发出声音提示 } if(!Reduc) { Delay(100); HPM--; WriteCOMDATA(0xC7,0); WriteCOMDATA(HPM/1000+0x30,1); WriteCOMDATA(HPM/100+0x30,1); WriteCOMDATA(HPM/10+0x30,1); WriteCOMDATA(HPM+0x30,1); } if(!Add) { Delay(100); HPM++; WriteCOMDATA(0xC7,0); WriteCOMDATA(HPM/1000+0x30,1); WriteCOMDATA(HPM/100+0x30,1); WriteCOMDATA(HPM/10+0x30,1); WriteCOMDATA(HPM+0x30,1); } } }

/************************************************ * 编写时间: 2016.05.09

30

* 作 者: liuweiliang

* 程序功能: LCD1602头文件

* 使用说明: 在需要使用LCD1602显示时添加此头文件“LCD1602.h” ************************************************/ #ifndef __LCD1602_H__ #define __LCD1602_H__ #include\ //添加延时函数头文件 #define LCD_PINDATA P0 //数据端口定义 P2 sbit RS = P1^4; //RS P0^7 sbit RW = P1^5; //RW P0^6 sbit E = P1^6; //E P0^5

/************************************************

** 函数名称 : WriteCOMDATA(uchar LCD_DATA,uchar N) ** 函数功能 : LCD1602写指令、数据函数 ** 输 入 : LCD_DATA:指令或者数据 N:指令方式还是数据方式 N=0时,LCD_DATA为指令,N=1时,LCD_DATA为数据 ** 输 出 : 无 ** 说 明 :

************************************************/ void WriteCOMDATA(uchar LCD_DATA,uchar N) {

Delay(1); E=1; RW=0; RS=N;

LCD_PINDATA=LCD_DATA; E=0; }

/************************************************ ** 函数名称 : void LCD_init(void) ** 函数功能 : LCD1602初始化操作 ** 输 入 : 无 ** 输 出 : 无 ** 说 明 :

************************************************/ void LCD_Init(void) {

WriteCOMDATA(0x01,0); Delay(500);

31

一种基于51单片机的粉尘监测系统的设计—定稿 - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c727u1178pf4n25r6n2d3_9.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top