当前位置:文档之家› 51单片机课程设计

51单片机课程设计

课程设计说明书课程设计名称单片机原理及应用课程设计专业电子信息工程班级 140405学号 20141329学生姓名李延琦指导教师胡黄水2016 年 12 月 26 日课程设计任务书注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计的依据。

目录第一部分:自主设计课设:酒精测试仪 (1)1 总体方案设计 (1)1.1 设计要求 (1)1.2优点及意义 (1)1.3 系统硬件电路设计 (1)1.4初步设计思路 (2)2 硬件电路设计 (2)2.1酒精检测模块 (2)2.2显示模块 (2)2.3报警模块 (3)2.4 CPU控制模块 (4)3应用软件设计 (5)3.1 主程序设计 (5)3.2 子程序设计 (6)3.2.1 显示子程序设计 (6)3.2.2报警子程序设计 (7)3.2.3 酒精检测子程序设计 (8)4 系统调试与性能分析 (8)4.1 开机界面 (8)4.2 浓度判断 (8)4.3 阈值修改 (9)总结: (9)参考文献 (9)附录 (10)附录A 硬件电路图 (10)附录B 程序清单 (11)第二部分:课堂设计内容:温度测量系统 (16)1 实验目的 (16)2实验内容 (16)3实验原理 (16)4实验步骤 (16)5 流程图: (17)6 程序清单: (18)第一部分:自主设计课设:酒精测试仪1 总体方案设计1.1 设计要求本课题要求以单片机为核心,设计一个酒精测试仪,由四部分组成:酒精检测模块,显示模块,报警模块,CPU控制模块。

CPU控制模块采用STC89C52单片机进行控制。

酒精传感器采用MQ-Sensor传感器模块和ADC0809模数转换模块用于对人呼出酒精气体的酒精度检测,显示模块采用1602液晶显示,报警电路采用蜂鸣器。

要求酒精测试仪有以下功能:(1)酒精浓度通过1602液晶显示模块显示出来(2)酒精浓度超过设定的阈值则蜂鸣器发声进行报警。

1.2优点及意义本课题采用51单片机进行控制,51单片机具有体积小、运行速度快的特点,用其作为主控芯片进行控制会十分的方便。

使用MQ-Sensor气体传感器模块能够快速,准确的检测到酒精浓度,使用1602模块进行显示,直观,方便。

1.3 系统硬件电路设计系统硬件设计框图。

根据设计要求,确定系统的设计方案,硬件由四部分组成。

采用STC89c52单品机为CPU控制模块,以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进行模数转换,将输出数据发给单片机。

电路中酒精检测传感器的模拟量输出端接在adc0809的IN0通道。

Adc0809的start引脚接到单片机的P1^2口,oe引脚接到单片机的p1^0引脚上,EOC引脚接到了单片机的p1^1口,ciock时钟信号接到了单片机的P1^6引脚上。

数字量输出端接到了单片机的P2口。

将传感器采集到的酒精浓度经过adc0809输送到单片机中。

2.2显示模块显示模块采用1602液晶显示屏进行显示,液晶显示具有低功耗,应用接口少,显示量大的特点,所以应用很广。

将单片机收到adc0809数字量发送给1602中,进行显示。

将1602的数据输入端接到单片机的P0口,RS引脚接到单片机的P3^5口,将EN使能接口接到单片机的P3^4口,单片机发送数据给1602,1602进行显示酒精的浓度。

2.3报警模块报警模块采用蜂鸣器进行报警,直观,方便将蜂鸣器接到单片机的P3^3口,当酒精检测传感器模块TTL电平输出端时证明酒精浓度已经超过了阈值,则启动报警,给蜂鸣器以低电平,蜂鸣器响。

否则,给蜂鸣器低电平,蜂鸣器不响。

2.4 CPU控制模块CPU采用STC89c52单片机,负责整套系统的运行。

它包含时钟电路和复位电路。

(1)时钟电路单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路。

电路中,电容器C1和C2对振荡频率有微调作用,同时帮助晶振起振,通常取值范围在22±0.1PF,一般晶振为11.0592MHZ,电容取22PF。

石英晶体选择11.0592MHZ。

(2)复位电路单片机系统的复位电路在可以采用的是按钮式上电复位电路形式,其中电阻R采用10KΩ的阻值,电容采22μF的电容值。

3应用软件设计3.1 主程序设计酒精测试仪的基本功能是通过酒精传感器采集到气体的酒精浓度,之后经过ADC0809数模转换发送给单片机,之后单片机发送给1602液晶进行显示。

当检测到的酒精浓度值超过了所设计的阈值,则酒精传感器模块将输出低电平,将其接到单片机P1^7引脚上,当单片机检测到该引脚为低电平时,则驱动蜂鸣器发生进行报警。

