基于51单片检测 电子万年历的毕业设计崔晓_第1页
基于51单片检测 电子万年历的毕业设计崔晓_第2页
基于51单片检测 电子万年历的毕业设计崔晓_第3页
基于51单片检测 电子万年历的毕业设计崔晓_第4页
基于51单片检测 电子万年历的毕业设计崔晓_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机控制技术课程设计说明书论文题目:基于51单片机温湿度检测+电子万年历的设计院 系 电气工程与自动化学院专 业 电气工程及其自动化班 级 b150331 学生姓名 崔晓敏 学 号 b15033101 指导教师 张 娟 梅 2016年12月25日 第1章 绪论 随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体

2、振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子

3、万年历的设计,使其更加的具有市场。本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件部分有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。基本的要了解一些主要器件的基本功能和作用。除了采用集成化的时钟芯片外,还有采用mcu的方案,利用stc89c52rc单片微机制成万年历电路,采用软件和硬件结合的方法,控制lcd1602输出,分别用来显示年、月、日、时、分、秒,还有温度和湿度,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。stc89c52是stc公司生产的一种低功耗、高性能cmos8位微控制器,具有 8k 在系统可编程flash存储器。stc89c52

4、使用经典的mcs-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位cpu 和在系统可编程flash,使得stc89c52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 本文介绍了基于stc89c52rc单片机设计的电子万年历。第2章 设计要求与方案2.1设计要求2.1.1 基本要求 具有年、月、日、星期、时、分、秒等功能;2.1.2 扩展功能 具有温湿度检测功能;2.2 电路设计最终方案 综上各方案所述,对此次作品的方案选定: 采用stc89c52rc作为主控制系统; ds1302提供时钟; 温湿度传感器sht10检测温湿度;lcd1206

5、液晶显示屏作为显示。第3章 硬件设计与原理 以stc89c52rc单片机为核心,起着控制作用。系统包括lcd1602液晶显示电路、复位电路、时钟电路、温湿度采集电路、按键调整子函数、按键提示音电路、报警指示灯电路和时钟芯片电路。设计思路分为九个模块:复位电路、晶振电路模块、stc89c52rc、lcd1602液晶显示电路、温湿度采集电路、按键调整子函数、按键提示音电路、报警指示灯电路和时钟芯片电路这九个模块。3.1 系统设计方框图3.2 硬件设计分析3.2.1 显示系统 lcd1602分为带背光和不带背光两种,基控制器大部分为hd44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,

6、两者尺寸差别如下图3-2-1所示:图3-2-1 lcd1602尺寸图 lcd1602的主要技术参数: 1、显示容量:162个字符2、芯片工作电压:4.55.5v3、工作电流:2.0ma(5.0v)4、模块最佳工作电压:5.0v5、字符尺寸:2.954.35(wh)mm引脚功能说明lcd1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如图3-2-2所示:编号符号引脚说明编号符号引脚说明1vss电源地9d2数据2vdd电源正极10d3数据3vl液晶显示偏压11d4数据4rs数据/命令选择12d5数据5r/w读/写选择13d6数据6e使能信号14d7数据7d0数据15bla背

7、光源正极8d1数据16blk背光源负极图3-2-2引脚接口说明 第1脚:vss为地电源。第2脚:vdd接5v正电源。第3脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:r/w为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和r/w共同为低电平时可以写入指令或者显示地址,当rs为低电平r/w为高电平时可以读忙信号,当rs为高电平r/w为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时

8、,液晶模块执行命令。第714脚:d0d7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。3.2.2 lcd1602的指令说明及时序序号指令rsr/wd7d6d5d4d3d2d1d01清显示00000000012光标返回000000001*3置输入模式00000001i/ds4显示开/关控制0000001dcb5光标或字符移位000001s/cr/l*6置功能00001dlnf*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01bf计数器地址10写数到cgram或ddram)10要写的数据内容11从cgram或ddram读

9、数11读出的数据内容图3-2-3控制命令表1602液晶模块内部的控制器共有11条控制指令,如图3-2-3所示: 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01h,光标复位到地址00h位置。指令2:光标复位,光标返回到地址00h。指令3:光标和显示模式设置i/d:光标移动方向,高电平右移,低电平左移s:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。d:控制整体显示的开与关,高电平表示开显示,低电平表示关显示c:控制光标的开与关,高电平表示有光标,低电平表示无光标b:控制光标是否

10、闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位s/c:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器ram地址设置。指令8:ddram地址设置。指令9:读忙信号和光标地址bf:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。3.2.3 lcd1602的ram地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确

