ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:449.89KB ,
资源ID:20556194      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20556194.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(#基于STC89C52酒精浓度测试44451Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

#基于STC89C52酒精浓度测试44451Word格式.docx

1、ALE :当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。 :程序储存允许()输出是外部程序存储器的读选通信号,当89C5X单片机由外部程序存储器取指令(或数据)时,每个机器周期两次 有效,即输出两个脉冲。在次期间,当访问外部数据存储器,将跳过两次 信号。 /VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFH), 端必须保持低电平(接地)。XTAL1:振荡器反相放大器及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输

2、出端2.1.2 MQ-3酒精传感器MQ-3酒精传感器对乙醇蒸气有很高的灵敏度,并且响应和恢复快速。另外,MQ-3酒精传感器简单的驱动回路和可靠的稳定性是相比较于其他型号传感器的优点。MQ-3酒精传感器可用于机动车驾驶人员及其他严禁酒后作业人员的现场检测,也可用于其他场所乙醇蒸气的检测。MQ-3酒精传感器有6只针状管脚,其中4个管脚(两个A和两个B)用于信号读取,两个H脚用于提供加热电流。电路图如下图3:图3 MQ-3传感器电路原理图2.1.3 TLC549模数转换TLC549是 TI公司生产的一种低价位、高性能的8位 A/D转换器,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于

3、 17us,最大转换速率为 40000HZ,4MHZ典型内部系统时钟,电源为 3V至 6V。它能方便地采用三线串行接口方式和各种微处理器连接,构成各种廉价的测控使用系统。TLC549有8引脚,为双列直插是封装,起相应引脚功能如下:REF+:正基准电压输入 2.5VREF+Vcc+0.1。 REF:负基准电压输入端,-0.1VREF-2.5V。且要求:(REF+)(REF-)1V。VCC:系统电源3VVcc6V。GND:接地端。:芯片选择输入端,要求输入高电平 VIN2V,输入低电平 VIN0.8V。DATA OUT:转换结果数据串行输出端,和 TTL 电平兼容,输出时高位在前,低位在后。ANA

4、LOGIN:模拟信号输入端,0ANALOGINVcc,当 ANALOGINREF+电压时,转换结果为全“1”(0FFH),ANALOGINREF-电压时,转换结果为全“0”(00H)。I/O CLOCK:外接输入/输出时钟输入端,同于同步芯片的输入输出操作,无需和芯片内部系统时钟同步。在实际使用过程中,起时序图如图4所示。图4 TLC549时序图2.1.4 LCD1602液晶显示LCD1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用161,162,202和402行等的液晶显示模块,模块组件内部主要由LCD显示屏、控制器、列驱动器和偏压产生电路构成。2.2软件

5、设计2.2.1 编译语言的选择对于单片机的开发使用中,逐渐引入了高级语言,C语言就是其中的一种。汇编语言的可控性较高级语言来说更具优越性。程序编写语言比较常见的有C语言、汇编语言。汇编语言的机器代码生成效率高,控制性好,但就是移植性不高。C语言编写的程序比用汇编编写的程序更符合人们的思考习惯。还有很多处理器都支持C编译器,这样意味着处理器也能很快上手。且具有良好的模块化、容易阅读、维护等优点,且编写的模块程序易于移植。基于C语言和汇编语言的优缺点,本系统采用C语言编写方法。软件编写的主体思路是将系统按功能模块化划分,然后根据模块要实现的功能写各个子程序。整个软件程序的编写采用查询式方式编写的。

6、2.2.2 主程序模块主程序实现的功能:和硬件相结合实现酒精浓度检测系统的各个功能。主要是检测和显示,门限调整和显示,检测数据显示功能子函数的调用。见图5图5 主程序流程图2.2.3 A/D转换模块(1)模数转换模块的主要功能就是将经放大器放大的模拟电压信号转化为MCU能够处理的数字信号,并传送给MCU。(2)TLC549转换的流程图见下图6图 6 数转换流程图当变为低电平后, TLC549芯片被选中, 同时前次转换结果的最高有效位MSB (A7)自 DATA OUT 端输出,接着要求自 I/O CLOCK 端输入8个外部时钟信号,前7个 I/O CLOCK信号的作用,是配合 TLC549 输

