智能仪器-酒精浓度检测仪设计(2)

2018-12-19 23:08

邱微:基于单片机的便携式酒精浓度检测仪

3.3本设计中AD转换软件实现

3.3.1 ADC程序流程图

开始初始化判断ADC是否转换完毕YN读出数据计算

图3-2 ADC程序流程图

单片机对ADC进行初始化,使其能进入正常工作状态,通过判断ADC转换判断标志EOC,看其是否转换完毕,如果没有,则继续判断,如若完成则将ADC转换的数据由单片机读取并计算,然后进入下一环节。

3.3.2 ADC转换原则及程序

转换原则:ACD0804有八位数据输出口,即转换精度为256,它将最高值分为255份,当得到一个转换数据时,用最大值除以255,再乘以该数据值便是最终转换值。

AD转换子函数分析: void ad() { wr=0;

//将WR拉低,让芯片开始读6、7号引脚电压值

delay(1); //延时约一毫秒,让芯片忙完

wr=1; //将WR拉高,上升沿到来时,AD转换开始 delay(5); //软件延时约五毫秒,等待AD转换完成 P3=0xff; //将P3口全部拉高,等待测试数据 delay(1); //延时一会,避免紊乱 rd=0; //将RD拉低,芯片送出数据 delay(1); //延时约一毫秒,让P3口

6

辽宁工程技术大学智能仪器课程设计

temp=P3; //将数据存入temp

rd=1; //将RD拉高 }

4单片机最小系统模块设计

CPU最小系统是单片机运行工作起来所必需的最基本电路组成。它包括电源电路、时钟电路、复位电路。最小硬件电路组成见图4-1。

图4-1 最小系统电路图

4.1 AT89S52简介

本设计以AT89S52单片机为控制核心。单片机也就是MCU,即微控制单元。AT89S52 是低功耗、高性能、采用CMOS工艺的8位单片机,其片内具有8KB 的可在线编程的Flash 存储器,该单片机采用了ATMEL 公司的高密度、非易失性存储器技术,与工业标准型80C51 单片机的指令系统和引脚完全兼容,它能以3V的超低电压工作,晶振时钟最高可达24MHz。通用的8位CPU与在线可编程Flash 集成在一块芯片上,从而使AT89S52 功能更加完善,应用更加灵活;具有较高的性能价格比,使其在嵌入式控制系统中有着广泛的应用前景【5】。

4.2 复位电路设计

图4-2 复位电路电路图

单片机复位的两种基本形式:上电复位和RST按键复位。

7

邱微:基于单片机的便携式酒精浓度检测仪

本设计采用RST按键复位。在复位电路的设计中,要选择合适的元器件参数,电阻的阻值不宜过大或者过小,过大使得RST不可能获得高电平,过小也不能起到限流作用。另外电容容值也应该合适,要保证放电时,RST引脚上的高电平也能保持两个机器周期以上的高电平。

4.3 晶振电路设计

图4-3 晶振电路电路图

本系统中为了尽量降低功耗的原则,采用了内部时钟方式。晶振全称为晶体振荡器(英文Crystal Oscillators),其作用在于产生原始的时钟频率。内部时钟方式的电路实现方法是在XTAL1和XTAL2引脚外接石英晶体,与单片机片内震荡电路形成震荡回路,图中电容C3和C4的容值为22pF,它们的作用是加快起振和稳定频率。

5显示模块软硬件设计

5.1 LCD1602简介

LCD1602每行可以输出16个字符,可以显示两行,故称1602,它不带中文字库,故只能显示数字、字母和普通字符。1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。在本设计中不检测液晶的忙与闲,用前面对待ADC0804的方法,用软件延时来等待液晶的忙操作时间。

液晶显示输出D0到D7口接P0.0到 P0.7,单独使用一个口,另外还要接上10K上拉电阻来提高P0口带负载能力。

当处于读状态时,RS处于低脉冲,R/W为高脉冲,E为高脉冲,D0~D7=状态字 当处于读数据时,RS为高脉冲,R/W为高脉冲,E为高脉冲,D0~D7=数据。 当处于写指令时,RS为低脉冲,R/W为低脉冲,D0~D7=指令码,E=高脉冲。 当处于写数据时,RS为高脉冲,R/W为低脉冲,E为高脉冲,D0~D7=数据。

5.2本设计中LCD1602的硬件连接

8

辽宁工程技术大学智能仪器课程设计

图5-1 LCD1602硬件连接图

5.3液晶写命令子函数和写数据子函数程序分析

在初始化函数void init(){…}中,已将R/W拉低(对应lcden=0;语句),即只对液晶进行写操作,不读液晶状态。

之前有位定义sbit lcdrs=P2^5; sbit lcdrw=P2^6; sbit lcden=P2^7; 写命令函数各语句分析: void write_com(uchar com)

{ lcdrs=0; //将RS拉低,对指令操作, 上电时是默认高电平 P0=com; //对P0赋值,该值是对应命令码 ,com为形参 delay(5); //延时约五毫秒

lcden=1; //E拉高,让液晶读P0口,写入对应命令码

delay(5); //延时约五毫秒,让液晶忙完再对其操作,防止数据丢失 lcden=0; //将E拉低 } 写数据函数各语句分析: void write_com(uchar da)

{ lcdrs=1; //将RS拉低高(读写数据),说明对数据操作 P0=da; //对P0赋值,该值是要写入的数据 ,da为形参 delay(5); //延时约五毫秒

lcden=1; //E拉高,让液晶读P0口,写入数据

delay(5); //延时约五毫秒,让液晶忙完再对其操作,防止数据丢失

9

邱微:基于单片机的便携式酒精浓度检测仪

lcden=0; //将E拉低 }

值得注意的是,在写数据的操作中,写入的都是字符ASCII码,例如想写1,让液晶在某处显1,可写write_data(’1’);或者write_data(0x30+1)。

5.4 本设计中用的液晶指令介绍

一些指令码的介绍:

0x38:液晶初始化指令,让液晶按每行显示16个字符,显示两行,并且每个字符显示处的点阵为5X7;

0x0C:不显示光标,光标不闪烁;

0x06:在写入一个数据后地址自动加一,显示不移动;

1即0x01:清屏指令,即将液晶内部存储数据清楚,地址指针指向零; 0x80+……:设置写入数据的地址,所加的就是对应地址。

5.5字符串显示和数据实时更新的实现

1)写字符串子程序: void write_str(uchar *p) {while(*p)

write_data(*p++);}

这里灵巧的应用了数组指针,比传统的for嵌套循环写入方便很多。用while(*p)……自动检测是否写完,当写完后指针变为零,跳出循环。如想写入\只需先定义数组uchar code str[]=\,再写语句write_str(str);写完后指针变为零,自动结束。

2)数据实时更新的实现方法,检测时不断调用显示子函数,display(); 显示函数如下: void display() {

uint value; //定义局部变量value uchar a,b,c; //定义局部变量a、b、c

value=3.92*temp; //获得value值,它是以ppm为单位 a=value/100; //a为value的百位

10


智能仪器-酒精浓度检测仪设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第八章 分类成本法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

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