毕业设计方案第三题无线遥控_第1页
毕业设计方案第三题无线遥控_第2页
毕业设计方案第三题无线遥控_第3页
毕业设计方案第三题无线遥控_第4页
毕业设计方案第三题无线遥控_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、C887虽然功能强大,有内部的备用电源 ,带闹钟等诸多功能,但是价格比较昂贵。考虑到制作价格和硬件复杂度的诸多因素,我还是决定暂时使用单片机的定时器来实现时钟功能,直接使用软件编程来实现闹钟的功能。运用DS18B20温度模块来读取温度值,送给四位一体的数码管显示出来,这样不仅可以降低设计的成本,使硬件电路简单,而且可以使用现成的硬件电路:DH-2C单片机开发板调试程序,不必使用仿真软件,省去了不必要的麻烦。 目的: 编写程序实现时间温度的显示,并且用软件实现闹钟功能,使用无线发射接收模块实现遥控的功能。尽量简化硬件电路,不实用时间芯片,增强自己的编程能力等。 意义: 集多种功能于一身,在显示时

4、间的同时还能显示环境温度,对于学生练习编程技巧,掌握简单产品的设计,有很多的提高。 适用范围: 家庭使用,简单电子产品的开发等。 技术要求: 实现时间显示,环境温度显示,闹钟,遥控调时等功能 4 / 32 二、设计方案论证 采用单片机自身的定时器实现时钟功能,用软件编写出闹钟程序,声音用蜂鸣器发出,显示使用四位一体的共阳数码管,用点的闪烁实现秒的显示,使用PT2262,PT2272无线发射接收模块实现遥控调试和闹钟的关闭等功能。使用无线模块不会受光线的干扰和影响,并且遥控的范围远,灵敏度高。相对于使用红外遥控更简单方便。 在使用无线遥控模块的时候,我们利用无线接收端的引脚产生高电平的输出,接到

5、9013三极管的基极,而三极管的集电极接在单片机的引脚上,一旦开启遥控,那么单片机的引脚就回检测到低电平,从而像按键一样实现调时调分和关闭闹钟的功能,这样不但可以用遥控设定时间,还可以用来设定闹钟的时间,使设计方便简洁,使用简单方便。 没有使用时间芯片也节约了成本,简约了硬件电路的设计。 三、 系统硬件结构设计 1、 无线遥控模块 发射模块原理图 使用中无需调整频点,特别适合多发一收等无线电遥控系统使用,而目前的一些无线电遥控模块一般仍采用LC振荡器,稳定度及一致性较差,即使采用高品质微调电容,当温度变化或者震动后也很难保证已调试好的频点不会发生偏移,造成发射距离缩短。 5 / 32 接收模块

