按键红外远程控制继电器Word文件下载.docx
- 文档编号:16801899
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:8
- 大小:16.28KB
按键红外远程控制继电器Word文件下载.docx
《按键红外远程控制继电器Word文件下载.docx》由会员分享,可在线阅读,更多相关《按键红外远程控制继电器Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
sbitKA2=P2^5;
sbitKA3=P2^6;
sbitKA4=P2^7;
//延时ms
voiddelayms(uintx)
{
uchara;
while(x--)
for(a=123;
a>
0;
a--);
}
/****************************1ms延时子程序************************/
voidDelay1ms()
{uchari,j;
for(i=2;
i>
i--)
for(j=230;
j>
j--);
}
/****************************0.9ms延时子程序************************/
voidDelay0_9ms()
ucharj,k;
for(j=18;
j--)
for(k=20;
k>
k--);
}
/**************************2.5ms延时子程序**********************/
voidDelay2_5ms()
uchari,j;
for(i=10;
i--)
for(j=118;
ucharKey_Scan()//独立键盘检测
//读数准备
SB1=SB2=SB3=1;
if(SB1==0||SB2==0||SB3==0)//可能有其它一个按下
delayms(10);
//去抖
if(SB1==0)//SB1按下
{while(!
SB1);
return1;
}
elseif(SB2==0)//SB2按下
{while(!
SB2);
return2;
elseif(SB3==0)//SB3按下
{while(!
SB3);
return3;
else
return0;
else
return0;
//运行文件
#include"
mytool.h"
chardataIRcode[4];
//定义一个4字节的数组用来存储代码
ucharCodeTemp;
//编码字节缓存变量
uchari,j,k;
//延时用的循环变量,读取位和字节
bitMotor_FWD;
//电机正转
bitMotor_REV;
//电机反转
bitMotor_STOP;
//电机停止
bitMotor_FWD_SB;
//电机正转,按钮专用
bitMotor_REV_SB;
//电机反转,按钮专用
bitMotor_STOP_SB;
//电机停止,按钮专用
bitFinsh_re;
//中断收完四字节数据
intmain(void)
{
uchari,j;
//一般变量
uchartemp;
//键盘暂存
ucharSB_data[4];
//红外按键录处数据
bittest_ok;
bitIf_Wify;
bitreline_if;
//是否用红外功能
P2=0x00;
P1=0x00;
/***************中断相关*******************/
EA=1;
//开中断
ET1=1;
IT0=1;
//INT0为负边沿触发,(1:
负边沿触发,0:
低电平触发)
EX0=1;
//外部中断INT0开,(1:
开,0:
关)
CodeTemp=0;
//初始化红外编码字节缓存变量
Motor_FWD=Motor_REV=Motor_STOP=0;
//输出继电器初始化动作变量
Wify_A1=Wify_A2=Wify_Contral=0;
If_Wify=0;
//是否远程控制
Led=0;
//指示灯不亮
reline_if=0;
//初始化关闭红外
test_ok=0;
j=0;
SB_data[0]=SB_data[1]=SB_data[2]=SB_data[3]=0;
Finsh_re=0;
for(i=12;
i--){Led=~Led;
delayms(300);
}//灯闪表示作准备
//准备就绪,灯长亮
for(i=0;
i<
4;
i++)IRcode[i]=0x00;
while
(1)
temp=Key_Scan();
//键盘检
//红外检测
if(Finsh_re==1&
&
j<
4)
if(IRcode[2]!
=0)
{
if(j==0)
{
SB_data[j]=IRcode[2];
IRcode[2]=0x00;
j++;
Finsh_re=0;
for(i=4;
}
if(j>
=1&
IRcode[2]!
=0x00)
if(IRcode[2]!
=SB_data[j-1])//不同按键
for(i=4;
}
}
}
if(IRcode[2]==SB_data[3])reline_if=!
reline_if;
//红外之间转换
=4&
reline_if==1)//已经录入红外
if(IRcode[2]==SB_data[0]){Motor_FWD=0;
Motor_REV=0;
Motor_STOP=1;
if(IRcode[2]==SB_data[1]){Motor_FWD=1;
Motor_STOP=0;
if(IRcode[2]==SB_data[2]){Motor_FWD=0;
Motor_REV=1;
/*****键盘输入*****/
if(temp==1){Motor_FWD_SB=0;
Motor_REV_SB=0;
Motor_STOP_SB=1;
if(temp==2){Motor_FWD_SB=1;
Motor_STOP_SB=0;
if(temp==3){Motor_FWD_SB=0;
Motor_REV_SB=1;
/*****WIFY输入*****/
if(Wify_Contral)
Led=1;
if(Wify_A1==0&
Wify_A2==0){Motor_FWD=0;
Motor_REV=0;
if(Wify_A1==1&
Wify_A2==0){Motor_FWD=1;
Wify_A2==1){Motor_FWD=0;
Motor_REV=1;
/*****输出*****/
if(Motor_FWD||Motor_FWD_SB){KA1=1;
KA2=0;
if(Motor_REV||Motor_REV_SB){KA1=0;
KA2=1;
if(Motor_STOP||Motor_STOP_SB){KA1=0;
/************************中断0解码服务子程序**********************/
voidint0(void)interrupt0using2
EA=0;
for(k=0;
k<
10;
k++)
Delay0_9ms();
if(R_Red==1)//如果0.9ms后R_Red=1,说明不是引导码
{
k=10;
break;
elseif(k==9)//如果持续了10×
0.9ms=9ms的低电平,说明是引导码
while(R_Red==0);
Delay2_5ms();
if(R_Red==0)//连发码
break;
//边发跳出
else
Delay2_5ms();
//跳过持续4.5ms的高电平
i++)//分别读取4个字节
for(j=1;
j<
=8;
j++)//每个字节8个bit的判断
while(R_Red==0);
//等待上升沿
//从上升沿那一时刻开始延时0.9ms,再判断R_Red
if(R_Red==1)//如果R_Red是"
1"
则向右移入一位"
Delay1ms();
CodeTemp=CodeTemp|0x80;
if(j<
8)
CodeTemp=CodeTemp>
>
1;
8)CodeTemp=CodeTemp>
//如果R_Red是"
0"
则向右移一位,自动补"
IRcode[i]=CodeTemp;
CodeTemp=0;
Finsh_re=1;
k=0;
EA=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 按键 红外 远程 控制 继电器
![提示](https://static.bdocx.com/images/bang_tan.gif)