11、认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3-2-4是1602的内部显示地址。图3-2-4 lcd1602内部显示地址例如第二行第一个字符的地址是40h,那么是否直接写入40h就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位d7恒定为高电平1所以实际写入的数据应该是01000000b(40h)+10000000b(80h)=11000000b(c0h)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的

12、状态。1602液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a”。图3-2-5 液晶显示电路3.2.4 时钟电路模块(1) 时钟芯片ds1302的工作原理ds1302在每次进行读、写程序前都必须初始化,先把sclk端置 “0”,接着把rst端置“1”,最后才给予sclk脉冲;读/写时序如下图4所示。图5为ds1302的控制字,此控制字的位

13、7必须置1,若为0则不能把对ds1302进行读写数据。对于位6,若对程序进行读/写时ram=1,对时间进行读/写时,ck=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为ds1302的日历、时间寄存器内容:“ch”是时钟暂停标志位,当该位为1时,时钟振荡器停止,ds1302处于低功耗状态;当该位为0时,时钟开始运行。“wp”是写保护位,在任何的对时钟和ram的写操作之前,wp必须为0。当“wp”为1时,写保护位防止对任一寄存器的写操作。图3-2-6时钟芯片ds1302电路图(2) ds1302

14、的控制字节ds1302的控制字如表3-2-7所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入ds1302中,位6如果0,则表示存取日历时钟数据,为1表示存取ram数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 ram rd 1 a4 a3 a2 a1 a0 / ck /wr图3-2-7 ds1302的控制字格式(3) 数据输入输出(i/o)在控制指令字输入后的下一个sclk时钟的上升沿时,数据被写入ds1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个sclk脉冲的

15、下降沿读出ds1302的数据,读出数据时从低位0位到高位7。如下图3-2-8所示图3-2-8 ds1302读/写时序图(4) ds1302的寄存器ds1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为bcd码形式,其日历、时间寄存器及其控制字见图3-2-9。图3-2-9 ds1302的日历、时间寄存器此外,ds1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与ram相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 ds1302与ram相关的寄存器分为两类:一类是单个ram单元,共31个,每个单元组态为一个8位的字节,其命令控

16、制字为c0hfdh,其中奇数为读操作,偶数为写操作;另一类为突发方式下的ram寄存器,此方式下可一次性读写所有的ram的31个字节,命令控制字为feh(写)、ffh(读)。 图 2-3示出ds1302的引脚排列,其中vcc1为后备电源,vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302由vcc1或vcc2两者中的较大者供电。当vcc2大于vcc1+0.2v时,vcc2给ds1302供电。当vcc2小于vcc1时,ds1302由vcc1供电。x1和x2是振荡源,外接32.khz晶振。rst是复位/片选线,通过把rst输入驱动置高电平来启动所有的数据传送。rst输入有两种

17、功能:首先,rst接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,rst提供终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rsts置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电动行时,在vcc大于等于2.5v之前,rst必须保持低电平。中有在sclk 为低电平时,才能将rst置为高电平,i/o为串行数据输入端(双向)。sclk始终是输入端。3.2.5 温湿度采集模块图3-2-10 温湿度采集系统3.2.6 按键调整电路图3-2-11 按键调整电路3.2.7 按键提示音电路图3-2-12 按键提示音电

18、路3.2.8 报警指示灯电路图3-2-13 报警指示灯电路第4章 程序设计4.1 程序设计的组成该系统由延时子函数、检查lcd1602液晶忙位子函数、lcd1602液晶写指令子函数、lcd1602液晶写数据子函数、lcd1602液晶初始化子函数、sht10写字节子函数、sht10读字节子函数、sht10启动传输子函数、sht10连接复位子函数、sht10温湿度检测子函数、sht10温湿度值标度变换及温度补偿子函数、温湿度显示子函数、lcd1602液晶写参数子函数、按键提示音子函数、按键扫描子函数、主函数和数据定义这几部分组成。4.2 部分程序分析4.2.1 检查lcd1602液晶忙位子函数/检

19、查lcd1602液晶忙位子函数void lcd1602_busy() uchar i=0;rs=0; rw=1; e=1; p0=0xff;i=0; while(p0&0x80)=0x80)&i150)i+; e=0; 4.2.2 lcd1602液晶写指令子函数/lcd1602液晶写指令子函数void write_com(uchar com)lcd1602_busy();rs=0;rw=0;p0=com;e=1;e=0;4.2.3 lcd1602液晶写数据子函数/lcd1602液晶写数据子函数void write_date(uchar date)lcd1602_busy();rs=1;rw=0

