欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    51单片机课程设计 .doc

    • 资源ID:97465156       资源大小:698.50KB        全文页数:28页
    • 资源格式: DOC        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    51单片机课程设计 .doc

    课 程 设 计 说 明 书课程设计名称 单片机原理及应用课程设计 专 业 电子信息工程 班 级 140405 学 号 学生姓名 李延琦 指导教师 胡黄水 2016 年 12 月 26 日课 程 设 计 任 务 书课程设计题目酒精测试仪起止日期2016年 12月 26 日 2017 年1月6日设计地点计算机科学与工程学院单片机实验室3409设计任务及日程安排:设计任务:分两部分:(一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、实现;1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速6.电子音乐发声(自己选曲) 7.键盘液晶显示系统(二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。查资料选定题目。说明:第1-7题任选其二即可。(二)里题目自拟。日程安排:本次设计共二周时间,日程安排如下:第1天:查阅资料,确定题目。第2-4天:进实验室做实验,连接硬件并编写程序作相关的模块实验。第5-7天:编写程序,并调试通过。观察及总结硬件实验现象和结果。第8-9天:整理资料,撰写课程设计报告,准备答辩。第10天:上交课程设计报告,答辩。设计报告要求:1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每位同学独立完成。2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序设计。内容包括:1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释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参考文献9附录10附录A 硬件电路图10附录B 程序清单11第二部分:课堂设计内容:温度测量系统161 实验目的162实验内容163实验原理164实验步骤165 流程图:176 程序清单: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液晶显示组成显示模块,以蜂鸣器组成报警模块。CPU处理模块STC89c52报警模块蜂鸣器检测模块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引脚接到单片机的P12口,oe引脚接到单片机的p10引脚上,EOC引脚接到了单片机的p11口,ciock时钟信号接到了单片机的P16引脚上。数字量输出端接到了单片机的P2口。将传感器采集到的酒精浓度经过adc0809输送到单片机中。2.2显示模块显示模块采用1602液晶显示屏进行显示,液晶显示具有低功耗,应用接口少,显示量大的特点,所以应用很广。将单片机收到adc0809数字量发送给1602中,进行显示。将1602的数据输入端接到单片机的P0口,RS引脚接到单片机的P35口,将EN使能接口接到单片机的P34口,单片机发送数据给1602,1602进行显示酒精的浓度。2.3报警模块 报警模块采用蜂鸣器进行报警,直观,方便将蜂鸣器接到单片机的P33口,当酒精检测传感器模块TTL电平输出端时证明酒精浓度已经超过了阈值,则启动报警,给蜂鸣器以低电平,蜂鸣器响。否则,给蜂鸣器低电平,蜂鸣器不响。2.4 CPU控制模块CPU采用STC89c52单片机,负责整套系统的运行。它包含时钟电路和复位电路。(1) 时钟电路单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路。电路中,电容器C1和C2对振荡频率有微调作用,同时帮助晶振起振,通常取值范围在22±0.1PF,一般晶振为11.0592MHZ,电容取22PF。石英晶体选择11.0592MHZ。(2) 复位电路单片机系统的复位电路在可以采用的是按钮式上电复位电路形式,其中电阻R采用10K的阻值,电容采22F的电容值。3应用软件设计3.1 主程序设计 酒精测试仪的基本功能是通过酒精传感器采集到气体的酒精浓度,之后经过ADC0809数模转换发送给单片机,之后单片机发送给1602液晶进行显示。 当检测到的酒精浓度值超过了所设计的阈值,则酒精传感器模块将输出低电平,将其接到单片机P17引脚上,当单片机检测到该引脚为低电平时,则驱动蜂鸣器发生进行报警。流程图:开始系统初始化检测酒精浓度是否超过设定值声报警1602显示酒精浓度结束否是3.2 子程序设计3.2.1 显示子程序设计 采用1602液晶屏进行显示,将液晶数据输入端接到单片机P0口,单片机驱动液晶进行显示。流程图:开始LCD初始化写入地址数据忙碌标志位检查写入显示数据结束否是3.2.2报警子程序设计 报警电路采用蜂鸣器进行报警,当酒精浓度超过了设定值,则蜂鸣器发声进行报警,将蜂鸣器接到单片机的P33引脚。流程图:开始初始化引脚是否为低电平蜂鸣器发生结束是否3.2.3 酒精检测子程序设计 酒精检测模块采用MQ-Snsor酒精气体传感器和ADC0809组成,将采集到的酒精浓度经过模数转换器发给单片机。流程图:开始气体检测Adc0809模数转换发送给单片机结束4 系统调试与性能分析4.1 开机界面 开机之后1602界面显示 ,酒精检测模块气体中酒精度发送给单片机。4.2 浓度判断 当检测到的酒精浓度大于设定的阈值时,则单片机驱动蜂鸣器发生进行报警,提示检测者酒精浓度已经超标。4.3 阈值修改(1)硬件修改 通过改变酒精传感器的电阻值来改变传感器对气体酒精度的检测灵敏度,来修改阈值。(2)软件修改 通过对系统运行程序进行阈值设定,检测到的酒精浓度,进行人为的软件设定阈值,进行判别。总结: 本作品针对生活中因醉酒驾驶引发交通事故日益严重,明确研究方向,制定计划方案。深入研究酒精传感器、模数转换器等器件原理,查阅相关酒驾标准。为制作出满足实际要求的作品,做好充分的准备。在此期间所遇到的问题,通过最有效、最准确的渠道进行解决,为成功扫清障碍。随着对单片机、ADC0809、LCD显示器的加深了解,对信号采集和数据算法处理的进一步学习;加入温度、湿度和气压的影响,在现有基础上进行改进,一定会使测得的数据更加准确,使作品与预期目标更接近。使其能成为商品,进入家庭,实现我们以此为课题的最终目的。参考文献1 单成祥.传感器的理论与设计基础及其应用M.北京:国防工业出版社,2 张福学.现代传感器电路M.北京:中国计量出版社,2000,441 3 吴兴惠,王彩君.传感器与信号传感器M.北京:电子工业出版社,1998 4 万隆,巴奉丽.单片机原理及应用技术M.北京:清华大学出版社,2010 5 汤竟南,沈国琴.51单片机C语言开发与实例M.人民邮电出版社 6 雷伏容,张小林,崔浩.51单片机常用模块设计查询手册M.北京:清华大学出版社,20107 韩成,张延 拿了就用单片机M.北京:人民邮电出版社,2008 8 赵建领.51系列单片机开发宝典M.北京:电子工业出版社,2007-04 9 张毅刚 单片机原理及接口技术 :人民邮电出版社附录A 硬件电路图附录B 程序清单/*/项目名称:酒精测试仪/程序内容:通过酒精模块将采集到的酒精浓度显示到1602上/ 如果浓度超过设定值,则进行报警。/*/#include <reg52.h> /头文件#define uchar unsigned char /宏定义无符号字符型#define uint unsigned int /宏定义无符号整型uchar code table=""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 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-) ; /*/* 函数名称 : 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;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=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振荡信号*/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;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();/液晶显示显示函数 if(DOUT=0)/当浓度高于设定值时 ,执行条件函数 yanshi(5);/延时抗干扰if(DOUT=0)/确定 浓度高于设定值时 ,执行条件函数 beep=0; yanshi(2000); beep=1; 第二部分:课堂设计内容:温度测量系统1 实验目的根据温度控制系统的要求和特点,设计了一种基于51单片机的温度显示系统。该系统以单片机为控制核心,结合外围信号采集电路、LCD显示电路、报警电路,实现对温度的测量报警控制。2实验内容温度控制装置由单片机最小系统、LCD液晶显示电路、报警电路、温度传感器。等四部分组成。3实验原理将温度传感器采集的数据输入单片机,单片机与程序内预先设定好电压阈值进行比较,如果温度数据大于所设定的温度阈值,则蜂鸣器发生进行报警,整个过程LCD实时显示:温度阈值、实际温度值。4实验步骤主程序主要完成初始化、以及调用显示、指示灯、温度采集等等。具体模块包括: 显示程序设计 温度采集程序设计 温度处理程序设计显示程序设计主要将几个数组的内容通过LCD1602的写数据指令显示在LCD屏上。温度采集程序 通过18B20温度传感器实时采集温度并发送给单片机。温度处理程序设计 将采集到的实时温度与设定温度阈值进行比较,如果温度大于预先设定的阈值,则蜂鸣器发生进行报警。 5 流程图:开始温度检测是否大于设定值声报警1602液晶显示结束否是6 程序清单:/将DS18B20所采集到的温度实时显示到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; /1602引脚定义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 writeData(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) /将数据一个接着一个的写入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()/bit函数返回值只能是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);/位或运算,读出的数据最低位在最前/面,这样刚好一个字节在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 = 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); 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 / 10000;datas1 = tmp % 10000 / 1000;datas2 = tmp % 1000 / 100;datas3 = tmp % 100 / 10;datas4 = tmp % 10;aa=datas2;writeComm(0xc0+3);if(v < 0)writeString("- ", 2);elsewriteString("+ ", 2);if(datas0 != 0)writeData('0'+datas0);for(count = 1; count != 5; count+)writeData('0'+datascount);if(count = 2)writeData('.');void main()uchar table = " xianzaiwendu: " /定义数组table,16字节sendChangeCmd();init();writeComm(0x80);writeString(table, 16); /将table数组中数据写入到1602的第一行中while(1)delayMs(1000); /温度转换时间需要750ms以上writeComm(0xc0);display(getTmpValue();sendChangeCmd();if(aa>2) beep=0; delayMs(2000); beep=1; 课程设计成绩考核表课程设计成绩考核表学 院计算机科学与工程学院专 业电子信息工程班 级140405姓 名李延琦学 号课程名称单片机原理及应用课程设计课程设计题目酒精测试仪考 核 项 目满分值得分1.独立完成设计任务202.设计方案、说明书、图纸、程序、计算等完成量303.创新与发挥104.答辩(口试)40合计得分成 绩指导教师签字几点说明一、 此表由指导教师进行课程设计成绩评定时填写。、二、 课程设计成绩根据学生各项考核最后得分,按“优”、“良”、“中”、“及格”、“不及格”五级评定。期中,90分以上为“优”;80-89分为“良”;70-79分为“中”;60-69分为“及格”;60分以下为“不及格”。三、 课程设计结束后,此表由指导教师放入课程设计资料袋,送承担课程的教研室存档。2017年1月6日

    注意事项

    本文(51单片机课程设计 .doc)为本站会员(yy****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开