用单片机89C51代替PT2272解码PT2262的程序C51程序Word文件下载.docx
- 文档编号:18856593
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:7
- 大小:17.06KB
用单片机89C51代替PT2272解码PT2262的程序C51程序Word文件下载.docx
《用单片机89C51代替PT2272解码PT2262的程序C51程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《用单片机89C51代替PT2272解码PT2262的程序C51程序Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。
0
1
码
错误
悬空
******************************************************************************/
#i
nclude
<
STC516AD.H>
#define
uchar
unsigned
char
uint
int
//定义共用体
union
{
word;
struct
{
//结构bytes
byte_addr;
byte_data;
}bytes;
}a_0,a_1;
//位定义
sbit
W_REM
=P3^3;
//遥控接收输入脚
LED0
=P1^0;
LED2
=P1^2;
bit
bdata
recv_flg,
//接收正确位标志(1:
正确
0:
错误)
//因为当按住PT2262的按键不放的时候PT2262会把编码不断的送出
//设置lianji_flg位用来检测按键有没有放开过如果没有放开则不再响应
lianji_flg;
//按键没有放开过标志(1:
连接
点击)
uchar
//
addr_a0,
//接收的8位地址编码A0
addr_a1,
//接收的8位地址编码A1
data_a0,
//接收的4位数据编码A0
data_a1,
//接收的4位数据编码A1
addr_user_a0,
//设定的8位地址密码A0
addr_user_a1;
//设定的8位地址密码A1
led_out;
//输出控制
//-------------------------------------
sub
functon
----------------------------------------------
//>
>
//void
d1ms
(uint
ljh_in)
/*1mS延时函数*/
//{
data
ljh_i;
ljh_j;
for(ljh_i=0;
ljh_i<
ljh_in;
ljh_i++){
for(ljh_j=0;
ljh_j<
108;
ljh_j++){
_nop_();
}
//}
//<
-<
void
d50us(uchar
n)
//50uS延时
i,j;
for(j=n;
j;
j--)
//[1T+2T+(2i+2)T+1T+2T]*n+1T+2T+2T=(2i+8)*n+5T
for(i=21;
i;
i--)
;
//延时2T+2T*i=(2i+2)T
PT2272_deco()
//解码
i,cnt;
if(recv_flg)
else
//清除上次解码内容
cnt
=12;
//接收12位编码
//解码
------------------------------------------------------------------------
//先找出接收码的开头即5ms左右的高电平
----------------------------------
//设置高电平时间为4~6ms
//检测和等待4ms的高电平
for(i=80;
//延时4mS
if(!
W_REM)
i=80;
d50us
(1);
//等待在2ms内接收到的低电平
--------------------------------------------
for(i=40;
break;
//4ms到6ms内接收到下降沿则跳去解码否则返回
//超出6ms接收错误返回
if(i)
recv_flg
=0;
//清按键没有放开过标志
goto
PT2272_deco_exit;
//返回
--------------------------------
//等待300us后采集接收信号
d50us(6);
//采集接收信号并记录
a_0.word=a_1.word=0;
for(i=0;
i<
6;
i++)
if(W_REM)
a_0.word
|=0x01;
=1;
MOV
C,W_REM
//读A0数据
A,DATA_A0
RLC
A
DATA_A0,A
//保存相应位的A0
A,ADD_A0
ADD_A0,A
//高位转移
//等待第二个下降沿
while(!
while(W_REM)
JNB
W_REM,$
JB
40H,#150
//2T
DJNZ
40H,$
//2T
延时:
2T+2T*150=302T
a_1.word
//读A1数据
A,DATA_A1
DATA_A1,A
//保存相应位的A1
A,ADD_A1
ADD_A1,A
//等待第二个码值的下降沿
//___wd___
LED2=~LED2;
34H,REMOTE6
//接收12
位编码
//把接收的编码左移4位将8位密码放在同一字节上----------------------------
=4;
40H,#4
//REMOTE7:
CLR
C
A
//送出低8位的bit7
//低8位的A0左移1位
//接收低8位的bit7
//高8位的A0左移1位
//低8位的A1左移1位
//高8位的A1左移1位
40H,REMOTE7
//左移4位
//把4位数据编码由高4位移到低4位上
---------------------------------
SWAP
//把4位数据编码A0由高4位移到低4位?
//把4位数据编码A1由高4位移到低4位?
//比较密码
--------------------------------------------------------------
if((a_0.bytes.byte_addr==addr_user_a0)&
&
(a_1.bytes.byte_addr==addr_user_a1))
lianji_flg
}
XRL
A,ADD_USER_A0
JNZ
REMOTE8
//密码不正确则跳转
//
A,ADD_USER_A1
//置接收正确位
---------------------------------------------------------
SETB
RECEIVE
//置ENABLE
用于检测按键有没有放开
ENABLE
RET
//接收正确返回
-----------------------------------------
//REMOTE8:
//接收不正确返回
---------------------------------------
PT2272_deco_exit:
return;
remote_2272_deco()
//接收遥控码(解码程序)
//检测50ms内有没有编码接收
for(i=1000;
PT2272_deco();
work()
//控制输出
//把选中的LED取反
//接收不正确,退出
recv_flg=0;
//清接收正确标志位
a_0.bytes.byte_data
=~a_0.bytes.byte_data;
P1
=P1^a_0.bytes.byte_data;
//WORK:
RECEIVE,WORK_END
//每次按键都一次响应
RECEIVE
CPL
ORL
A,#0FH
//屏蔽低4位
DATA_A1,A
A,LCD_OUT
A,#0FH
LCD_OUT,A
P1,LCD_OUT
NOP
//WORK_END:
RET
END
====================================
main
function
============================================
(void)
//上电初始化
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
=0xff;
P3
for(addr_user_a1=100;
addr_user_a1--)
d50us(200);
//编码设定为:
A0~A7地址编码为:
悬空
+++++++++++++++++++++++++++++++++++++++++++++
addr_user_a0
addr_user_a1
=0x00;
//start:
//================================================================================
while
(1)
remote_2272_deco();
//接收遥控码
work();
//控制输出
=!
LED0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 89 C51 代替 PT2272 解码 PT2262 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)