7、出前次转换结果的 A6-A0 位,并为本次转换做准备:在第4个 I/O CLOCK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个 I/O CLOCK 信号的下降沿使片内采样/保持电路进入保持状态并启动 A/D开始转换。转换时间为 36 个系统时钟周期,最大为 17us。直到 A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者保持高电平,或者 I/O CLOCK 时钟端保持36个系统时钟周期的低电平。由此可见,在自 TLC549的 I/O CLOCK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启

8、动本次 A/D转换开始。2.2.4 按键输入模块(1)按键时显现人机对话的一个控制按钮,通过按键的操作,对系统进行发送操作指令,后经和MCU串行通信,然后在液晶上显示。(2)按键查询式的流程图见下图7:图 7 按键查询式的流程图按键的四个键分别接P1.0,P1.1,P1.2,P1.3,由于P1口具有上拉电阻,所以不再需要加上拉电阻进行电压的放大。2.2.5 液晶显示输出模块LCD1602模块在本系统中主要起着开界面数字显示,以及各控制效果的显示。采用直接访问方式。液晶显示的操作流程图见下图8:图8 液晶显示的操作流程图液晶显示D0到D7口接P0.0到 P0.7,单独使用一个口,为了避免数据的干

9、扰,由于P0口没有上拉电阻,所以需要一个排阻进行电压的扩大.3.实验结果 本次设计的酒精浓度检测系统,通过设计相关的硬件电路及进行相应的软件调试,最后实现了实时检测酒精浓度,并的在LCD1602上显示的目的。设计出的电路,完全符合本次实验的设计要求,通过按键可以实现调整门限值,对于检测到的酒精浓度高于设定门限值时,会显示实时酒精浓度值,系统会自动实现灯光报警功能。硬件成品图 硬件上电开机界面酒精浓度低 红灯不报警 酒精浓度高 红灯报警4.心得体会通过本次课程设计,让我重新的系统的复习了微机原理和单片机方面的知识,收获颇丰。首先,对于以前学习过的有关单片机方面的知识,在设计电路过程中又有了新的认

10、识,对于各种概念的理解也有了提高。在做板的过程中要非常小心。硬件调试过程是相对繁锁的,要特别注意以下几点。其一,通电之后看AT89S51晶振是否起振,晶振起振后是标准的正弦波,示波器测得其频率为11.0592MHz;其二,硬件电路的设计既要追求实际功能的实现,也要考虑元器件的购买方便。在本次课设中学到的知识,我将它们发挥到其他的学习中去,也将在今后的学习中不断的提高和完善;而在此期间发现的不足,我将努力改善,通过学习实践等方式不断提高,克服那些知识障碍,以求在今后的学习过程中获得更大的进步!附录附录1 参考文献1微机原理及使用 黄冰等编著 重庆:重庆大学出版社 ,20032 李维提,郭强液晶显

11、示使用技术 北京:电子工业出版社,20003基于Proteus的电路及单片机系统设计和仿真 周润景等编著 北京:北京航空航天大学出版社,20064单片机实验和实践教程万光毅等编著 北京:5单片机人机接口实例集公茂法等编著 北京:北京航空航天大学出版社,19976单片机使用设计200例张洪润等编著 北京:7单片机程序设计实例先锋工作室编著 北京:清华大学出版社,20038单片机C语言编程和实例赵亮,侯国锐编著 北京:人民邮电出版社,20039新编MCS-51单片机使用设计张毅刚等编著 哈尔滨:哈尔滨工业大学出版社,2004附录2 硬件电路原理图附录3 硬件电路PCB图附录4 程序清单主程序 ma

12、in.c#includeintrins.h/*宏定义*/ #define uint unsigned int#define uchar unsigned charsbit k0=P10; /start the systemsbit k1=P11; /setup the stand_valuesbit k2=P12; /the stand_value upsbit k3=P13; /the stand_value downsbit alarm=P20; /the alarm port/*变量及字符串的定义*/uchar LCD_Char=0123456789ABCDEF-.;uchar LCD_

