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

下载本文档

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

文档简介

江西工业职业技术学院毕 业 设 计 (论 文)课题名称 _无线遥控温度数显钟_学生姓名_刘志峰_学 号_20092172_分 院_电子信息分院_专 业_应用电子技术_班 级_09应用电子班_指导老师_胡蓉_2012 年 2月红外遥控温度数显钟摘要:本设计利用STC89C52单片机设计了一款具有时钟、温度、闹铃并可用红外遥控器进行时间调节、闹铃开关等功能的红外遥控温度数显钟。四位一体数码管显示,可实现时间、温度的画面切换。使用PT2262,PT2272无线发射接收模块控制,操作简单方便,操作距离空旷地可达100m。时钟采用单片机定时器,温度模块为DS18B20温度传感器,USB供电,简单方便。关键字:STC89C52、无线遥控、温度显示,时钟显示目录1、 前言 目的 意义 范围 技术要求2、 正文(1)、设计方案论证1、方案选择2、方案特点(2)、系统硬件结构设计1、模块设计分析2、数据分析(3)、系统软件结构设计1、程序流程框图3、结论4、谢辞5、参考文献与附录一、 前言不论是在网上看视频还是看别人的论文,都看到过很多不同类型的电子钟,有的是运用了时间芯片,比如DS1302,DS12C887等等,拿这两块芯片来说,1302价格相对便宜,但是要使用外围器件和外部电源作为备用电源使用;DS12C887虽然功能强大,有内部的备用电源 ,带闹钟等诸多功能,但是价格比较昂贵。考虑到制作价格和硬件复杂度的诸多因素,我还是决定暂时使用单片机的定时器来实现时钟功能,直接使用软件编程来实现闹钟的功能。运用DS18B20温度模块来读取温度值,送给四位一体的数码管显示出来,这样不仅可以降低设计的成本,使硬件电路简单,而且可以使用现成的硬件电路:DH-2C单片机开发板调试程序,不必使用仿真软件,省去了不必要的麻烦。目的:编写程序实现时间温度的显示,并且用软件实现闹钟功能,使用无线发射接收模块实现遥控的功能。尽量简化硬件电路,不实用时间芯片,增强自己的编程能力等。意义:集多种功能于一身,在显示时间的同时还能显示环境温度,对于学生练习编程技巧,掌握简单产品的设计,有很多的提高。适用范围:家庭使用,简单电子产品的开发等。技术要求:实现时间显示,环境温度显示,闹钟,遥控调时等功能二、设计方案论证 采用单片机自身的定时器实现时钟功能,用软件编写出闹钟程序,声音用蜂鸣器发出,显示使用四位一体的共阳数码管,用点的闪烁实现秒的显示,使用PT2262,PT2272无线发射接收模块实现遥控调试和闹钟的关闭等功能。使用无线模块不会受光线的干扰和影响,并且遥控的范围远,灵敏度高。相对于使用红外遥控更简单方便。在使用无线遥控模块的时候,我们利用无线接收端的引脚产生高电平的输出,接到9013三极管的基极,而三极管的集电极接在单片机的引脚上,一旦开启遥控,那么单片机的引脚就回检测到低电平,从而像按键一样实现调时调分和关闭闹钟的功能,这样不但可以用遥控设定时间,还可以用来设定闹钟的时间,使设计方便简洁,使用简单方便。没有使用时间芯片也节约了成本,简约了硬件电路的设计。三、 系统硬件结构设计1、 无线遥控模块发射模块原理图使用中无需调整频点,特别适合多发一收等无线电遥控系统使用,而目前的一些无线电遥控模块一般仍采用LC振荡器,稳定度及一致性较差,即使采用高品质微调电容,当温度变化或者震动后也很难保证已调试好的频点不会发生偏移,造成发射距离缩短。接收模块原理图接收模块从工作方式分,可以分成超外差接收板和超再生接收板。超再生式接收机具有电路简单、性能适中、成本低廉的优点所以在实际应用中广泛采用。2、温度模块 温度模块采用DS18B20温度传感器作为温度的采集模块DS18B20的特性:(1)独特的单线接口,仅需一个端口进行通讯(2)912位的分辨率可调(RS)(3)测温范围为-55C+125C (-67F+257F)(4)测量范围在-10C +85C精度为0.5C (5)可设置报警温度存储于EEPROM,掉电保护数据不丢(6)适用电压35.5VROM: 在DS18B20内部光刻了一个长度为64-bit的ROM,这个是编码器件的身份识别标志,如下图所示: 注释:MSB为最高有效位 LSB为最低有效位64-bit光刻ROM的排列顺序是:开始(最低)8位是产品类型标号,对于DS18B20来说就是(28H);接着的48位是器件自身的序列号;最后8位是前面56位的循环冗余校验码(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:高速暂存存储器由9个字节组成,包含了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间的任何通讯都需要以初始化序列开始,初始化序列就是主机发出一个复位脉冲跟着检测一个DS18B20的存在脉冲,表明DS18B20已经准备好发送和接收数据。初始化序列见下图:主机首先发出一个480960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就一直在检测总线上是否有480960微秒的低电平出现,如果有,在总线转为高电平后等待1560微秒后将总线电平拉低60240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。对DS18B20读和写操作:接下来就是主机发出各种操作命令,但各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。写周期最少为60微秒,最长不超过120微秒。写周期一开始作为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平,1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。写时序图:读时序图:对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成温度的转换:首先主机先作个复位操作,接着主机再写跳过ROM的操作(CCH)命令,然后然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如CCH的二进制为11001100,在写到总线上时要从低位开始写,写的顺序是“00110011”。整个操作的总线状态如下图RAM内部温度数据的读取:同样,这个操作也要接照三个步骤。1、主机发出复位操作并接收DS18B20的应答(存在)脉冲。2、主机发出跳过对ROM操作的命令(CCH)。3、主机发出读取RAM的命令(BEH),随后主机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如下图:3、显示电路和主要电路连线电路PCB遥控模块只要直接插接在电路板上即可。四、源程序 (1)主程序/* 毕业设计 之 时钟温度显示 硬件: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(1)temper=duwendu();temper=(temper*0.0625)*10+0.5;ke();switch(mm)case 1: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=20)bian=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;void timer1() interrupt 3TH1=0x4c;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 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,/*点*/ 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,/*点*/ 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,/*点*/ 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,/*6*/ 0x78,/*7*/ 0x00,/*8*/ 0x10,/*9*/;(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(5);if(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;void key0() /闹钟界面的定时用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;elsebeep=1;void key1() /闹钟停止按键if(s6=0)delay(10);if(s6=0)while(!s6);nn+;switch(nn)case 0:naozhon();break;case 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 dat)ds=0;if(dat=1)ds=1;delay(5);ds=1;uchar duzijie()uchar x,dat=0;for(x=0;x8;x+)if(duwei()dat=dat|0x01x;/先读低位delay(1);return(dat);void xiezijie(uchar date)uchar y,j;for(y=0;yy)&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=duzijie(); /读温度值低八位temph=duzijie(); /读温度值高八位temp=templ+temph*256;/高字节是低字节的256倍return(temp);(5)#include显示部分的头文件/显示程序void display1( 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=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)/温度显示程序 uchar A1,A2,A2t,A3; A1=temper/100; A2t=temper%100; A2=A2t/10; A3=A2t%10;

温馨提示

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

评论

0/150

提交评论