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

智能酒精浓度探测仪(3)

来源:网络收集 时间:2019-04-23 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

4.2 复位电路设计

图4-2 复位电路电路图

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

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

4.3 晶振电路设计

图4-3 晶振电路电路图

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

11

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=数据。

12

5.2本设计中LCD1602的硬件连接

图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)

13

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

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

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

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)……自动检测是否写完,当写完后指针变为零,跳出循环。如想写

14

入\只需先定义数组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的百位 b=value0/10; //b为value的十位 c=value; //c为value的个位

write_com(0x80+0x40+4); //将数据写在第二行,第五个字符处 write_data(0x30+a); //在第二行,第五个字符处写入value百位

write_com(0x80+0x40+5); //将数据写在第二行,第六个字符处 write_data(0x30+b); //在第二行,第六个字符处写入value十位

write_com(0x80+0x40+6); //将数据写在第二行,第七个字符处 write_data(0x30+c); //在第二行,第七个字符处写入value个位

}

在循环语句中不断调用AD转换程序, ad();,又不断调用显示函数,数据就能实时检测更新。

在待机时,循环程序中不断执行语句:

write_com(0x80+6); //将数据写在第一行,第七个字符处

15

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库智能酒精浓度探测仪(3)在线全文阅读。

智能酒精浓度探测仪(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/621866.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: