查看:
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(); } } |
|