一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 6214|回复: 6

[其他综合] 学习型遥控开关(2011-03-26)

[复制链接]
发表于 2011-3-26 20:02 | 显示全部楼层 |阅读模式
;可以用C51或2051单片机
;用12兆的晶振
;P1.7遥控输出控制继电器
;P1.6接LED发光管(学习指示)
;p3.5 SDA(24C02 5脚)
;p3.4 SCL(24C02 6脚)
;单片机接上电源 复位 晶振 24C02  即可
;开机后按遥控5秒以上 ,P1.6接LED发光管亮,进入学习状态,
;再按任意要学习的按键,P1.6接LED发光管灭,学习就成功了,就可以控制P1.7的输出
  IRCOM  EQU 20H
  IRIN  EQU P3.2
  BEEP  EQU P3.7
  RELAY  EQU P1.0
  SDA  BIT P2.0;p3.5
  SCL  BIT P2.1;p3.4
  JSTEM  EQU 33H
  I2CADD  EQU 34H
;------------------------------------------------
  ORG  0000H
  JMP  MAIN
  ORG  0003H
  JMP  IR_IN
;------------------------------------------------
MAIN:
  MOV  SP,#60H
  MOV  A,#00H
  MOV  R0,#20H
LOOP0:
  MOV  @R0,A ;
  INC  R0
  CJNE  R0,#28H,LOOP0
  MOV  IE,#81H
  MOV  TCON,#01H
  SETB  IRIN ;P3.2
  SETB  BEEP ;P3.7
  SETB  RELAY ;P1.0
  MOV  29H,#27H
  MOV  A,29H
Q1:
  CJNE  A,#28H,Q1
  MOV  31H,#28H
  CLR  P1.0
  JMP  Q1
;=============== 中断服务程序 ====================  
IR_IN:
  CLR  EA
  PUSH  ACC
  PUSH  PSW
  SETB  PSW.3  ;选择工作寄存器器组
  CLR  PSW.4  ;选择工作寄存器器组
  MOV  R2,#04H
  MOV  R0,#IRCOM ;20H单元地址送R0
I1:
  JNB  IRIN,I2  ;如果P3.2为低电平转I2
  DJNZ  R2,I1  ;
  JMP  IR_OUT
I2:
  MOV  R4,#20  ;
I20:
  CALL  DELAY140US ;调用延时140微秒子程序
  DJNZ  R4,I20  ;延时140微秒 * 20 * 2 = 5600微秒
  JB   IRIN,I1  ;如果P3.2为高电平转I1
I21:
  JB   IRIN,I3  ;如果P3.2为高电平转I3
  CALL  DELAY140US
  JMP  I21
I3:
  MOV  R3,#0
LL:
  JNB  IRIN,I4  ;如果P3.2为低电平转I2
  CALL  DELAY140US ;调用延时140微秒子程序
  JMP  LL
I4:
  JB   IRIN,I5  ;如果P3.2为高电平转I5
  CALL  DELAY140US ;调用延时140微秒子程序
  JMP  I4
I5:
  MOV  R2,#0
L1:
  CALL  DELAY140US ;调用延时140微秒子程序
  JB   IRIN, N1 ;如果P3.2为高电平转N1
  MOV  A,#8  ;每个单元共有八位
  CLR  C
  SUBB  A,R2
  MOV  A,@R0  ;将20H单元的内容送A / IRCOM = 20H单元
  RRC  A   ;右移
  MOV  @R0,A  ;右移后存回R0所指的单元空间
  INC  R3
  CJNE  R3,#8,LL ;八位都接收完了吗?未完继续
  MOV  R3,#0
  INC  R0   ;指向下一个单元
  CJNE  R0,#24H,LL ;20H~24H共四个存储单元都存完了吗?未完继续
  MOV  A,31H  ;
  CJNE  A,#28H,S1 ;
  MOV  A,23H  ;将23H单元的值送A,即遥控器的键值反码送A
  MOV  JSTEM ,A ;将23H单元的值暂存JSTEM=33H,即遥控器的键暂存JSTEM=33H
  MOV  A,20H  ;将20H单元的值送A,即遥控器的用户码高八位
  MOV  I2CADD,A ;将20H单元的值送I2CADD=34H,即遥控器的用户码高八位
  LCALL  I2CWRI  ;调用写24C02子程序
  MOV  31H,#02H ;
  SETB  P1.6
  SETB  P1.0
S1:
  MOV  24H,#80 ;改变其值大小可改变长按进入学习状态的等待时间
  JMP  IR_COMP
N1:
  INC  R2
  CJNE  R2,#30,L1
IR_OUT:
  POP  PSW
  POP  ACC
  DJNZ  24H,Q6
  CLR  P1.6
  MOV  A,#28H
  JMP  Q8
Q6:
  MOV  A,#27H
Q8:
  SETB  EA
  RETI
;--------------------------------------------------  
IR_COMP:
  MOV  A,20H ;将20H单元的值送A,即遥控器的用户码高八位
  MOV  I2CADD,A;将20H单元的值送I2CADD=34H,即遥控器的用户码高八位
  LCALL  I2CREAD ;读I2C的20H单元内容
  MOV  A,23H ;与单片机的23H单元内容作比较
  CJNE  A,JSTEM,S3
  CPL  P1.7 ;如果相同取反P1.7口
