遥控电子密码锁剖析_第1页
遥控电子密码锁剖析_第2页
遥控电子密码锁剖析_第3页
遥控电子密码锁剖析_第4页
遥控电子密码锁剖析_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、遥控电子密码锁,整体设计思想:,P0.0P0.7,D0D7,8051,液晶1602,RS,P3.5,EN,P3.4,RW,P3.6,红外,INT0/P3.2,SDA,SCL,P2.0,P2.1,AT24C02,I2C 总线协议,I2C 总线协议定义如下 1 .只有在总线空闲时才允许启动数据传送 2 .在数据传送过程中当时钟线为高电平时数据线必须保持稳定状态不允许有跳变时钟线为高电平时数据线的任何电平变化将被看作总线的起始或停止信号 启动、停止I2C总线,void init() /24c02初始化子程序 scl=1; nop(); sda=1; nop(); void start() /启动I2

2、C总线 sda=1; nop(); scl=1; nop(); sda=0; nop(); scl=0; nop(); void stop() /停止I2C总线 sda=0; nop(); scl=1; nop(); sda=1; nop(); ,总线时序,选择读时序,void writebyte(unsigned char j) /写一个字节 unsigned char i,temp; temp=j; for (i=0;i8;i+) temp=temp1; scl=0; nop(); sda=CY;/temp左移时,移出的值放入了CY中 nop(); scl=1;/待sda线上的数据稳定后,

3、将scl拉高 nop(); scl=0; nop(); sda=1; nop(); ,unsigned char readbyte() /读一个字节 unsigned char i,j,k=0; scl=0; nop(); sda=1; /初始化 for (i=0;i8;i+) nop(); scl=1; nop(); if(sda=1) j=1; else j=0; k=(k1)|j; scl=0; nop(); return(k); ,void respons() /I2C总线时钟 unsigned char i=0; scl=1; nop(); while(sda=1) ,/从24c02

4、的地址address中读取一个字节数据/ unsigned char read24c02(unsigned char address) unsigned char i; start(); writebyte(0 xa0); respons(); writebyte(address); respons(); start(); writebyte(0 xa1); /最低位为1,读操作 respons(); i=readbyte(); stop(); delay1(100); return(i); ,/向24c02的address地址中写入一字节数据info/ void write24c02(uns

5、igned char address,unsigned char info) start(); writebyte(0 xa0);/最低为0,写操作 respons(); writebyte(address); respons(); writebyte(info); respons(); stop(); delay1(5000); /这个延时一定要足够长,否则会出错。因为24c02在从sda上取得数据后,还需要一定时间的烧录过程。 ,AT24C02,CAT24WC02是一个2K 位串行CMOS E2PROM。 本实验是利用24c02的第110到115地址单元作为密码存储区,同时掉电可记忆。,液

6、晶模块,初始化过程,/*- 初始化函数 -*/ void LCD_Init(void) LCD_Write_Com(0 x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0 x38); DelayMs(5); LCD_Write_Com(0 x38); DelayMs(5); LCD_Write_Com(0 x38); LCD_Write_Com(0 x08); /*显示关闭*/ LCD_Write_Com(0 x01); /*显示清屏*/ LCD_Write_Com(0 x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Co

7、m(0 x0C); /*显示开及光标设置*/ ,/*- 写入字符函数 -*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) if (y = 0) LCD_Write_Com(0 x80 + x); else LCD_Write_Com(0 xC0 + x); LCD_Write_Data( Data); ,红外遥控模块,数据格式: 引导码是9ms+4.5ms,头码过后可以看到4个8位的数据,我们最终目的就是要把这个 32位(4x8)从一体化红外接收头提取出来,并转换成16进制数,用于区分不同按键按

8、下得出的不同数值。在遥控器发射波形中,可以看出,8位数中的0或者1不是用高低电平表示,而是用不同的低电平的宽度表示,0.565ms表示0,1.69ms表示1,2个位中间还会有一个0.56ms的高电平。,遥控器发射出去的含有载波的红外信号通过一体化红外接收头处理后得到的是含有载波的反向的波形,用中断方式,外部中断0和定时器,外部中断主要用于接收红外波形下降沿触发,定时器用于计时(测量2个下降沿的宽度)。基本原理分析如下,如接收到头码是4.5ms低电平+4.5ms高电平,我们分析 第一个下降沿到第二个下降沿的宽度是 9ms,我们判断这个头码可以给定一个范围,只要数据在这个范围内则认为头码是正确的,

9、检测头码正确后接着检测剩下的32位数值。,void tim0_isr (void) interrupt 1 using 1 irtime+; /用于计数2 个下降沿之间的时间 void EX0_ISR (void) interrupt 0 /外部中断0 服务函数 static unsigned char i; /接收红外信号处理 static bit startflag; /是否开始处理标志位 if(startflag) if(irtime=33)/引导码TC9012 的头码,9ms+4.5ms i=0; irdatai=irtime;/存储每个电平的持续时间,用于判断是0 还是1 irtim

10、e=0; i+; if(i=33) irok=1; i=0; else irtime=0; startflag=1; ,红外遥控器按键编码,switch(IRcord2)/判断第三个数码值 case 0 x16:key=0;wei+;break;/0 显示相应的按键 case 0 x0c:key=1;wei+;break;/1 case 0 x18:key=2;wei+;break;/2 case 0 x5e:key=3;wei+;break;/3 case 0 x08:key=4;wei+;break;/4 case 0 x1c:key=5;wei+;break;/5 case 0 x5a:key=6;wei+;break;/6 case 0 x42:key=7;wei+;break;/7 case 0 x52:key=8;wei+;break;/8 case 0 x4a:key=9;wei+;break;/9 case 0 x19

温馨提示

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

评论

0/150

提交评论