20、;p0=date; e=1;e=0;4.2.4 lcd1602液晶初始化子函数/lcd1602液晶初始化子函数void lcd1602_init()/初始化设置uchar i;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(i=0;i16;i+)write_date(table1i);delay(500);write_com(0xc0);for(i=0;i0;i=1) /高位为1,循环右移 if(i&value) data=1;/和要发送的数相与,结果为发送的位 else d

21、ata=0; sck=1; _nop_();_nop_();_nop_();/延时3us sck=0;data=1; /释放数据线sck=1; error=data; /检查应答信号,确认通讯正常_nop_();_nop_();_nop_();sck=0; data=1;return error; /error=1 通讯错误4.2.6 sht10读字节子函数/sht10读字节子函数char s_read_byte(uchar ack) uchar i,val=0;data=1; /释放数据线for(i=0x80;i0;i=1) /高位为1,循环右移 sck=1; if(data) val=(v

22、al|i); /读一位数据线的值 sck=0; data=!ack; /如果是校验,读取完后结束通讯;sck=1; _nop_();_nop_();_nop_();/延时3us sck=0; _nop_();_nop_();_nop_(); data=1; /释放数据线return val;4.2.7 sht10温湿度检测子函数/sht10温湿度检测子函数char s_measure(uchar *p_value,uchar *p_checksum,uchar mode) unsigned error=0;uint i;s_transstart(); /启动传输switch(mode) /选择

23、发送命令 case temp: error+=s_write_byte(0x03); break; /测量温度 case humi:error+=s_write_byte(0x05); break; /测量湿度 default: break; for(i=0;i65535;i+) if(data=0) break; /等待测量结束if(data) error+=1; / 如果长时间数据线没有拉低,说明测量错误 *(p_value)=s_read_byte(1); /读第一个字节,高字节 (msb)*(p_value+1)=s_read_byte(1); /读第二个字节,低字节 (lsb)*p_

24、checksum=s_read_byte(0);/read crc校验码return error;/ error=1 通讯错误第5章 电路仿真5.1 仿真图 通过总设置键进入日期、时钟画面。点击设置键进入设置状态,通过上调、下调键实现对年、月、日、时、分、秒、星期的设置。图6-2-1 电路仿真总 结通过理论分析和电路验证,现在对此次课程设计的温湿度系统设计结果进行总结。通过硬件我们可以看到结果和理论分析是相符合的,也即此次设计的系统能够在一定的条件下达到课程设计目的,实现对外界温湿度的测量,电路结构简单。同时,在本次设计中,也深刻体会到理论和实践相集合的重要性。虽然之前收集了大量的资料但在实际

25、应用中却有很大差异,出现了许多意想不到的问题。但经过长时间的摸索最终还是设计出达到要求的系统。课程设计是既是对学校所学知识的全面总结和综合应用,又为今后走向社会的实际操作应用铸就了一个良好开端,课程设计是我对所学知识理论的检验与总结,能够培养和提高设计者独立分析和解决问题的能力;是我在校期间向学校所交的最后一份综和性作业,其次,课程设计的指导是老师检验其教学效果,改进教学方法,提高教学质量的绝好机会。在不断的努力下我的课程设计终于完成了。在没有做课程设计以前觉得课程设计只是对这几年来所学知识的大概总结,但是真的面对课程设计时发现自己的想法基本是错误的。课程设计不仅是对前面所学知识的一种检验,而

26、且也是对自己能力的一种提高。通过这次课程设计使我明白了自己原来知识太理论化了,面对单独的课题的是感觉很茫然。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次课程设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。在此要感谢我的指导老师对我悉心的指导,感谢老师们给我的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后

27、的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。参考文献1李群芳,张士军,黄建.单片微型计算机与接口技术. 北京:电子工业出版社,20082李群芳.单片机原理接口与应用.北京:清华大学出版社,20053张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,19994高峰.单片微机应用系统设计及使用技术.北京:机械工业出版社,20075彭伟.单片机c语音程序设计实例基于protues仿真.北京:电子工业出版社,20077张