S3:
  JMP  IR_OUT
;=================================================  
I2CWRI:
  SETB  SDA
  SETB  SCL ;
  ACALL  R2STAR ;
  MOV  R7,#10100000B ;
  ACALL  R2SEND
  MOV  ACC,I2CADD
  MOV  R7,ACC ;
  ACALL  R2SEND
  MOV  R0,I2CADD
  MOV  ACC,JSTEM ;
  MOV  R7,ACC ;
  ACALL  R2SEND ;
  ACALL  R2STOP ;
  ACALL  DELAY5124US ;延时5124微秒
  RET
;----------------------------------------------  
R2SEND:
  PUSH  ACC ;
  MOV  ACC,R7 ;
  MOV  R6,#08H ;
R2SLOP1:
  RLC  A ;
  MOV  SDA,C ;
  ACALL  DELAY23US ;延时23微秒
  SETB  SCL ;
  ACALL  DELAY23US ;延时23微秒
  CLR  SCL
  DJNZ  R6,R2SLOP1 ;
  SETB  SDA
  ACALL  DELAY23US ;延时23微秒
  SETB  SCL
  ACALL  DELAY23US ;延时23微秒
R2SLOP2:
  MOV  C,SDA
  JC   R2SLOP2
  CLR  SCL ;
  CLR  SDA
  POP  ACC ;
  ACALL  DELAY203US ;延时203微秒
  RET
I2CREAD:
  ACALL  R2STAR ;
  MOV  R7,#10100000B
  ACALL  R2SEND ;
  MOV  A,I2CADD ;
  MOV  R7,A ;
  ACALL  R2SEND ;
  SETB  SDA
  SETB  SCL
  ACALL  R2STAR
  MOV  R7,#10100001B
  ACALL  R2SEND
  ACALL  R2READ
  ACALL  R2STOP
  MOV  JSTEM,R7
  RET
R2STAR:
  ACALL  DELAY23US ;延时23微秒
  CLR  SDA
  ACALL  DELAY23US ;延时23微秒
  CLR  SCL
  ACALL  DELAY23US ;延时23微秒
  RET
R2READ:
  PUSH  ACC
  MOV  R6,#08H
R2RLOP1:
  SETB  SDA
  ACALL  DELAY23US ;延时23微秒
  SETB  SCL
  ACALL  DELAY23US ;延时23微秒
  MOV  C,SDA
  RLC  A
  ACALL  DELAY23US ;延时23微秒
  CLR  SCL
  DJNZ  R6,R2RLOP1
  ACALL  DELAY23US ;延时23微秒
  CLR  SDA
  MOV  R7,ACC
  POP  ACC
  RET
R2STOP:
  ACALL  DELAY23US ;延时23微秒
  SETB  SCL
  ACALL  DELAY23US ;延时23微秒
  SETB  SDA
  ACALL  DELAY23US ;延时23微秒
  RET
;**************** 延时140微秒 **********************
DELAY140US:
  MOV  R5,#1  ; 1   =1
DEL0:  
  MOV  R6,#2  ; 1*1   =1
DEL1:
  MOV  R7,#32  ; 1*2*1  =2
DEL2:
  DJNZ  R7,DEL2  ; 2*32*2*1 =128
  DJNZ  R6,DEL1  ; 2*2*1*1  =4
  DJNZ  R5,DEL0  ; 2*1   =2
  RET     ; 2   =2
;================ 延时23微秒 =======================
DELAY23US:
  MOV  R3,#10  ; 1   =1
  DJNZ  R3, $  ; 2*10  =20
  RET     ; 2   =2
;**************** 延时5124微秒 *******************
DELAY5124US:
  MOV  R2,#10  ; 1   =1
D10:
  MOV  R3,#0FFH ; 1   =1
  DJNZ  R3,$  ; 2*255*10 =5100
  DJNZ  R2,D10  ; 2*10  =20
  RET     ; 2   =2
;**************** 延时203微秒 ***********************
DELAY203US:
  MOV  R3,#100  ; 1   =1
  DJNZ  R3,$  ; 2*100  =200
  RET     ; 2   =2
  END
发表于 2011-3-27 09:07 | 显示全部楼层
写一个嘛!4路的.1路太少了。
回复

使用道具 举报

发表于 2011-3-27 13:06 | 显示全部楼层
红外解码?
回复

使用道具 举报

发表于 2012-2-25 22:44 | 显示全部楼层
学习型遥控开关
回复

使用道具 举报

发表于 2012-2-25 23:52 | 显示全部楼层
是315MHZ无线的,还是红外的?
回复

使用道具 举报

发表于 2012-2-26 00:35 | 显示全部楼层
是315MHZ无线的,还是红外的?
qiantu 发表于 2012-2-25 23:52 https://www.yleee.com.cn/images/common/back.gif



    看到有ir_in  ir_out字样,应该是红外的。
回复

使用道具 举报

发表于 2012-4-11 20:43 | 显示全部楼层
1路确实太少,等续集...................
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-4 19:59 , Processed in 0.035669 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表