毕业设计方案第三题无线遥控.doc

上传人:牧羊曲112 文档编号:4227231 上传时间:2023-04-10 格式:DOC 页数:33 大小:1.10MB
返回 下载 相关 举报
毕业设计方案第三题无线遥控.doc_第1页
第1页 / 共33页
毕业设计方案第三题无线遥控.doc_第2页
第2页 / 共33页
毕业设计方案第三题无线遥控.doc_第3页
第3页 / 共33页
毕业设计方案第三题无线遥控.doc_第4页
第4页 / 共33页
毕业设计方案第三题无线遥控.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《毕业设计方案第三题无线遥控.doc》由会员分享,可在线阅读,更多相关《毕业设计方案第三题无线遥控.doc(33页珍藏版)》请在三一办公上搜索。

1、江西工业职业技术学院毕 业 设 计 论 文)课题名称 _无线遥控温度数显钟_学生姓名_刘志峰_学 号_20092172_分 院_电子信息分院_专 业_应用电子技术_班 级_09应用电子班_指导老师_胡蓉_2018 年 2月红外遥控温度数显钟摘要:本设计利用STC89C52单片机设计了一款具有时钟、温度、闹铃并可用红外遥控器进行时间调节、闹铃开关等功能的红外遥控温度数显钟。四位一体数码管显示,可实现时间、温度的画面切换。使用PT2262,PT2272无线发射接收模块控制,操作简单方便,操作距离空旷地可达100m。时钟采用单片机定时器,温度模块为DS18B20温度传感器,USB供电,简单方便。关键

2、字:STC89C52、无线遥控、温度显示,时钟显示目录1、 前言 目的 意义 范围 技术要求2、 正文1)、设计方案论证1、方案选择2、方案特点2)、系统硬件结构设计1、模块设计分析2、数据分析3)、系统软件结构设计1、程序流程框图3、结论4、谢辞5、参考文献与附录一、 前言不论是在网上看视频还是看别人的论文,都看到过很多不同类型的电子钟,有的是运用了时间芯片,比如DS1302,DS12C887等等,拿这两块芯片来说,1302价格相对便宜,但是要使用外围器件和外部电源作为备用电源使用;DS12C887虽然功能强大,有内部的备用电源 ,带闹钟等诸多功能,但是价格比较昂贵。考虑到制作价格和硬件复杂

3、度的诸多因素,我还是决定暂时使用单片机的定时器来实现时钟功能,直接使用软件编程来实现闹钟的功能。运用DS18B20温度模块来读取温度值,送给四位一体的数码管显示出来,这样不仅可以降低设计的成本,使硬件电路简单,而且可以使用现成的硬件电路:DH-2C单片机开发板调试程序,不必使用仿真软件,省去了不必要的麻烦。目的:编写程序实现时间温度的显示,并且用软件实现闹钟功能,使用无线发射接收模块实现遥控的功能。尽量简化硬件电路,不实用时间芯片,增强自己的编程能力等。意义:集多种功能于一身,在显示时间的同时还能显示环境温度,对于学生练习编程技巧,掌握简单产品的设计,有很多的提高。适用范围:家庭使用,简单电子

4、产品的开发等。技术要求:实现时间显示,环境温度显示,闹钟,遥控调时等功能二、设计方案论证采用单片机自身的定时器实现时钟功能,用软件编写出闹钟程序,声音用蜂鸣器发出,显示使用四位一体的共阳数码管,用点的闪烁实现秒的显示,使用PT2262,PT2272无线发射接收模块实现遥控调试和闹钟的关闭等功能。使用无线模块不会受光线的干扰和影响,并且遥控的范围远,灵敏度高。相对于使用红外遥控更简单方便。在使用无线遥控模块的时候,我们利用无线接收端的引脚产生高电平的输出,接到9013三极管的基极,而三极管的集电极接在单片机的引脚上,一旦开启遥控,那么单片机的引脚就回检测到低电平,从而像按键一样实现调时调分和关闭

