




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51 单片机课程设计 课程设计说明书 课程设计名称 单片机原理及应用课程设计 专 业 电子信息工程 班 级 140405 学 号 20141329 学生 姓名 李延琦 指导 教师 胡黄水 2016 年 12 月 26 日 课程设计任务书 课程设计 题目 酒精测试仪 起止日期 2016年 12 月 26 日 2017 年 1 月 6 日 设计地点 计算机科学与工程学 院单片机实验室 3409 设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1. 电子钟的设计 2. 交通灯的设计 3. 温度计的设计 4. 点阵显示 5. 电机调速
2、 6.电子音乐发声(自己选曲) 7. 键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1-7 题任选其二即可。 (二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2-4 天:进实验室做实验, 连接硬件并编写程序作相关的模块实验。 第 5-7 天:编写程序, 并调试通过。观察及总结硬件实验现象和结果。 第 8-9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求: 1. 设计报告里有两个内容,自选题目内容 +附录(实验内容),每 位
3、同学独立完成。 2. 自选题目不须上机实现, 要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2 )硬件框图与电路图 3) 软件及流程图 ( a)主要模块流程图 ( b)源程序清单与注释 4) 总结 5 ) 参考资料 6 )附录 实验上机调试内容 注:此任务书由指导教师在课程设计前 填写,发给学生做为本门课程设计的依 据。 目录 第一部分:自主设计课设:酒精测试仪 1 总体方案设计 1.1 设计要求 1.2 优点及意义 1.3 系统硬件电路设计 1.4 初步设计思路 2 硬件电路设计 2.1 酒精检测模块 2.2 显示模块 2.3 报警模块 2.4 CPU 控制
4、模块 3 应用软件设计 3.1 主程序设计 3.2 子程序设计 3.2.1 显示子程序设计 9 3.2.2 报警子程序设计 . 10 3.2.3 酒精检测子程序设计 . 12 4 系统调试与性能分析 13 4.1 开机界面 13 4.2 浓度判断 13 4.3 阈值修改 14 总结: 14 参考文献 15 附录 17 附录 A 硬件电路图 . 17 附录 B 程序清单 18 第二部分:课堂设计内容:温度测量系 统 31 1 实验目的 31 2 实验内容 31 3 实验原理 31 4 实验步骤 31 5 流程图: 33 6 程序清单: 34 第一部分:自主设计课设:酒精测试仪 1 总体方案设计
5、1.1 设计要求 本课题要求以单片机为核心,设 计一个酒精测试仪, 由四部分组成: 酒 精检测模块, 显示模块,报警模块, CPU 控制模块。CPU控制模块采用 STC89C52 单片机进行控制。酒精传感器采用 MQ-Sensor传感器模块和 ADC0809模数 转换模块用于对人呼出酒精气体的酒 精度检测,显示模块采用 1602 液晶显 示,报警电路采用蜂鸣器。 要求酒精测 试仪有以下功能: (1)酒精浓度通过 1602 液晶显示 模块显示出来 (2)酒精浓度超过设定的阈值则 蜂鸣器发声进行报警。 1.2 优点及意义 本课题采用 51 单片机进行控制, 51 单片机具有体积小、运行速度快的特
6、点,用其作为主控芯片进行控制会十分 的方便。使用 MQ-Sensor气体传感器模 块能够快速,准确的检测到酒精浓度, 使用 1602模块进行显示, 直观,方便。 1.3 系统硬件电路设计 系统硬件设计框图。根据设计要求, 确定系统的设计方案, 硬件由四部分组 成。采用 STC89c52单品机为 CPU控制 模 块 ,以 MQ-Sensor 传感 器 模 块和 ADC0809模块组成检测模块,以 1602 液晶显示组成显示模块, 以蜂鸣器组成 报警模块。 1.4 初步设计思路 (1) 定义三组数组表,方便 1602 显示时进行调用 (2) 将 adc0809 的数据输出端接 在单片机的 P2 口
7、 ( 3) 将 MQ-Sensor 酒精传感器的 TTL输出端接在单片机 P1.7 口, 将 AO 模 拟 量 输 出 端 接 到 adc0809的 IN0 通道。 (4) 将 1602 的数据输入端接到单 片机 P0 口 (5) 将蜂鸣器接到单片机P3.3 2 硬件电路设计 2.1 酒精检测模块 传感器模块采用 MQ-Sensor 酒精传 感器,其模拟量输送给 ADC0809进行模 数转换,将输出数据发给单片机。 电路中酒精检测传感器的模拟量输 出端接在 adc0809 的 IN0 通道。 Adc0809的 start 引脚接到单片机的 P12 口,oe 引脚接到单片机的 p10 引 脚上,
8、 EOC引脚接到了单片机的 p11 口, ciock 时钟信号接到了单片机的 P16 引脚上。数字量输出端接到了单 片机的 P2 口。将传感器采集到的酒精 浓度经过 adc0809 输送到单片机中。 2.2 显示模块 显示模块采用 1602 液晶显示屏进行 显示, 液晶显示具有低功耗, 应用接口 少,显示量大的特点,所以应用很广。 将单片机收到 adc0809 数字量发送给 1602 中,进行显示。 将 1602 的数据输入端接到单片机 的 P0 口,RS 引脚接到单片机的 P35 口,将 EN使能接口接到单片机的 P34 口,单片机发送数据给 1602,1602 进行 显示酒精的浓度。 2.
9、3 报警模块 报警模块采用蜂鸣器进行报警,直 观,方便 将蜂鸣器接到单片机的 P33 口, 当酒精检测传感器模块 TTL 电平输出 端时证明酒精浓度已经超过了阈值, 则 启动报警, 给蜂鸣器以低电平, 蜂鸣器 响。否则,给蜂鸣器低电平,蜂鸣器不 响。 2.4 CPU 控制模块 CPU采用 STC89c52单片机,负责 整套系统的运行。 它包含时钟电路和复 位电路。 (1) 时钟电路 单片机工作的时间基准 是由时钟电路提供的,在单片机 的 XTAL1和 XTAL2两个引脚间, 接一只晶振及两只电容就构成 了单片机的时钟电路。 电路中,电容器 C1和 C2 对 振荡频率有微调作用,同时帮助 晶振起
10、振,通常取值范围在 22 0.1PF , 一 般 晶 振 为 11.0592MHZ,电容取 22PF。石英 晶体选择 11.0592MHZ。 2) 复位电路 单片机系统的复位电路在可以采用 的是按钮式上电复位电路形式, 其中电 阻 R 采用 10K的阻值,电容采 22F 的电容值。 3 应用软件设计 3.1 主程序设计 酒精测试仪的基本功能是通过酒 精传感器采集到气体的酒精浓度, 之后 经过 ADC0809数模转换发送给单片机, 之后单片机发送给 1602 液晶进行显 示。 当检测到的酒精浓度值超过了所 设计的阈值,则酒精传感器模块将输出 低电平,将其接到单片机 P17 引脚上, 当单片机检测
11、到该引脚为低电平时, 则 驱动蜂鸣器发生进行报警。 流程图: 3.2 子程序设计 3.2.1 显示子程序设计 采用 1602 液晶屏进行显示,将液晶 数据输入端接到单片机 P0 口,单片机 驱动液晶进行显示。 流程图: 3.2.2 报警子程序设计 报警电路采用蜂鸣器进行报警, 10 当酒精浓度超过了设定值, 则蜂鸣器发 声进行报警,将蜂鸣器接到单片机的 P33引脚。 流程图: 11 3.2.3 酒精检测子程序设计 酒精检测模块采用 MQ-Snsor 酒精 气体传感器和 ADC0809组成,将采集到 的酒精浓度经过模数转换器发给单片 机。 流程图: 12 气体 Adc0809 发送 给 结 4
12、系统调试与性能分析 4.1 开机界面 开机之后 1602 界面显示 ,酒 精检测模块气体中酒精度发送给单片 机。 4.2 浓度判断 当检测到的酒精浓度大于设定的 13 阈值时,则单片机驱动蜂鸣器发生进行 报警,提示检测者酒精浓度已经超标。 4.3 阈值修改 (1)硬件修改 通过改变酒精传感器 的电阻值来改变传感器对 气体酒精度的检测灵敏 度,来修改阈值。 (2)软件修改 通过对系统运行程序进行阈 值设定,检测到的酒精浓度,进 行人为的软件设定阈值,进行判 别。 总结: 本作品针对生活中因醉酒驾驶引发 交通事故日益严重, 明确研究方向, 制 定计划方案。 深入研究酒精传感器、 模 14 数转换器
13、等器件原理, 查阅相关酒驾标 准。为制作出满足实际要求的作品, 做 好充分的准备。在此期间所遇到的问 题,通过最有效、 最准确的渠道进行解 决,为成功扫清障碍。 随着对单片机、 ADC0809、LCD 显示器 的加深了解,对信号采集和数据算法处 理的进一步学习; 加入温度、 湿度和气 压的影响, 在现有基础上进行改进, 一 定会使测得的数据更加准确, 使作品与 预期目标更接近。 使其能成为商品, 进 入家庭,实现我们以此为课题的最终目 的。 参考文献 1 单成祥 . 传感器的理论与设计基础 及其应用 M. 北京:国防工业出版社, 2 张福学 . 现代传感器电路 M. 北 15 京:中国计量出版
14、社, 2000,441 3 吴兴惠,王彩君 . 传感器与信号传 感器 M. 北京:电子工业出版社, 1998 4 万隆,巴奉丽 . 单片机原理及应用 技术 M. 北京:清华大学出版社, 2010 5 汤竟南,沈国琴 .51 单片机 C 语言 开发与实例 M. 人民邮电出版社 6 雷伏容,张小林,崔浩 .51 单片机 常用模块设计查询手册 M. 北京: 清华大学出版社, 2010 7 韩成,张延 拿了就用单片机 M. 北京:人民邮电出版社, 2008 8 赵建领 .51 系列单片机开发宝典 M. 北京:电子工业出版社, 2007-04 9 张毅刚 单片机原理及接口技术 : 人民邮电出版社 16
15、IX -J血 耳 TiaMg珀iaxloral 咼齬(JAD 迫 G S S A era z I -r 魁題呼貂嗓禺脚 -AJfivr圧 一13A -4 amv程朗 沓朗 附录 B 程序清单 /* */ / 项目名称:酒精测试仪 / 程序内容:通过酒精模块将采集到的 酒精浓度显示到 1602 上 / 如果浓度超过设定值, 则 进行报警。 /* */ #include / 头文件 #define uchar unsigned char/ 宏定义无符号字符型 #define uint unsigned int/ 宏定义无符号整型 18 uchar code table=0123456789; uc
16、har 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 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;/ 定义数据类
17、型 / 延 时 子 void yanshi(uchar z) 19 函数 uint x,y; x=0; y=0; for(x=z;x0;x-) for(y=110;y0;y-); 延时函 void delay(uint x) / 数,参数 x uint a,b; for(a = x;a 0;a-) for(b = 10;b 0;b-) 20 /* */ 函数名称 write_com */ /* */ 函数描述 1602 写命令函数 /* 输入 com */ /* 参数描 命令 */ /* 返回 */ */ void write_com(uchar com) 21 P0 = com; rs =
18、0; lcden = 0; delay(10); lcden = 1; delay(10); lcden = 0; /* */ /* 函 数 名 称 : write_date */ /* 函数描述 : 1602 写数 据函数 */ /* 输 入 参 数 : date */ /* 参 数 描 述 : 要 写 入 的 数 据 22 */ /* 返 回 值 : 无 */ /* */ void write_date(uchar date) P0 = date; rs = 1; lcden = 0; delay(10); lcden = 1; delay(10); lcden = 0; void ini
19、tLCD(void) /1602 初始 化函数 23 dula = 0; wela = 0; write_com(0 x38); delay(20); write_com(0 x0f); delay(20); write_com(0 x06); delay(20); write_com(0 x01); delay(20); /* 液晶显示程序 */ void xianshi() / 显示函数 24 uint z,x,c,v; z=date/1000;/ 求千位 x=date%1000/100; / 求百位 c=date%100/10;/ 求十位 v=date%10; / 求个位 for(a=2
20、0;a0;a-)/ 液晶 1602 显示 write_com(0 x80+0 x40+9); write_date(tablez); write_com(0 x80+0 x40+10); write_date(tablex); write_com(0 x80+0 x40+11); write_date(.); write_com(0 x80+0 x40+12); write_date(tablec); write_com(0 x80+0 x40+13); 25 write_date(tablev); /* CLK 振荡信号 */ void timer0( ) interrupt 1 /定时 器
21、 0 工作方式 1 TH0=(65536-2)/256; / 重装计数初 值 TL0=(65536-2)%256; / 重装计数初 值 CLK=!CLK; / 取反 26 /* 主函数 */ void main() TMOD=0X01; / 定时器中断 0 CLK=0; / 脉冲信号初始值为 0 TH0=(65536-2)/256; / 定时时间高 八位初值 TL0=(65536-2)%256; / 定时时间低 八位初值 27 EA=1;/ 开 CPU中断 ET0=1;/ 开 T/C0 中断 TR0=1; initLCD(); write_com(0 x80); for(i=0;i16;i+)
22、 write_date(table2i); yanshi(5); write_com(0 x80+0 x40); for(i=0;i=251) / 电压显示不 能超过 5V AD0809=250; date=AD0809*20; xianshi(); / 液晶显示显示函 数 if(DOUT=0)/ 当浓度高于设定值 时 ,执行条件函数 29 yanshi(5);/ 延时抗干扰 if(DOUT=0)/ 确定 浓度高于设 定值时 ,执行条件函数 beep=0; yanshi(2000); beep=1; 30 第二部分:课堂设计内容:温度测量系统 1 实验目的 根据温度控制系统的要求和特点 , 设
23、计了一种基于 51 单片机的温度显示 系统。该系统以单片机为控制核心 , 结 合外围信号采集电路、 LCD显示电路、 报警电路,实现对温度的测量报警控 制。 2 实验内容 温度控制装置由单片机最小系统、 LCD液晶显示电路、报警电路、温度传 感器。等四部分组成。 3 实验原理 将温度传感器采集的数据输入单 片机,单片机与程序内预先设定好电压 阈值进行比较, 如果温度数据大于所设 定的温度阈值,则蜂鸣器发生进行报 警,整个过程 LCD实时显示:温度阈值、 实际温度值。 4 实验步骤 主程序主要完成初始化、以及调用显 31 示、指示灯、温度采集等等。具体模块 包括: 显示程序设计 温度采集程序设计
24、 温度处理程序设计 显示程序设计 主要将几个数组的内容通过 LCD1602的写数据指令显示在 LCD 屏 上。 温度采集程序 通过 18B20 温度传感器实时采集 温度并发送给单片机。 温度处理程序设计 将采集到的实时温度与设定温度 阈值进行比较, 如果温度大于预先设定 的阈值,则蜂鸣器发生进行报警。 32 5 流程图: 33 6 程序清单: / 将 DS18B20 所采集到的温度实时显 示到 1602 上。 / 温度超过阈值则报警 #include #include #include #define uchar unsigned char #define uint unsigned int/
25、 宏 定义 uchar value,aa; unsigned int tmp; sbit dula = P26; / 数码 管 段 选 34 引脚 sbit wela = P27;/ 数 码 管 位 选 引脚 sbit ds = P22;/18b20 引脚定 义 sbit RS = P35; sbit LCDEN = P34; /1602 引脚定 义 sbit beep=P23; void delayUs() / 延时函数 _nop_(); / 延时一个机器周期 , 包含在 intrins.h 文件中 void delayMs(uint a) / 延 时 函 数,参数 a 35 uint i,
26、 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); dat) / void writeData(uchar 36 写数据 :RS=1, RW=0; RS = 1; / 写 数 据 时 RS=1 P0 = dat; LCDEN = 1;/ 写 数 据 时 LCD
27、EN=1 delayUs(); / 延 时 一 个 机器周期 LCDEN = 0; delayMs(1); void init() / 初值函数 dula = wela = 0;/ 段选,位选清 零,数码管不显示 writeComm(0 x38); writeComm(0 x0c); 37 writeComm(0 x06); writeComm(0 x01); /1602 令初始化 void writeString(uchar * str, length) / 将数据一个接着一 写入 1602 中 uchar i; for(i = 0; i 0) i-; ds = 1; / 延时 i = 4;
28、 while(i0) i-; void dsWait() unsigned int i; while(ds); while(ds); / 延时 / 等待函数 i = 4; while(i 0) i-; bit readBit() /bit 函数返回 值只能是 0,1 读一位数据函数 39 unsigned int i; bit b; /bit 只定义一位 0,1 ds = 0; i+; / 起到延时作用 ds = 1; i+; i+; b = ds; i = 8; while(i0) i-; return b; / 返回 b, 0,1 unsigned char readByte() / 读
29、一位字节数据函数 unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i8; i+) 40 j = readBit(); dat = (j 1); / 位 或 运 算 读 出 的 数 据 最 低 位 在 41 最 前 / 面 这 样 刚 好 个 字 节 在 da t 里 42 return dat; void writeByte(unsigned char dat) / 向 18b20 写一个字节数据函数 unsigned int i; unsigned char j; bit b; for(j = 0; j = 1;/ 对 dat
30、右移一 位,将值赋给 dat if(b) / 写 1 ds = 0; i+; i+; ds = 1; 43 i = 8; while(i0) i-; else ds = 0;/ 写 0 i = 8; while(i0) i-; ds = 1; i+; i+; void sendChangeCmd() /DS18B20 开始获取温度并转换 dsInit(); /DS18B20 温 度初值 44 void sendReadCmd() 寄存器中存储的温度数据 dsWait(); delayMs(1); writeByte(0 xcc); 据函数,写跳过读 ROM指令 writeByte(0 x44); 据函数,写温度转换指令 dsInit(); 初值 dsWait(); delayMs(1); writeByte(0 xcc); writ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业生产管理与调度方案手册
- 公司电话客服劳动合同
- 防雷接地施工方案例
- 2025年人力资源制度:全日制从业人员劳动合同
- 咨询产品服务合同
- 环氧树脂注浆施工方案
- 晋城房屋纠偏施工方案
- 泄爆吊顶施工方案
- 钢栏杆安装工程施工方案
- 滨城区七上数学试卷
- 南大版一年级心理健康第5课《校园“红绿灯”》课件
- 妇女节女性健康知识讲座关爱女性健康主题宣教课件
- 2024年浙江省烟草专卖局(公司)管理类岗位招聘笔试真题
- 广东省惠州市惠东县2022年小升初语文试卷(学生版+解析)
- 《木兰诗》历年中考古诗欣赏试题汇编(截至2024年)
- 新人教版(2025春季版)七年级下册英语单词表(可编辑一表解决所有需求)
- 智能建筑监理例会会议记录
- 中国稀土热障涂层材料行业分类、市场运行态势及产业链全景图谱分析报告
- 2025年九年级上册道德与法治核心知识点梳理汇编
- 2024年河南省郑州某中学小升初数学试卷(含答案)
- 七年级数学新北师大版(2024)下册第一章《整式的乘除》单元检测习题(含简单答案)
评论
0/150
提交评论