单片机PM2.5浓度检测仪毕业设计论文豪华版 - 图文(6)

2025-08-08

第四章、程序设计及软件应用

4.1、主程序设计

主程序代码: /*****主函数*****/ void main(void) { InitTimer(); //初始化定时器 LED=1; LED2=1; LED3=1; LED4=1; BEEP=0; lcd_init(); //初始化显示 delay1ms(100); lcd_init(); //初始化显示 delay1ms(100); while(1) {

checkkey(); //按键检测 if(set_st==0) { wr_com(0x0c);

if(FlagStart==1) //1次数据采集完成 { num++; ADC_Get[num]=abc; if(num>9) { num=0; DUST=Error_Correct(ADC_Get,10); //求取10次AD采样的值 DUST_Value=(DUST/256.0)*5000; //转化成电压值MV DUST_Value=DUST_Value*0.17-0.1; //固体悬浮颗粒浓度计算 Y=0.17*X-0.1 X--采样电压V if(DUST_Value<0) DUST_Value=0; if(DUST_Value>760) DUST_Value=760; //限位 DUST=(uint)DUST_Value; } TL0 = (65536-10000)/256; TH0 = (65536-10000)%6; TR0 = 1; //开启定时器0

22

EA = 1; FlagStart=0; }

Alarm(); //报警检测 }

disp(DUST); //显示粉尘浓度值 baojing(); //显示报警值

if(set_st==1) //报警值闪动 { wr_com(0xca); wr_com(0x0d); delay1ms(150); } }

}/*****END*****/

说明:详细子函数请见附录3 主程序框图:

4.2、主要子函数的设计

除主程序外,程序设计中还定义了一些函数,方便主程序调用,主要有液晶

23

初始化程序,显示函数,报警显示,报警子函数,按键检测函数,A/D转换函数,中值滤波等。以下主要介绍A/D转换函数。 单片机对ADC0832 的控制原理:

正常情况下ADC0832 与单片机的接口应为 4条数据线,分别是 CS、CLK、DO、DI。但由于 DO端与 DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO 和 DI并联在一根数据线上使用。(见图 3)当 ADC0832未工作时其CS 输入端应为高电平,此时芯片禁用,CLK 和

DO/DI 的电平可任意。当要进行 A/D转换时,须先将 CS使能端置于低电平并 且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯 片时钟输入端 CLK 输入时钟脉冲,DO/DI 端则使用 DI端输入通道功能选择的 数据信号。在第 1 个时钟脉冲的下沉之前 DI端必须是高电平,表示启始信号。 在第 2、3 个脉冲下沉之前 DI端应输入 2位数据用于选择通道功能,其功能项 见下表 。

如表 1 所示,当此 2 位数据为“1”、“0”时,只对 CH0 进行单通道转换。 当 2 位数据为“1”、“1”时,只对 CH1进行单通道转换。当 2 位数据为“0”、“0”时,将 CH0作为正输入端 IN+,CH1作为负输入端 IN-进行输入。当 2 位数据为“0”、“1”时,将 CH0作为负输入端 IN-,CH1作为正输入端 IN+进行输入。到第 3 个脉冲的下沉之后 DI端的输入电平就失去输入作用,此后 DO/DI端则开始利用数据输出DO 进行转换数据的读取。从第4个脉冲下沉开始由 DO端输出转换数据最高位DATA7,随后每一个脉冲下沉 DO端输出下一位数据。直到第11个脉冲时发出最低位数据 DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第 11个字节的下沉输出 DATD0。随后输出 8位数据,到第 19 个脉冲时数据输出完成,也标志着一次 A/D 转换的结束。最后将 CS 置高电平禁

24

用芯片,直接将转换后的数据进行处理就可以了。 更详细的时序说明请下表:

作为单通道模拟信号输入时ADC0832的输入电压是 0~5V且8位分辨率时的电压精度为 19.53mV。如果作为由 IN+与 IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行 IN+与 IN-的输入时,如果 IN-的电压大于 IN+的电压则转换后的数据结果始终为00H。 ADC0832 数据读取程序流程:

实际程序设计代码为:

/***********AD0832转换程序******************/

uchar ADC0832(bit mode,bit channel) //AD转换,返回结果 { uchar i,dat,ndat;

25

ADCS = 0;//拉低CS端 _nop_(); _nop_();

ADDI = 1; //第1个下降沿为高电平 ADCLK = 1;//拉高CLK端 _nop_(); _nop_();

ADCLK = 0;//拉低CLK端,形成下降沿1 _nop_(); _nop_();

ADDI = mode; //低电平为差分模式,高电平为单通道模式。 ADCLK = 1;//拉高CLK端 _nop_(); _nop_();

ADCLK = 0;//拉低CLK端,形成下降沿2 _nop_(); _nop_();

ADDI = channel; //低电平为CH0,高电平为CH1 ADCLK = 1;//拉高CLK端 _nop_(); _nop_();

ADCLK = 0;//拉低CLK端,形成下降沿3

ADDI = 1;//控制命令结束(经试验必需) dat = 0;

//下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)for(i = 0;i < 8;i++) { dat <<= 1; ADCLK=1;//拉高时钟端 _nop_(); _nop_(); ADCLK=0;//拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); dat |= ADDO; }

ndat = 0; //记录D0 if(ADDO == 1) ndat |= 0x80;

//下面开始继续读取反序的数据(从D1到D7)

26


单片机PM2.5浓度检测仪毕业设计论文豪华版 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:汽车之家环境分析

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219