5、闹钟的功能,这样不但可以用遥控设定时间,还可以用来设定闹钟的时间,使设计方便简洁,使用简单方便。没有使用时间芯片也节约了成本,简约了硬件电路的设计。三、 系统硬件结构设计1、 无线遥控模块发射模块原理图使用中无需调整频点,特别适合多发一收等无线电遥控系统使用,而目前的一些无线电遥控模块一般仍采用LC振荡器,稳定度及一致性较差,即使采用高品质微调电容,当温度变化或者震动后也很难保证已调试好的频点不会发生偏移,造成发射距离缩短。接收模块原理图接收模块从工作方式分,可以分成超外差接收板和超再生接收板。超再生式接收机具有电路简单、性能适中、成本低廉的优点所以在实际应用中广泛采用。2、温度模块 温度模块

6、采用DS18B20温度传感器作为温度的采集模块DS18B20的特性:1)独特的单线接口,仅需一个端口进行通讯2)912位的分辨率可调RS)3)测温范围为-55C+125C -67F+257F)4)测量范围在-10C +85C精度为0.5C 5)可设置报警温度存储于EEPROM,掉电保护数据不丢8位是产品类型标号,对于DS18B20来说就是(28H。接着的48位是器件自身的序列号;最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1.光刻ROM的作用是使每个DS18B20都不相同,这样可以实现一根总线上挂接多个DS18B20的目的。ROM几种操作命令:Read ROM (读ROM

7、命令 【33H】Match ROM (符合ROM 命令 【55H】 Skip ROM (跳过ROM 命令 【CCH】Search ROM (搜索ROM 命令 【F0H】Alarm Search (读ROM 命令 【ECH】RAM:高速暂存存储器由9个字节组成,包含了8个连续字节,前面两个字节是测得的温度信息,第一个字节的内容是温度的低8位,第二个字节是温度的高8位。第三个和第四个字节是温度高限TH和温度底限TL的暂存区,第五个字节是配置寄存器暂存区,第6、7、8、9字节是系统保留用,相当于DS18B20的运算内存,第9个字节是冗余校验字节。RAM内部字节分布如下.Write Scratchpa

8、d (写暂存存储器 【4EH】Read Scratchpad(读暂存存储器 【BEH】Copy Scratchpad(复制暂存存储器 【48H】Convert T (温度变换 【44H】Recall E (从新调整E 【B8H】Read Power Supply(读电源 【B4H】如何操作DS18B20:复位操作:主机单片机)和DS18B20间的任何通讯都需要以初始化序列开始,初始化序列就是主机发出一个复位脉冲跟着检测一个DS18B20的存在脉冲,表明DS18B20已经准备好发送和接收数据。初始化序列见下图:主机首先发出一个480960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480

9、微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就一直在检测总线上是否有480960微秒的低电平出现,如果有,在总线转为高电平后等待1560微秒后将总线电平拉低60240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。对DS18B20读和写操作:接下来就是主机发出各种操作命令,但各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。写周期最少为60微秒,

10、最长不超过120微秒。写周期一开始作为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平,1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。写时序图:读时序图:对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测

11、到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成温度的转换:首先主机先作个复位操作,接着主机再写跳过ROM的操作CCH)命令,然后然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如CCH的二进制为11001100

12、,在写到总线上时要从低位开始写,写的顺序是“00110011”。整个操作的总线状态如下图RAM内部温度数据的读取:同样,这个操作也要接照三个步骤。1、主机发出复位操作并接收DS18B20的应答存在)脉冲。2、主机发出跳过对ROM操作的命令CCH)。3、主机发出读取RAM的命令BEH),随后主机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如下图:3、显示电路和主要电路连线电路PCB遥控模块只要直接插接在电路板上即可。四、源程序 1)主程序/*

13、毕业设计 之 时钟温度显示硬件:DH-2C开发板数码管显示)独立按键调节时间s3调节时s4调节分s5选择显示温度还是显示时间、闹钟定时界面默认显示时钟*/#include#include#include#include#includevoid timer(TMOD=0x11。TH0=0x4c。TL0=0x00。/定时50msTH1=0x4c。TL1=0x00。/定时50msEA=1。ET1=1。ET0=1。TR0=1。void main(timer(。while(1temper=duwendu(。temper=(temper*0.0625*10+0.5。ke(。switch(mmcase 1:

14、xianshi1(。 break。/默认显示时间 case 2:display(。break。/按下s5后显示温度case 3:xianshi0(。 break。/闹钟显示default:xianshi1(。 break。/默认显示时间naozhon(。void timer0( interrupt 1/中断服务程序TH0=0x4c。TL0=0x00。/定时50msbian+。if(bian=20bian=0。miao+。if(miao=60miao=0。fen+。if(fen=60fen=0。shi+。if(shi=24shi=0。void timer1( interrupt 3TH1=0x4

15、c。TL1=0x00。/定时50msbeep=0。delay1(50。beep=1。delay1(10。key1(。2)#include 头文件#define uint unsigned int/宏定义#define uchar unsigned charint temper。sbit ds=P24。 /位申明sbit beep=P25。sbit we1=P20。sbit we2=P21。sbit we3=P22。sbit we4=P23。sbit s3=P32。sbit s4=P33。sbit s5=P34。sbit s6=P35。uchar bian,mm=1,nn。/变量的申明uchar

16、 shi,fen,miao,shi0,fen0,miao0。uchar shishi,shige,fenshi,fenge,miao1。uchar shishi0,shige0,fenshi0,fenge0,miao10。void delay(uint z/温度的延时函数uchar i,j。for(i=z。i0。i-for(j=1。j0。j-。void delay1(uint z1 /显示用的延时函数uchar i,j。for(i=z1。i0。i-for(j=111。j0。j-。uchar code tab1= /时钟,跳动的点的数据 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*

17、点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/

18、0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xF

19、F,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/。unsigned char code tab= 0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/。unsigned char code table1= 0x40,/*0*/ 0x79,/*1*/ 0x24,/*2*/ 0x30,/*3*/ 0x19,/*4*/ 0x12,/*5*/ 0x02,/*6*/ 0x78,/*7*/

20、 0x00,/*8*/ 0x10,/*9*/。3)#include头文件/按键子程序void ke(/画面切换if(s5=0delay1(5。if(s5=0while(!s5。mm+。if(mm=4mm=1。void key( /调时if(s4=0delay1(5。if(s4=0while(!s4。fen+。if(fen=60fen=0。if(s3=0delay1(5。if(s3=0while(!s3。shi+。if(shi=24shi=0。void key0( /闹钟界面的定时用if(s4=0delay1(5。if(s4=0while(!s4。fen0+。if(fen0=60fen0=0。i

21、f(s3=0delay1(5。if(s3=0while(!s3。shi0+。if(shi0=24shi0=0。void naozhon(/闹钟子函数if(fen0|(shi0|(miao1=60/只有分钟或十钟大于0的时候才进入闹钟,00:00:59;if(shishi=shishi0&(shige=shige0&(fenshi=fenshi0&(fenge=fenge0&(nn=0 TR1=1。elsebeep=1。void key1( /闹钟停止按键if(s6=0delay(10。if(s6=0while(!s6。nn+。switch(nncase 0:naozhon(。break。cas

22、e 1:TR1=0。break。case 2:naozhon(。break。default:naozhon(。break。4)#include温度采集头文件/温度获取程序uchar set(uchar mc。ds=0。 /拉低总线delay(29。/延时480960USds=1。 /拉高delay(3。/延时等待15USmc=ds。 /把总线上的值给MCdelay(25。return(mc。/把MC的值返回,为低表示有器件18B20uchar duwei(ds=0。ds=1。delay(1。return(ds。void xiewei(uchar datds=0。if(dat=1ds=1。del

23、ay(5。ds=1。uchar duzijie(uchar x,dat=0。for(x=0。xif(duwei(dat=dat|0x01。return(dat。void xiezijie(uchar dateuchar y,j。for(y=0。yj=(datey&0x01。xiewei(j。delay(1。int duwendu(uchar templ,temph。int temp。set(。 /复位xiezijie(0xcc。/跳过ROMxiezijie(0x44。/温度转换命令delay(1000。set(。xiezijie(0xcc。xiezijie(0xbe。/读数据的命令templ=

24、duzijie(。 /读温度值低八位temph=duzijie(。 /读温度值高八位temp=templ+temph*256。/高字节是低字节的256倍return(temp。5)#include显示部分的头文件/显示程序void display1( shishi, shige, fenshi, fenge, miao1P1=tabshishi。/时间显示程序we1=0。delay1(5。we1=1。P1=tabshige。 we2=0。delay1(5。we2=1。P1=tabfenshi。we3=0。delay1(5。we3=1。P1=tabfenge。 we4=0。delay1(5。we

25、4=1。P1=tab1miao1。we2=0。delay1(5。we2=1。void display0( shishi0, shige0, fenshi0, fenge0, miao10P1=tabshishi0。/时间显示程序we1=0。delay1(5。we1=1。P1=tabshige0。 we2=0。delay1(5。we2=1。P1=tabfenshi0。we3=0。delay1(5。we3=1。P1=tabfenge0。 we4=0。delay1(5。we4=1。P1=tab1miao10。we2=0。delay1(5。we2=1。void display(uint temper/

26、温度显示程序 uchar A1,A2,A2t,A3。 A1=temper/100。 A2t=temper%100。 A2=A2t/10。 A3=A2t%10。 P1=tabA1。/显示百位 we1=0。 delay1(5。 we1=1。 P1=table1A2。/显示十位 we2=0。 delay1(5。 we2=1。 P1=tabA3。/显示个位 we3=0。 delay1(5。 we3=1。void xianshi1(key(。/调用按键调时程序miao1=miao。fenshi=fen/10。fenge=fen%10。shishi=shi/10。shige=shi%10。display1

27、( shishi, shige, fenshi, fenge, miao1。void xianshi0(key0(。/调用按键定时程序miao10=miao0。fenshi0=fen0/10。fenge0=fen0%10。shishi0=shi0/10。shige0=shi0%10。display0( shishi0, shige0, fenshi0, fenge0, miao10。时间显示图片温度显示图片闹钟时间设置显示界面图片五、结论:本次的设计完全按照预定实现实现各项功能,遥控距离可达到100M远,时间显示虽然没有使用时间模块精准,但也比较精准了,符合时钟的要求,而且温度的显示也正常,闹

28、钟功能用软件成功实现,硬件简化,也许还是有很多的不足之处,但这也是以后要重点研究和继续掌握的东西。六、谢辞:本次设计耗费了很长时间的准备,和各方面知识的积累,但还是赶时间赶的比较匆忙,如果用更长的时间和更多的费用的话,我还是愿意用时间模块来实现完成我的毕业设计的。不过做毕业设计也确实让我学到了很多的东西,在制图和程序的编写方面都有了长足的进步。对我以后的工作学习有很大的促进作用,相信以后在工作中即使遇到问题我也能很好的解决,因为这次的毕业设计锻炼了我分析问题和解决问题的能力。在此我要特别感谢教导过我学习电子的老师,特别是单片机学习,让我体味到了电子设计的乐趣,感谢为我提供帮助的同学。没有老师们的悉心栽培,我就不会学到这么多实用的东西。谢谢你们!七、参考文献1)电子制作实验室网站

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号