6、原理图 接收模块从工作方式分,可以分成超外差接收板和超再生接收板。超再生式接收机具有电路简单、性能适中、成本低廉的优点所以在实际应用中广泛采用。 2、温度模块 温度模块采用DS18B20温度传感器作为温度的采集模块 6 / 32 DS18B20的特性: 1)独特的单线接口,仅需一个端口进行通讯 2)912位的分辨率可调RS) 3)测温范围为-55C+125C -67F+257F) 4)测量范围在-10C +85C精度为0.5C 5)可设置报警温度存储于EEPROM,掉电保护数据不丢 8位是产品类型标号,对于DS18B20来说就是(28H。接着的48位是器件自身的序列号;最后8位是前面56位的循

7、环冗余校验码(CRC=X8+X5+X4+1.光刻ROM的作用是使每个DS18B20都不相同,这样可以实现一根总线上挂接多个DS18B20的目的。 ROM几种操作命令: Read ROM (读ROM 命令 【33H】 Match ROM (符合ROM 命令 【55H】 Skip ROM (跳过ROM 命令 【CCH】 Search ROM (搜索ROM 命令 【F0H】 Alarm Search (读ROM 命令 【ECH】 RAM: 7 / 32 高速暂存存储器由9个字节组成,包含了8个连续字节,前面两个字节是测得的温度信息,第一个字节的内容是温度的低8位,第二个字节是温度的高8位。第三个和第

8、四个字节是温度高限TH和温度底限TL的暂存区,第五个字节是配置寄存器暂存区,第6、7、8、9字节是系统保留用,相当于DS18B20的运算内存,第9个字节是冗余校验字节。RAM内部字节分布如下. Write Scratchpad (写暂存存储器 【4EH】 Read Scratchpad(读暂存存储器 【BEH】 Copy Scratchpad(复制暂存存储器 【48H】 Convert T (温度变换 【44H】 Recall E (从新调整E 【B8H】 Read Power Supply(读电源 【B4H】 如何操作DS18B20: 复位操作: 主机单片机)和DS18B20间的任何通讯都需

9、要以初始化序列开始,初始化序列就是主机发出一个复位脉冲跟着检测一个DS18B20的存在脉冲,表明DS18B20已经准备好发送和接收数据。初始化序列见下图: 主机首先发出一个480960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线8 / 32 上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。 做为从器件的DS18B20在一上电后就一直在检测总线上是否有480960微秒的低电平出现,如果有,在总线转为高电平后等待1560微秒后将总线电平拉低60240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一

10、直在检测等待。 对DS18B20读和写操作: 接下来就是主机发出各种操作命令,但各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。 写周期最少为60微秒,最长不超过120微秒。写周期一开始作为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平,1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采

11、样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。 写时序图: 读时序图: 9 / 32 对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至

12、少需要60us才能完成 温度的转换: 首先主机先作个复位操作,接着主机再写跳过ROM的操作CCH)命令,然后然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如CCH的二进制为11001100,在写到总线上时要从低位开始写,写的顺序是“00110011”。整个操作的总线状态如下图 RAM内部温度数据的读取: 10 / 32 同样,这个操作也要接照三个步骤。1、主机发出复位操作并接收DS18B20的应答存在)脉冲。2、主机发出跳过对ROM操作的命令CCH)。3、主机发出读取RAM的命令BEH),随后主

13、机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如下图: 3、显示电路和主要电路连线 11 / 32 12 / 32 PCB 电路 遥控模块只要直接插接在电路板上即可。 13 / 32 四、源程序 1)主程序 /* 毕业设计 之 时钟温度显示 硬件:DH-2C开发板数码管显示) 独立按键调节时间 s3调节时 s4调节分 s5选择显示温度还是显示时间、闹钟定时界面 默认显示时钟 */ #include #include #include #inc

14、lude #include void timer( TMOD=0x11。 TH0=0x4c。 TL0=0x00。/定时50ms TH1=0x4c。 TL1=0x00。/定时50ms EA=1。 ET1=1。 ET0=1。 TR0=1。 void main( timer(。 while(1 temper=duwendu(。 temper=(temper*0.0625*10+0.5。 ke(。 14 / 32 switch(mm case 1:xianshi1(。 break。/默认显示时间 case 2:display(。break。/按下s5后显示温度 case 3:xianshi0(。 br

15、eak。/闹钟显示 default:xianshi1(。 break。/默认显示时间 naozhon(。 void timer0( interrupt 1 /中断服务程序 TH0=0x4c。 TL0=0x00。/定时50ms bian+。 if(bian=20 bian=0。 miao+。 if(miao=60 miao=0。 fen+。 if(fen=60 fen=0。 shi+。 if(shi=24 shi=0。 void timer1( interrupt 3 TH1=0x4c。 15 / 32 TL1=0x00。/定时50ms beep=0。 delay1(50。 beep=1。 de

16、lay1(10。 key1(。 16 / 32 2)#include 头文件 #define uint unsigned int /宏定义 #define uchar unsigned char int 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 shi,fen,miao,shi

17、0,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,/*点*/ 0

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

19、点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 18 / 32 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x7F,/*点*/ 0xFF,/*点*/ 0x

20、7F,/*点*/ 0xFF,/*点*/ 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,

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

22、面的定时用 if(s4=0 delay1(5。 if(s4=0 while(!s4。 fen0+。 if(fen0=60 fen0=0。 if(s3=0 delay1(5。 if(s3=0 while(!s3。 shi0+。 if(shi0=24 shi0=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。 else beep=1。 21 / 32

23、 void key1( /闹钟停止按键 if(s6=0 delay(10。 if(s6=0 while(!s6。 nn+。 switch(nn case 0:naozhon(。break 。 。case 1:TR1=0 。break break。 case 2:naozhon( break。 。 default:naozhon( 22 / 32 4)#include温度采集头文件 /温度获取程序 uchar set( uchar mc。 ds=0。 /拉低总线 delay(29。/延时480960US ds=1。 /拉高 delay(3。/延时等待15US mc=ds。 /把总线上的值给MC

24、delay(25。 return(mc。/把MC的值返回,为低表示有器件18B20 uchar duwei( ds=0。 ds=1。 delay(1。 return(ds。 void xiewei(uchar dat ds=0。 if(dat=1 ds=1。 delay(5。 ds=1。 uchar duzijie( uchar x,dat=0。 for(x=0。x if(duwei( dat=dat|0x01。 return(dat。 23 / 32 void xiezijie(uchar date uchar y,j。 for(y=0。y j=(datey&0x01。 xiewei(j。

25、delay(1。 int duwendu( uchar templ,temph。 int temp。 set(。 /复位 xiezijie(0xcc。/跳过ROM xiezijie(0x44。/温度转换命令 delay(1000。 set(。 xiezijie(0xcc。 xiezijie(0xbe。/读数据的命令 templ=duzijie(。 /读温度值低八位 temph=duzijie(。 /读温度值高八位 temp=templ+temph*256。/高字节是低字节的256倍 return(temp。 24 / 32 5)#include显示部分的头文件 /显示程序 void displ

26、ay1( shishi, shige, fenshi, fenge, miao1 P1=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。 we4=1。 P1=tab1miao1。 we2=0。 delay1(5。 we2=1。 void display0( shishi0, shige0, fenshi0, fenge0, miao10 P1=tabs

27、hishi0。时间显示程序 / we1=0。25 / 32 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 /温度显示程序 uchar A1,A2,A2t,A3。 A1=temper/100。 。 A2t=temper_x0010_0 。 A2=A2t/10 。 A3=A2t_x0010_ 显示百位/ P1=tabA1。 we1=0。 delay1(5。 we1=1。 P1=table1A2。 /显

温馨提示

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

评论

0/150

提交评论