版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、*用单片机代替PT2272解码PT2262的程序*晶振: 12MHz*接收到的信号为发送信号的反码因为每检测到按键有效一次 PT2262 都发送四 次编码我们可以 利用这一特点来解码先检测有没有接收到信息当有的时候我们就去掉第一次编 码的信号检测 5ms 的高电平来检测编码的开始信号接收到 5ms 的高电平后才开始解码我们可以发现 每个码的长度都是 1.2ms左右每一个编码都是由低电平开始然后到高电平又到低电平又回到高电平我们 从第一个高电平的宽度可以把 1 码区分出来剩下的悬空码和 0 码可以从第二个高电平的宽度区 分出来 具体的单片机译码方法如下 由高电平开始检测到下降沿时就延时 300u
2、s 读取接收的状态记为 A0 然后再检 测下一个下降沿 降沿后又延时 300us 读取接收的状态记为 A1 这样就把一个编码给译出来了A0 A1 和悬空 1 码 0 码的关系如下 :A0 A1 代码0 0 1 码0 1 错误1 0 悬空1 1 0 码* i nclude #define uchar unsigned char #define uint unsigned int/ 定义共用体unionuint word;struct / 结构 bytes uchar byte_addr;uchar byte_data; bytes;a_0,a_1;/ 位定义sbit W_REM =P3A3; /
3、遥控接收输入脚 sbit LEDO =P1A0;sbit LED2 =PM2;bit bdata recv_flg, / 接收正确位标志 (1: 正确 O: 错误 )/因为当按住PT2262的按键不放的时候PT2262会把编码不断的送出/ 设置 lianji_flg 位用来检测按键有没有放开过如果没有放开则不再响应 lianji_flg; / 按键没有放开过标志 (1: 连接 O: 点击) uchar TOC o 1-5 h z / addr_aO, /接收的8 位地址编码AO/ addr_a1, /接收的8 位地址编码A1/ data_aO, /接收的4 位数据编码AO/ data_a1,
4、/接收的4 位数据编码A1addr_user_aO, / 设定的 8 位地址密码 AO addr_user_a1; / 设定的 8 位地址密码 A1/ led_out; / 输出控制/ subfuncton/ subfuncton/ subfuncton/ subfuncton/ subfuncton / /void d1ms (uint ljh_in)/*1mS 延时函数 */ uint data ljh_i;/ uchar data ljh_j;/ for(ljh_i=O;ljh_iljh_in;ljh_i+)/ for(ljh_j=O;ljh_j1O8;ljh_j+)/ _nop_();
5、 _nop_();/ _nop_(); _nop_();/ _nop_(); _nop_();/ / /- - void d50us(uchar n) /50uS延时uchar data i,j;for(j=n;j;j-) /1T+2T+(2i+2)T+1T+2T*n+1T+2T+2T=(2i+8)*n+5Tfor(i=21;i;i-) ;/延时 2T+2T*i=(2i+2)T/- PT2272_deco() / 解码uchar i,cnt;if(recv_flg) ;else / 清除上次解码内容cnt =12; / 接收 12 位编码/ 解码/先找出接收码的开头即5ms左右的高电平 / 设
6、置高电平时间为 46ms/检测和等待4ms的高电平 for(i=80;i;i-) /延时 4mSif(!W_REM) i=80;else d50us(1);/等待在2ms内接收到的低电平for(i=40;i;i-) /延时 4mS if(!W_REM) break; else d50us(1);/4ms到6ms内接收到下降沿则跳去解码否则返回 /超出6ms接收错误返回if(i) recv_flg =0; / 清按键没有放开过标志 goto PT2272_deco_exit; / 返回 / 等待 300us 后采集接收信号 d50us(6);/ 采集接收信号并记录 a_0.word=a_1.wo
7、rd=0; for(i=0;i6;i+) if(W_REM) a_0.word |=0 x01;a_0.word =1;/ MOV C,W_REM /读 A0 数据/ MOV A,DATA_A0/ RLC A/ MOV DATA_A0,A / 保存相应位的 A0/ MOV A,ADD_A0/ RLC A/ MOV ADD_A0,A / 高位转移/ 等待第二个下降沿 while(!W_REM) ; while(W_REM) ;/ JNB W_REM,$/ JB W_REM,$/ 等待 300us 后采集接收信号 d50us(6);/ MOV 40H,#150 /2T/ DJNZ 40H,$ /2
8、T延时 :2T+2T*150=302Tif(W_REM) a_1.word |=0 x01;a_1.word =1;/ MOV C,W_REM /读 A1 数据/ MOV A,DATA_A1/ RLC A/ MOV DATA_A1,A / 保存相应位的 A1/ MOV A,ADD_A1/ RLC A/ MOV ADD_A1,A / 高位转移/ 等待第二个码值的下降沿 while(!W_REM) ; /_wd_ while(W_REM) LED2=LED2;/ JNB W_REM,$/ JB W_REM,$/ DJNZ 34H,REMOTE6 / 接收 12 位编码 / 把接收的编码左移 4 位
9、将 8 位密码放在同一字节上a_0.word =4;a_1.word =4;/ MOV 40H,#4 /REMOTE7: / CLR C / MOV A,DATA_A0/ RLC A / 送出低 8 位的 bit7/ MOV DATA_A0,A / 低 8 位的 AO 左移 1 位/ MOV A,ADD_A0/ RLC A / 接收低 8 位的 bit7/ MOV ADD_A0,A / 高 8 位的 A0左移 1 位/ CLR C/ MOV A,DATA_A1/ RLC A / 送出低 8 位的 bit7/ MOV DATA_A1,A / 低 8 位的 A1 左移 1 位/ MOV A,ADD
10、_A1/ RLC A / 接收低 8 位的 bit7/ MOV ADD_A1,A / 高 8 位的 A1 左移 1 位/ DJNZ 40H,REMOTE7 / 左移 4位/ / 把 4 位数据编码由高 4 位移到低 4 位上/ MOV A,DATA_A0/ SWAP A/ MOV DATA_A0,A /把4位数据编码A0由高4位移到低4位/ MOV A,DATA_A1/ SWAP A/ MOV DATA_A1,A / 把 4 位数据编码 A1 由高 4 位移到低 4 位/ 比较密码if(a_0.bytes.byte_addr=addr_user_a0)&(a_1.bytes.byte_addr
11、=addr_us er_a1) recv_flg =1;lianji_flg =1; else recv_flg =0;lianji_flg =0;/ MOV A,ADD_A0/ XRL A,ADD_USER_A0/ JNZ REMOTE8 / 密码不正确则跳转 / MOV A,ADD_A1/ XRL A,ADD_USER_A1/ JNZ REMOTE8 / 密码不正确则跳转 / / 置接收正确位/ SETB RECEIVE/ /置ENABLE用于检测按键有没有放开 / SETB ENABLE/ RET / 接收正确返回 /REMOTE8:/ CLR ENABLE/ CLR RECEIVE/
12、RET / 接收不正确返回 PT2272_deco_exit: return;/- - void remote_2272_deco() / 接收遥控码 ( 解码程序 )uint i;/检测50ms内有没有编码接收for(i=1000;i;i-) if(!W_REM) PT2272_deco(); / 解码break;else d50us(1); /50uS 延时recv_flg =0; / 清按键没有放开过标志/- - void work()/控制输出/把选中的LED取反if(recv_flg) / 接收不正确 , 退出 recv_flg=0; / 清接收正确标志位 a_0.bytes.byt
13、e_data =a_0.bytes.byte_data;P1 =PMa_O.bytes.byte_data;/WORK:/ JNB RECEIVE,WORK_END /接/ 收不正确 , 退出/ / 每次按键都一次响应/ CLR RECEIVE / 清接收正确标志位/ MOV A,DATA_A1/ CPL A/ ORL A,#OFH / 屏蔽低 4 位/ MOV DATA_A1,A/ MOV A,LCD_OUT/ XRL A,DATA_A1/ ORL A,#OFH/ MOV LCD_OUT,A/ MOV P1,LCD_OUT/ NOP/WORK_END:/ RET/ END /- -/ = main function/ = main function/ = main function/ = main function/ = main function/ = main function void main (void)/ 上电初始化+ P1 =0 xff;P3 =0 x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西省商南县2025-2026学年初三实战模拟考试物理试题含解析
- 湖南省永州零冷两区七校联考2026届初三大联考数学试题试卷含解析
- 大同市重点中学2026年下期初三第三次质量考评物理试题-含解析
- 护理不良事件减少患者伤害
- 护理信息学在社区护理中的应用
- 《没头脑和不高兴》整本书教学案例
- 休闲农业经营管理规范岗前培训试题及答案
- 专题九 图像色调的调整(课件)-职教高考电子与信息《图形图像处理》专题复习讲练测
- 2026二年级数学 北师大版儿童乐园除法学习
- 心理健康岗位责任制度
- 新媒体编创-图文 短视频 直播(微课版)PPT完整全套教学课件
- 新里程大学英语听说教程谭思坦课后部分参考答案
- 英语专业四级考试阅读技巧课件
- 1-船舶碰撞应急预案(预案-001)
- 医疗器械相关压力性损伤及预防
- 广联达软件学习报告
- GB/T 5825-1986建筑门窗扇开、关方向和开、关面的标志符号
- GB 28380-2012微型计算机能效限定值及能效等级
- 自我认知与职业生涯规划课件
- 中山市二次供水工程技术规程
- 高中思想政治学习方法指导课件
评论
0/150
提交评论