28、冬林,李鑫,戴梅.基于dht11的低成本蚕室温湿度自动控制系统设计j.现代农业科技,2010,(18):14-15 .8 徐春河.浅谈at89s51j.制造业自动化,2010,(12):80-82.9吴汉清.常用的典型单片机资料j.无线电,2007,(11):72-80.10叶健斌.基于单片机嵌入式系统的gps应用j.电子质量,2008,(7):16-24.11 刘宝元,张玉虹,姜旭,段存丽.基于单片机的温湿度监控系统设计j.国外电子测量技术,2009,(12):77-80,83.12王静.通用库房温湿度测控系统d.中国海洋大学,2009.13陈汝全.实用微机与单片机控制技术m电子科技大学出版

29、社1995.7 12.14 张广军,黄俊钦.温度传感器现场动态校准方法与实验研究j 北京航空航天大学学报 1997年23卷3期 311-315.15 李建民单片机在温度控制系统中的应用m江汉大学学报,1996.6 210-215.16. 薛玲,孙曼,张志会,夏莉丽,魏希文.基于单片机at89s51的温湿度控制仪j.2010,37, (7):66-69附图原理图:附表元件清单:附程序总程序:#include/定义函数#includetypedef unsigned char uchar;/无符号8位整型变量 typedef unsigned int uint;/无符号16位整型变量 sbit r

30、s=p27;/lcd1602数据/命令选择端(h/l) sbit rw=p26;/lcd1602读/写选择端(h/l)sbit e=p25;/lcd1602使能信号端sbit data=p36;sbit sck=p37;sbit k1=p32;/总设置按键sbit k2=p33;/设置按键sbit k3=p34;/+按键sbit k4=p35;/-按键sbit beep=p20;sbit d1=p10;/高温报警指示灯sbit d2=p11;/低温报警指示灯sbit d3=p12;/高湿度报警指示灯sbit d4=p13;/低湿度报警指示灯sbit acc0=acc0;sbit acc7=ac

31、c7;sbit io=p15; sbit sclk=p16; sbit rst=p17;uchar idata wendu6; uchar idata shidu6;uchar code table1= 2013-08-30 ;uchar code table2= qq:383459194 ;uchar code table3= gaowenbaojing ;uchar code table4= diwenbaojing ;uchar code table5=gaoshidubaojing ;uchar code table6= dishidubaojing ;uchar code table

32、7=gaowen+gaoshidu ;uchar code table8= gaowen+dishidu ;uchar code table9= diwen+gaoshidu ;uchar code table10= diwen+dishidu ;uchar code table11= this is ok ;uchar code table12= ;uchar code table13= : : ;enum temp,humi;typedef union /定义共用同类型 uint i;float f; value;uchar a,b,c,d,num,flag=0,m=0,num1=0;ch

33、ar miao,shi,fen;uchar ccc,ri,yue,nian,zhou,flag1;/延时子函数void delay(uint z) uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);/按键提示音子函数void di()beep=0;delay(100);beep=1;/往ds1302时钟芯片写入一字节子函数void inputbyte(uchar add) uchar i; acc=add; for(i=8;i0;i-) io=acc0; sclk=1; sclk=0; acc=acc1; /ds1302时钟芯片输出一字节子函数uchar outp

34、utbyte() uchar i; for(i=8;i0;i-) acc=acc1; acc7=io; sclk=1; sclk=0; return acc;/往ds1302时钟芯片写入数据子函数void write_ds(uchar add,uchar ucda) rst=0; sclk=0; rst=1; inputbyte(add); inputbyte(ucda); sclk=1; rst=0;/从ds1302时钟芯片读出数据子函数uchar read_ds(uchar add) uchar ucda; rst=0; sclk=0; rst=1; inputbyte(add); ucd

35、a=outputbyte(); sclk=1; rst=0; return(ucda);/设置ds1302时钟芯片子函数void write_setds(uchar addr,uchar date) write_ds(0x8e,0x00); write_ds(addr,date); write_ds(0x8e,0x80);/检查lcd1602液晶忙位子函数void lcd1602_busy() uchar i=0;rs=0; rw=1; e=1; p0=0xff;i=0; while(p0&0x80)=0x80)&i150)i+; e=0; /lcd1602液晶写指令子函数void write

36、_com(uchar com)lcd1602_busy();rs=0;rw=0;p0=com;e=1;e=0;/lcd1602液晶写数据子函数void write_date(uchar date)lcd1602_busy();rs=1;rw=0;p0=date; e=1;e=0;/lcd1602液晶初始化子函数void lcd1602_init()/初始化设置/uchar i;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);/*write_com(0x80);for(i=0;i16;i+)write_date(table1i);delay(500);write_com(0xc0);for(i=0;i0;i=1) /高位为1,循环右移 if(i&value)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论