流程图:3.2 子程序设计3.2.1 显示子程序设计采用1602液晶屏进行显示,将液晶数据输入端接到单片机P0口,单片机驱动液晶进行显示。

流程图:3.2.2报警子程序设计报警电路采用蜂鸣器进行报警,当酒精浓度超过了设定值,则蜂鸣器发声进行报警,将蜂鸣器接到单片机的P3^3引脚。

流程图:3.2.3 酒精检测子程序设计酒精检测模块采用 MQ-Snsor 酒精气体传感器和 ADC0809 组成,将 采集到的酒精浓度经过模数转换器发给单片机。

流程图:开始气体检测Adc0809 模 数 转 换发送给单片机结束4 系统调试与性能分析4.1 开机界面开机之后 1602 界面显示 单片机。

,酒精检测模块气体中酒精度发送给4.2 浓度判断当检测到的酒精浓度大于设定的阈值时,则单片机驱动蜂鸣器发 生进行报警,提示检测者酒精浓度已经超标。

84.3 阈值修改(1)硬件修改 通过改变酒精传感器的电阻值来改变传感器对气体酒精度的检测灵敏度,来修改阈值。

(2)软件修改通过对系统运行程序进行阈值设定,检测到的酒精浓度, 进行人为的软件设定阈值,进行判别。

总结:本作品针对生活中因醉酒驾驶引发交通事故日益严重,明确研究方向, 制定计划方案。

深入研究酒精传感器、模数转换器等器件原理,查阅相关 酒驾标准。

为制作出满足实际要求的作品,做好充分的准备。

在此期间所 遇到的问题,通过最有效、最准确的渠道进行解决,为成功扫清障碍。

随着对单片机、ADC0809、LCD 显示器的加深了解,对信号采集和数据算 法处理的进一步学习;加入温度、湿度和气压的影响,在现有基础上进行 改进,一定会使测得的数据更加准确,使作品与预期目标更接近。

使其能 成为商品,进入家庭,实现我们以此为课题的最终目的。

参考文献[1] 单成祥.传感器的理论与设计基础及其应用[M].北京:国防工业出版社, [2] 张福学.现代传感器电路[M].北京:中国计量出版社,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] 张毅刚 单片机原理及接口技术 :人民邮电出版社9附录附录 A 硬件电路图10附录 B 程序清单/*****************************************************///项目名称:酒精测试仪//程序内容:通过酒精模块将采集到的酒精浓度显示到 1602 上//如果浓度超过设定值,则进行报警。

/*****************************************************/#include <reg52.h>//头文件#define uchar unsigned char //宏定义无符号字符型#define uint unsigned int //宏定义无符号整型uchar code table[]="0123456789";uchar code table1[]="voltage:";uchar code table2[]=" alcohol tester ";//位控制码sbit ST=P1^2; //A/D 启动转换信号sbit OE=P1^0; //数据输出允许信号sbit EOC=P1^3; //A/D 转换结束信号sbit CLK=P1^6; //时钟脉冲sbit dula = P2^6;sbit wela = P2^7;sbit rs = P3^5;sbit lcden = P3^4;sbit DOUT=P1^7;sbit beep=P3^3;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)//延时函数,参数 x{uint a,b;for(a = x;a > 0;a--){for(b = 10;b > 0;b--)11{ ;} } }/**************************************************//* 函数名称 : 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 = date;rs = 1;lcden = 0;delay(10);lcden = 1;12delay(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=date%100/10; v=date%10;//求千位 //求百位 //求十位 //求个位for(a=20;a>0;a--)//液晶 1602 显示{write_com(0x80+0x40+9);write_date(table[z]);write_com(0x80+0x40+10);write_date(table[x]);write_com(0x80+0x40+11);write_date('.');write_com(0x80+0x40+12);write_date(table[c]);13write_com(0x80+0x40+13); write_date(table[v]); } } /***************************************CLK 振荡信号 ****************************************/ void timer0( ) interrupt 1 //定时器 0 工作方式 1 {TH0=(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;i++){write_date(table2[i]);}yanshi(5);write_com(0x80+0x40);for(i=0;i<8;i++)14{write_date(table1[i]);}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();//液晶显示显示函数if(DOUT==0)//当浓度高于设定值时 ,执行条件函数{yanshi(5);//延时抗干扰if(DOUT==0)//确定 浓度高于设定值时 ,执行条件函数{beep=0;yanshi(2000);beep=1;}}}}15第二部分:课堂设计内容:温度测量系统1 实验目的根据温度控制系统的要求和特点,设计了一种基于 51 单片机的温度显 示系统。

相关主题