




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 说 明 书课程设计名称 单片机原理及应用课程设计 专 业 电子信息工程 班 级 学 号 学生姓名 指导教师 课 程 设 计 任 务 书课程设计题目酒精测试仪起止日期2016年 12月 26 日 2017 年1月6日设计地点计算机科学与工程学院单片机实验室3409设计任务及日程安排:设计任务:分两部分:(一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、实现;1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速6.电子音乐发声(自己选曲) 7.键盘液晶显示系统(二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。查资料选定题目。说明:
2、第1-7题任选其二即可。(二)里题目自拟。日程安排:本次设计共二周时间,日程安排如下:第1天:查阅资料,确定题目。第2-4天:进实验室做实验,连接硬件并编写程序作相关的模块实验。第5-7天:编写程序,并调试通过。观察及总结硬件实验现象和结果。第8-9天:整理资料,撰写课程设计报告,准备答辩。第10天:上交课程设计报告,答辩。设计报告要求:1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每位同学独立完成。2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序设计。内容包括:1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清
3、单与注释4) 总结 5) 参考资料 6)附录 实验上机调试内容注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计的依据。目录第一部分:自主设计课设:酒精测试仪11 总体方案设计11.1 设计要求11.2优点及意义11.3 系统硬件电路设计11.4初步设计思路22 硬件电路设计22.1酒精检测模块22.2显示模块22.3报警模块32.4 cpu控制模块43应用软件设计53.1 主程序设计53.2 子程序设计63.2.1 显示子程序设计63.2.2报警子程序设计73.2.3 酒精检测子程序设计84 系统调试与性能分析84.1 开机界面84.2 浓度判断84.3 阈值修改9总结:9参考
4、文献9附录10附录a 硬件电路图10附录b 程序清单11第二部分:课堂设计内容:温度测量系统161 实验目的162实验内容163实验原理164实验步骤165 流程图:176 程序清单:18第一部分:自主设计课设:酒精测试仪1 总体方案设计1.1 设计要求 本课题要求以单片机为核心,设计一个酒精测试仪,由四部分组成:酒精检测模块,显示模块,报警模块,cpu控制模块。cpu控制模块采用stc89c52单片机进行控制。酒精传感器采用mq-sensor传感器模块和adc0809模数转换模块用于对人呼出酒精气体的酒精度检测,显示模块采用1602液晶显示,报警电路采用蜂鸣器。要求酒精测试仪有以下功能:(1
5、) 酒精浓度通过1602液晶显示模块显示出来(2) 酒精浓度超过设定的阈值则蜂鸣器发声进行报警。1.2优点及意义本课题采用51单片机进行控制,51单片机具有体积小、运行速度快的特点,用其作为主控芯片进行控制会十分的方便。使用mq-sensor气体传感器模块能够快速,准确的检测到酒精浓度,使用1602模块进行显示,直观,方便。1.3 系统硬件电路设计系统硬件设计框图。根据设计要求,确定系统的设计方案,硬件由四部分组成。采用stc89c52单品机为cpu控制模块,以mq-sensor传感器模块和adc0809模块组成检测模块,以1602液晶显示组成显示模块,以蜂鸣器组成报警模块。cpu处理模块st
6、c89c52报警模块蜂鸣器检测模块mq-sensor+adc0809显示模块1602液晶屏1.4初步设计思路(1) 定义三组数组表,方便1602显示时进行调用(2) 将adc0809的数据输出端接在单片机的p2口(3) 将mq-sensor酒精传感器的ttl输出端接在单片机p1.7口,将ao模拟量输出端接到adc0809的in0通道。(4) 将1602的数据输入端接到单片机p0口(5) 将蜂鸣器接到单片机p3.3口。2 硬件电路设计2.1酒精检测模块传感器模块采用mq-sensor酒精传感器,其模拟量输送给adc0809进行模数转换,将输出数据发给单片机。电路中酒精检测传感器的模拟量输出端接在
7、adc0809的in0通道。adc0809的start引脚接到单片机的p12口,oe引脚接到单片机的p10引脚上,eoc引脚接到了单片机的p11口,ciock时钟信号接到了单片机的p16引脚上。数字量输出端接到了单片机的p2口。将传感器采集到的酒精浓度经过adc0809输送到单片机中。2.2显示模块显示模块采用1602液晶显示屏进行显示,液晶显示具有低功耗,应用接口少,显示量大的特点,所以应用很广。将单片机收到adc0809数字量发送给1602中,进行显示。将1602的数据输入端接到单片机的p0口,rs引脚接到单片机的p35口,将en使能接口接到单片机的p34口,单片机发送数据给1602,16
8、02进行显示酒精的浓度。2.3报警模块 报警模块采用蜂鸣器进行报警,直观,方便将蜂鸣器接到单片机的p33口,当酒精检测传感器模块ttl电平输出端时证明酒精浓度已经超过了阈值,则启动报警,给蜂鸣器以低电平,蜂鸣器响。否则,给蜂鸣器低电平,蜂鸣器不响。2.4 cpu控制模块cpu采用stc89c52单片机,负责整套系统的运行。它包含时钟电路和复位电路。(1) 时钟电路单片机工作的时间基准是由时钟电路提供的,在单片机的xtal1和xtal2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路。电路中,电容器c1和c2对振荡频率有微调作用,同时帮助晶振起振,通常取值范围在22±0.1pf
9、,一般晶振为11.0592mhz,电容取22pf。石英晶体选择11.0592mhz。(2) 复位电路单片机系统的复位电路在可以采用的是按钮式上电复位电路形式,其中电阻r采用10k的阻值,电容采22f的电容值。3应用软件设计3.1 主程序设计 酒精测试仪的基本功能是通过酒精传感器采集到气体的酒精浓度,之后经过adc0809数模转换发送给单片机,之后单片机发送给1602液晶进行显示。 当检测到的酒精浓度值超过了所设计的阈值,则酒精传感器模块将输出低电平,将其接到单片机p17引脚上,当单片机检测到该引脚为低电平时,则驱动蜂鸣器发生进行报警。流程图:开始系统初始化检测酒精浓度是否超过设定值声报警160
10、2显示酒精浓度结束否是3.2 子程序设计3.2.1 显示子程序设计 采用1602液晶屏进行显示,将液晶数据输入端接到单片机p0口,单片机驱动液晶进行显示。流程图:开始lcd初始化写入地址数据忙碌标志位检查写入显示数据结束否是3.2.2报警子程序设计 报警电路采用蜂鸣器进行报警,当酒精浓度超过了设定值,则蜂鸣器发声进行报警,将蜂鸣器接到单片机的p33引脚。流程图:开始初始化引脚是否为低电平蜂鸣器发生结束是否3.2.3 酒精检测子程序设计 酒精检测模块采用mq-snsor酒精气体传感器和adc0809组成,将采集到的酒精浓度经过模数转换器发给单片机。流程图:开始气体检测adc0809模数转换发送给
11、单片机结束4 系统调试与性能分析4.1 开机界面 开机之后1602界面显示 ,酒精检测模块气体中酒精度发送给单片机。4.2 浓度判断 当检测到的酒精浓度大于设定的阈值时,则单片机驱动蜂鸣器发生进行报警,提示检测者酒精浓度已经超标。4.3 阈值修改(1)硬件修改 通过改变酒精传感器的电阻值来改变传感器对气体酒精度的检测灵敏度,来修改阈值。(2)软件修改 通过对系统运行程序进行阈值设定,检测到的酒精浓度,进行人为的软件设定阈值,进行判别。总结: 本作品针对生活中因醉酒驾驶引发交通事故日益严重,明确研究方向,制定计划方案。深入研究酒精传感器、模数转换器等器件原理,查阅相关酒驾标准。为制作出满足实际要
12、求的作品,做好充分的准备。在此期间所遇到的问题,通过最有效、最准确的渠道进行解决,为成功扫清障碍。随着对单片机、adc0809、lcd显示器的加深了解,对信号采集和数据算法处理的进一步学习;加入温度、湿度和气压的影响,在现有基础上进行改进,一定会使测得的数据更加准确,使作品与预期目标更接近。使其能成为商品,进入家庭,实现我们以此为课题的最终目的。参考文献1 单成祥.传感器的理论与设计基础及其应用m.北京:国防工业出版社,2 张福学.现代传感器电路m.北京:中国计量出版社,2000,441 3 吴兴惠,王彩君.传感器与信号传感器m.北京:电子工业出版社,1998 4 万隆,巴奉丽.单片机原理及应
13、用技术m.北京:清华大学出版社,2010 5 汤竟南,沈国琴.51单片机c语言开发与实例m.人民邮电出版社 6 雷伏容,张小林,崔浩.51单片机常用模块设计查询手册m.北京:清华大学出版社,20107 韩成,张延 拿了就用单片机m.北京:人民邮电出版社,2008 8 赵建领.51系列单片机开发宝典m.北京:电子工业出版社,2007-04 9 张毅刚 单片机原理及接口技术 :人民邮电出版社附录附录a 硬件电路图附录b 程序清单/*/项目名称:酒精测试仪/程序内容:通过酒精模块将采集到的酒精浓度显示到1602上/ 如果浓度超过设定值,则进行报警。/*/#include <reg52.h>
14、; /头文件#define uchar unsigned char /宏定义无符号字符型#define uint unsigned int /宏定义无符号整型uchar code table="0123456789"uchar code table1="voltage:"uchar code table2=" alcohol tester "/位控制码sbit st=p12; /a/d启动转换信号sbit oe=p10; /数据输出允许信号sbit eoc=p13; /a/d转换结束信号sbit clk=p16; /时钟脉冲 sbit
15、 dula = p26;sbit wela = p27;sbit rs = p35;sbit lcden = p34;sbit dout=p17;sbit beep=p33;uint z,x,c,v,ad0809, date,a,i;/定义数据类型 void yanshi(uchar z) /延时子函数uint x,y;x=0;y=0;for(x=z;x>0;x-)for(y=110;y>0;y-);void delay(uint x) /延时函数,参数xuint a,b;for(a = x;a > 0;a-) for(b = 10;b > 0;b-) ; /*/* 函
16、数名称 : write_com */* 函数描述 : 1602写命令函数 */* 输入参数 : com */* 参数描述 : 控制命令 */* 返回值 : 无 */*/void write_com(uchar com)p0 = com;rs = 0;lcden = 0;delay(10);lcden = 1;delay(10);lcden = 0;/*/* 函数名称 : write_date */* 函数描述 : 1602写数据函数 */* 输入参数 : date */* 参数描述 : 要写入的数据 */* 返回值 : 无 */*/void write_date(uchar date)p0 =
17、 date;rs = 1;lcden = 0;delay(10);lcden = 1;delay(10);lcden = 0;void initlcd(void)/1602初始化函数dula = 0;wela = 0;write_com(0x38);delay(20);write_com(0x0f);delay(20);write_com(0x06);delay(20);write_com(0x01);delay(20);/* 液晶显示程序*/void xianshi() /显示函数 uint z,x,c,v; z=date/1000; /求千位 x=date%1000/100; /求百位 c
18、=date%100/10; /求十位 v=date%10; /求个位 for(a=20;a>0;a-) /液晶1602显示 write_com(0x80+0x40+9); write_date(tablez); write_com(0x80+0x40+10); write_date(tablex); write_com(0x80+0x40+11); write_date('.'); write_com(0x80+0x40+12); write_date(tablec); write_com(0x80+0x40+13); write_date(tablev); /* clk
19、振荡信号*/void timer0( ) interrupt 1 /定时器0工作方式1th0=(65536-2)/256; /重装计数初值tl0=(65536-2)%256; /重装计数初值clk=!clk; /取反 /* 主函数*/ void main() tmod=0x01; /定时器中断0clk=0; /脉冲信号初始值为0th0=(65536-2)/256; /定时时间高八位初值tl0=(65536-2)%256; /定时时间低八位初值ea=1; /开cpu中断et0=1; /开t/c0中断tr0=1;initlcd(); write_com(0x80); for(i=0;i<16
20、;i+) write_date(table2i); yanshi(5); write_com(0x80+0x40); for(i=0;i<8;i+) write_date(table1i); while(1) /无限循环beep=1;st=0;/使采集信号为低st=1;/开始数据转换st=0;/停止数据转换while(!eoc);/等待数据转换完毕oe=1;/允许数据输出信号ad0809=p1; /读取数据oe=0;/关闭数据输出允许信号if(ad0809>=251)/电压显示不能超过5vad0809=250;date=ad0809*20;xianshi();/液晶显示显示函数 i
21、f(dout=0)/当浓度高于设定值时 ,执行条件函数 yanshi(5);/延时抗干扰if(dout=0)/确定 浓度高于设定值时 ,执行条件函数 beep=0; yanshi(2000); beep=1; 第二部分:课堂设计内容:温度测量系统1 实验目的根据温度控制系统的要求和特点,设计了一种基于51单片机的温度显示系统。该系统以单片机为控制核心,结合外围信号采集电路、lcd显示电路、报警电路,实现对温度的测量报警控制。2实验内容温度控制装置由单片机最小系统、lcd液晶显示电路、报警电路、温度传感器。等四部分组成。3实验原理将温度传感器采集的数据输入单片机,单片机与程序内预先设定好电压阈值
22、进行比较,如果温度数据大于所设定的温度阈值,则蜂鸣器发生进行报警,整个过程lcd实时显示:温度阈值、实际温度值。4实验步骤主程序主要完成初始化、以及调用显示、指示灯、温度采集等等。具体模块包括: 显示程序设计 温度采集程序设计 温度处理程序设计显示程序设计主要将几个数组的内容通过lcd1602的写数据指令显示在lcd屏上。温度采集程序 通过18b20温度传感器实时采集温度并发送给单片机。温度处理程序设计 将采集到的实时温度与设定温度阈值进行比较,如果温度大于预先设定的阈值,则蜂鸣器发生进行报警。 5 流程图:开始温度检测是否大于设定值声报警1602液晶显示结束否是6 程序清单:/将ds18b2
23、0所采集到的温度实时显示到1602上。/温度超过阈值则报警#include <reg52.h>#include <intrins.h>#include <math.h>#define uchar unsigned char#define uint unsigned int /宏定义uchar value,aa;unsigned int tmp;sbit dula = p26; /数码管段选引脚sbit wela = p27; /数码管位选引脚sbit ds = p22;/18b20引脚定义sbit rs = p35; sbit lcden = p34; /1
24、602引脚定义sbit beep=p23;void delayus() /延时函数_nop_(); /延时一个机器周期,包含在intrins.h文件中void delayms(uint a) /延时函数,参数auint i, j;for(i = a; i > 0; i-)for(j = 100; j > 0; j-);void writecomm(uchar comm) /写命令rs = 0; /写命令是rs需给低电平p0 = comm;lcden = 1; /写命令时lcden需给高电平delayus(); /延时一个机器周期lcden = 0;delayms(1);void w
25、ritedata(uchar dat) /写数据:rs=1, rw=0; rs = 1;/写数据时rs=1p0 = dat;lcden = 1;/写数据时lcden=1delayus(); /延时一个机器周期lcden = 0;delayms(1);void init() /初值函数dula = wela = 0; /段选,位选清零,数码管不显示writecomm(0x38);writecomm(0x0c); writecomm(0x06);writecomm(0x01); /1602的命令初始化void writestring(uchar * str, uchar length) /将数据一
26、个接着一个的写入1602中uchar i;for(i = 0; i < length; i+)writedata(stri); /将数组中数据以循环的方式写入到1602中void dsinit() /ds18b20温度初值函数unsigned int i; ds = 0;i = 100; while(i>0) i-; /延时ds = 1; i = 4;while(i>0) i-; /延时void dswait() /等待函数unsigned int i;while(ds); while(ds);i = 4;while(i > 0) i-;bit readbit()/bi
27、t函数返回值只能是0,1 读一位数据函数unsigned int i;bit b;/bit只定义一位0,1ds = 0;i+; /起到延时作用ds = 1; i+; i+; b = ds;i = 8; while(i>0) i-;return b; /返回b,0,1unsigned char readbyte() /读一位字节数据函数unsigned int i;unsigned char j, dat;dat = 0;for(i=0; i<8; i+)j = readbit();dat = (j << 7) | (dat >> 1);/位或运算,读出的数据
28、最低位在最前/面,这样刚好一个字节在dat里return dat;void writebyte(unsigned char dat) /向18b20写一个字节数据函数unsigned int i;unsigned char j;bit b;for(j = 0; j < 8; j+)b = dat & 0x01;dat >>= 1; /对dat右移一位,将值赋给datif(b) /写1ds = 0; i+; i+; ds = 1; i = 8; while(i>0) i-; else ds = 0; /写0i = 8; while(i>0) i-; ds =
29、 1;i+; i+;void sendchangecmd()/ds18b20 开始获取温度并转换dsinit(); /ds18b20温度初值dswait(); /等待函数delayms(1); /延时writebyte(0xcc); /向18b20写一个字节数据函数,写跳过读rom指令writebyte(0x44); /向18b20写一个字节数据函数,写温度转换指令void sendreadcmd() /读取寄存器中存储的温度数据dsinit();/ds18b20温度初值dswait();/等待函数delayms(1);/延时writebyte(0xcc); writebyte(0xbe);
30、int gettmpvalue()unsigned int tmpvalue;int value; float t;unsigned char low, high;sendreadcmd();low = readbyte(); high = readbyte();tmpvalue = high;tmpvalue <<= 8;tmpvalue |= low; /按位进行或运算 tmpvalue=(tmpvalue|low)value = tmpvalue;t = value * 0.0625;value = t * 100 + (value > 0 ? 0.5 : -0.5); /大于0加0.5, 小于0减0.5return value;void display(int v) unsigned char count;unsigned char datas = 0, 0, 0, 0, 0; tmp = abs(v);datas0 = tmp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中生物第二章生物个体的稳态第四节植物生命活动的调节省公开课一等奖新课获奖课件
- 独尾草创新创业项目商业计划书
- 河南物业考试试题及答案
- 动画色彩考试题目及答案
- 2025届山西省运城运康中学九上数学期末考试模拟试题含解析
- 河北省石家庄市行唐县2024-2025学年八年级物理第一学期期末监测试题含解析
- 滴定分析法概述代明花68课件
- 2025版汽车维修场地租赁与维修配件供应合同
- 二零二五版文化节场地租赁专项协议
- 二零二五年度餐饮管理软件销售与顾客满意度提升合同
- 严重过敏反应诊断和临床管理专家共识(2025)解读课件
- 人行雨棚施工方案
- 刑事和解协议书自诉
- 三方委托收款协议范本8篇
- 奶茶服务协议合同
- 书籍保密协议书范文
- 2025年秋季学期特殊教育教学工作计划
- 基层护理进修后回院汇报
- 护理查对制度安全警示教育
- 2024年四川成都农业科技中心招聘笔试真题
- 2025年滨州生物会考试题及答案
评论
0/150
提交评论