13、string0=welcome to guetuchar LCD_string1=102021226uchar M_Time=2011-9-8/ show timeuchar M_Detect=Detect: /检测 uchar M_Detect1=Alcohol:uchar M_Detect2=set_val:/uchar M_time1=Time; /时间/uchar M_Storage=Storage /memoryuint data_temp=0;uint flag=0;/*函数声明*/ extern void initial_lcd1602(void);extern void Dis

14、play_List_Char(uchar x,uchar y,uchar *str); /the extern have no mean ,only to explain the function is in the other fileextern void write_lcd_command( uchar write_data); /the function of write commandextern void Display_One_Char(uchar x,uchar y,uchar dat);extern void xs_int(unsigned int shuju,bit t);

15、extern unsigned char ADconv(void);extern void display(unsigned int shuju,bit t);/*子函数*/ void delay_ms(uint n) uint i,j; /delay 10ms for(i=n;i0;i-) for(j=1200;jj-) _nop_(); /*主函数*/ void main() uint set_value=200; /is mean 20.0mg/ml ; the big_value is 800.0mg/ml mean alcohol; alcohol drive is 20.0mg/1

16、00ml=0.2mg/ml uchar data_char=0; initial_lcd1602(); delay_ms(100); Display_List_Char(0,0,LCD_string0); /welcome /delay 3s Display_List_Char(1,0,LCD_string1); delay_ms(300); write_lcd_command(0x01); /clean screen Display_List_Char(0,0,M_Time); /show time delay_ms(30); Display_List_Char(1,0,M_Detect);

17、 /show detect interface/ Display_List_Char(1,0,M_Detect);/ delay_ms(300);while(1) _nop_();if(k0=0|k1=0|k2=0|k3=0) if(k0=0) flag=0; Display_List_Char(1,0,M_Detect1); delay_ms(50); data_char=ADconv(); data_temp=data_char; delay_ms(10); xs_int(data_temp,1); if(data_temp=set_value) alarm=0; else alarm=1

18、; if(k1=0) Display_List_Char(1,0,M_Detect2); xs_int(set_value,1); flag=1; if(k2=0&flag=1) if(k2=0) set_value=set_value+10; if(k3=0& if(k3=0) set_value=set_value-10;显示程序 LCD1602.cstring.h#define uint unsigned int #define LCDPORT P0sbit RS=P25; /RS数据命令选择端,高电平数据,低电平命令sbit RW=P26; /RW读写选择端,高电平读操作,低电平写操作

19、sbit EN=P27; /EN使能控制端,E高电平跳变为低电平时LCD执行命令/*LCD1602驱动程序*/void lcd_delay(uchar delaytime) while(delaytime)delaytime-;void write_lcd_command(uchar write_command) lcd_delay(40); RS=0; RW=0; LCDPORT=write_command; EN=1; EN=0;void write_lcd_data(uchar write_data) RS=1; LCDPORT=write_data;void Display_One_C

20、har( uchar x,uchar y,uchar dat) /x表示行,y表示列 switch(x) case 0: write_lcd_command(0x80+y); break; case 1: write_lcd_command(0xc0+y); write_lcd_data(dat); void Display_List_Char(uchar x,uchar y,uchar *str)/* switch(x) while (*str!=0) write_lcd_data(*str); str+;*/ Display_One_Char(x,y,*str); str+; y+; if

21、(y=16) /若y等于16,进入if语句 y=0;x=1; / y赋0,x和1按位异或取反 void xs_int(unsigned int shuju,bit t) /显示一个数字unsigned int huancun6=0;unsigned char biaozhi=0,i;if (shuju 10) biaozhi = 1;else if(shuju 100) biaozhi = 2; 1000) biaozhi = 3; 10000) biaozhi = 4;=65535) biaozhi = 5;switch(biaozhi) case 5:huancun0 = shuju/10

22、000; case 4:huancun5 = shuju%10000/1000; case 3:huancun4 = shuju%1000/100; case 2:huancun3 = shuju%100/10;huancun1 = shuju%10;break; default:for(i=6;1; if(i=3)Display_One_Char(t,12,.); else Display_One_Char(t,15-i,0x30+huancuni-1);Display_One_Char(t,14,mDisplay_One_Char(t,15,gvoid display(unsigned int shuju,bit t) /显示一个数字huancun5 = shuju/10000;huancun4 = shuju%10000/1000;huancun3 = shuju%1000/100;huancun2 =

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1