查看: 2210  |  回复: 1
IR 非接触式开关

主题

回复
发表于2021-09-12 16:24:23 | 显示全部楼层
1# 电梯直达

设计缘由:现在的办公公共区域集中照明需要实现节能照明场景照明,需要投入较大的设备安装成本(工人工资,电线电缆,开关面板,管线等,高昂复杂的集中控制器),如果有一个经济型遥控开关实现非接触式控制,一方面减小了安装成本,另一方面可以多元化实现调控,更加便捷。

主要对象: 大型公共照明场景需求。工厂集成吊灯照明场景需求,高压离网并网开关模块。

硬件需求:国产MCU  JFZM8P150TSL (1K*14BIT OTP型) 松乐小型继电器  薄膜遥控器组件  

软件支持:C 

 

 

 

 


//软件说明

// 采用JFZM8P150TSL 8BIT系列芯片的红外开关开源接收控制程序

// 设计:何工

// 公司:上海钜富照明有限公司

// 日期:2021 08 26

// 版权:软件著作版权归属于上海钜富照明有限公司 转载请备注来源

// 编码格式:NEC6121

// 码值: 45 46 47

//        44 40 43

//           15

//        16    0D

//           18

//        08    5A

//        42    4A


//  1e 1c 02 0a

#include "interrupt_vector.h"

#include "JFZM8P150TSL.h"

#define DISI()_asm{disi}

#define WDTC()_asm{wdtc}

#define NOP()_asm{nop}

#define ENI()_asm{eni}

#define SLEP()_asm{slep}


#define IR_RE   P62




#define OUT2  P64

#define OUT1  P60

#define OUT3  P61

#define OUT4  P65


#define uchar  unsigned char

#define uint   unsigned int

uchar  TEMPDATA;

bit IR_OK;

bit ON_OFF;


uchar date[]={0x00,0x00,0x00,0x00};

void delay026ms(void);

void delay009ms(void);

void delay(unsigned int i);

void delay(unsigned int i)

{

while(--i)

{

if(!IR_RE)break;

}

}


void intial(void)

{

  PORT6=0x00;


  P6CR&=0x04;


ON_OFF=1;

_asm


{

mov a,@0x0F

contw

}


}

void IR_decode(void);

void IR_decode(void)

{


static uchar i,j,k;

if(!IR_RE)

{

WDTC();

for(k=0;k<9;k++)

{

delay009ms();

if(IR_RE)

{

k=10;

break;

}

else if(k==8)

{

while(!IR_RE);

delay026ms();

if(IR_RE)

{

while(IR_RE);


for(i=0;i<4;i++)

{

for(j=0;j<8;j++)

{

while(!IR_RE);

delay009ms();

if(!IR_RE)

{

date[i]>>=1;

date[i]=date[i]&0x7f;

}

else if(IR_RE)

{

date[i]>>=1;

date[i]=date[i]|0x80;

while(IR_RE);

}


}


k=9;IR_OK=1;

}



}

}

}

}

if(date[2]+date[3]==0xff)

TEMPDATA=date[2];


if(date[2]==0x45) //ALL CLOSE

{

OUT1=OUT2=OUT3=OUT4=0;

}

if(date[2]==0x46)

{

OUT2=!OUT2;

}

if(date[2]==0x44)

{

OUT1=!OUT1;


}

if(date[2]==0x0a)

{

OUT3=!OUT3;


}

if(date[2]==0x0d)

{

OUT4=!OUT4;


}


date[2]=0X00; //必须清除,不然容易频繁启动if内循环



}



void delay026ms(void)

{

uchar k,s;

for(k=0;k<2;k++)

for(s=0;s<220;s++);

}

void delay009ms(void) //900us

{

uchar m;

for(m=0;m<145;m++);

}


void main (void)

{



intial();

IR_OK=0;

PORT5=0X00;

PORT6=0X00;


while(1)

{

IR_decode();



}

}




主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部