矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 12081|回复: 13

简单的学习型红外遥控电源插座

[复制链接]
     
发表于 2010-3-13 17:25:57 | 显示全部楼层 |阅读模式
  学习范围比较窄,只限于HT6221类型摇控器,由于对其他红外编码不熟悉,也不知如何去解了。具体功能:
  一、按下学习键3秒左右时间,学习灯亮,把摇控器对准红外头,按下后要学习的键。待学习指示灯熄灭后,学习完成。
  二、该插座能够通过交流互感器来检测外接设备是否在工作。在外接设备工作时,通过调整电位器,使三极管刚好导通,单片机能够知道外接设备是不是在工作了。
  三、能够摇控开机,也可以摇控关机。设备断电后,插座自行断开设备外接电源,之后延时15秒后。在15秒内不能再次摇控或手动打开设备外接电源。(这防止宝宝反复按电视电源开关非常有效。自家电视曾经有被宝宝反复按电源开关烧坏电路,又花一百元修好的血的教训。自从使用了这类开关后,宝宝再也不去按电视开关了,就是按了也没有反应。呵呵)
  四、如果摇控器一时没有找到,那就按下手动键,手动打开电源。
  五、单片机只能用STC等系列的,它内部有可擦写存储器,这个非常好用,也很简单,几条指令就搞定了。这时用的是STC12C2052。如果要用STC89系列的,要对程序需要延时的部分进行一下调整。
程序写的不好或不对之处请高手多多批评指正。
   电路和程序.rar (6.3 KB, 下载次数: 2003) 原理图及程序见附件。

评分

2

查看全部评分

     
发表于 2010-3-13 18:05:02 | 显示全部楼层
很好。我也正有此意,想做一两个遥控关机的插座。
为了更方便大家查看,把附件中的程序和图转贴出来,楼主不会介意吧。
  1. ;------EEPROM单元定义---------
  2. dat     equ    0e2h
  3. drh     equ    0e3h
  4. drl     equ    0e4h
  5. cmd     equ    0e5h
  6. trig    equ    0e6h
  7. contr   equ    0e7h

  8. ;-------外部信号、按键定义-----
  9. power   bit    p3.5            ;交流信号------应用时要根据实际电路作相应改动!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  10. jdq     bit    p3.7            ;电源继电器------应用时要根据实际电路作相应改动!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  11. d_key   bit    p3.3            ;手动键------应用时要根据实际电路作相应改动!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  12. s_key   bit    p3.4            ;学习键------应用时要根据实际电路作相应改动!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


  13. ;-------程序内部定义-----------
  14. logo    bit    20h.0           ;1为解码完成、0为解码未完成
  15. kgj     bit    21h.0           ;开关机程序标志。0为等待开机,1为等待关机
  16. sled    bit    p1.5            ;学习指示灯------应用时要根据实际电路作相应改动!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  17. pled    bit    p1.7            ;工作指示灯------应用时要根据实际电路作相应改动!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  18. dbm     equ    42h             ;对比码
  19. jsm     equ    52h             ;接收码         

  20.                              
  21.         org    00h
  22.             ajmp   main
  23.             org    03h
  24.             ajmp   int
  25.             org    30h

  26. main:   mov    p1,#0ffh        
  27.         mov    p3,#0ffh
  28.                 clr    logo            ;红外信号标示位清0
  29.                 clr    kgj

  30.             lcall  read                ;把对比值读出
  31.             lcall  off_ee              ;关闭EEPROM
  32.                
  33.                 clr    it0             ;下降治触发
  34.                 clr    ex0             ;开外部中断
  35.                 clr    ea                             ;开总中断

  36. ;********** 主程序 **************
  37. start: lcall  kj                          ;调用开机程序
  38.        lcall  gj              ;调用关机程序
  39.        lcall  study           ;调用学习程序
  40.        ajmp   start

  41. ;=======  0、开机功能部分   =======
  42. ;寄存器组为0组。rs1=0   rs0=0
  43. kj:    clr    rs1
  44.        clr    rs0

  45.        jb     kgj,kj_out      ;开关机标志,0为等待开机,否则退出

  46.        setb   ex0                          ;先开中断
  47.            setb   ea

  48. kj_0:  jb     logo,hw         ;红外解码标志是否为1,为1表示未解码完成或未收到红外信号
  49.        jnb    d_key,dk                  ;手动键是否按下
  50.            ajmp   kj_out

  51. dk:    lcall  del_k           ;手动键按下,消抖延时
  52.        jb     d_key,kj_0
  53.            jnb    d_key,$         ;手动键按下未松开
  54.            ajmp   p_on
  55.       
  56. hw:           clr    ex0
  57.            clr    ea
  58.    
  59.            mov    a,dbm           ;与存储的数值进行对比
  60.            cjne   a,jsm,kj_out    ;不同则退出
  61.            clr    logo            ;解码标志位清0

  62. p_on:  clr    pled            ;开电源指示灯
  63.            clr    jdq                          ;打继电器

  64.            setb   kgj             ;开关机标志为1,说明开机程序执行完成
  65.           
  66. kj_out:ret


  67. ;=======  1、关机功能部分   =======
  68. ;寄存器组为0组。rs1=0   rs0=0
  69. gj:    clr    rs1
  70.        clr    rs0

  71.            jnb    kgj,gj_out       ;开关机标志,1为等待关机,否则退出

  72.        mov    r4,#15;         
  73. gj_0:  jnb    power,gj_1       ;每秒检测1次,若在15秒内,外部电源未开,则闭电源和指示灯。
  74.        lcall  del_1s      
  75.            djnz   r4,gj_0

  76.            setb   jdq                       ;超过15秒,关闭电源和指示灯
  77.            setb   pled
  78.            clr    kgj              ;开关机标志清0,选择等待开机         
  79.            ajmp   gj_out
  80.       
  81. gj_1:  lcall   del_1s          ;延时1秒

  82.            setb    ex0             ;打开各级中断
  83.            setb    ea

  84. gj_2:  jb      logo,pd_off
  85.        jb      power,off
  86.            ajmp    gj_2

  87. pd_off:clr     ea              ;关各级中断后对比接收数据
  88.        clr     ex0

  89.        mov     a,dbm
  90.        cjne    a,jsm,gj_out
  91.            clr     logo            ;解码之后,要将标志位清0

  92. off:   setb    jdq
  93.        setb    pled
  94.           
  95.            clr     ex0             ;关闭各级中断
  96.            clr     ea

  97. jm:    mov     r4,#15          ;静默15秒,不接收任何信号。
  98. jm_0:  lcall   del_1s
  99.        djnz    r4,jm_0     
  100.            clr     kgj

  101. gj_out:ret

  102. ;-------开关机电源延时--------------------
  103. del_1s: mov     r7,#100        ;延时子程序,1秒       
  104. d_1s1:  mov     r6,#100
  105. d_1s2:  mov     r5,#100
  106. d_1s3:  djnz    r5,$
  107.         djnz    r6,d_1s2
  108.                 djnz    r7,d_1s1
  109.                 ret

  110. ;-------键延时----------------------
  111. del_k:  mov     r7,#200
  112. kk1:    mov     r6,#200
  113. kk2:    djnz    r6,$
  114.         djnz    r7,kk1
  115.                 ret
  116.       
  117.                   
  118. ;=======  1、学习功能部分   =======
  119. ;寄存器组为1组。rs1=0   rs0=1
  120. study:  setb     rs1
  121.         clr      rs0

  122. st_1:   mov      r7,#100       ;若在3秒中内松开,则退出
  123. st_2:   mov      r6,#100
  124. st_3:   mov      r5,#100
  125. st_4:   jb       s_key,st_out
  126.                 djnz     r5,st_4
  127.                 djnz     r6,st_3
  128.                 djnz     r7,st_2   
  129.                
  130. st_5:   clr      sled          ;开学习指示灯
  131.                 jnb      s_key,st_5    ;按键不松开,不向下执行

  132. st_7:   mov      r7,#250       ;若在5秒中内未收到红外信号,则退出
  133. st_8:   mov      r6,#100
  134. st_9:   mov      r5,#100
  135. st_10:  jb       logo,st_11
  136.                 djnz     r5,st_10
  137.                 djnz     r6,st_9
  138.                 djnz     r7,st_8
  139.                 setb     sled           ;关闭学习指示灯     
  140.                 ajmp     st_out

  141. st_11:  clr      logo          ;红外信号接收标志位清0
  142.         clr      ex0           ;写入EEPROM前要关闭各中断
  143.         clr      ea

  144.                 mov      dat,jsm       ;将接收码送入EEPROM准备单元
  145.                 lcall    write                   ;写入
  146.                 lcall    off_ee                   ;完成后,关闭

  147.                 setb     sled                   ;关闭学习指示灯
  148.                 mov      dbm,jsm       ;学习完成后,要及时更新jsm单元数据,很重要

  149.                 setb     ex0
  150.                 setb     ea

  151. st_out: ret


  152. ;=======  2、红外解码子程序 =======
  153. ;寄存器组为2组。rs1=1   rs0=0                                                 
  154. int:    push    acc
  155.         push    psw

  156.                 setb    rs1
  157.                 clr     rs0

  158.                 clr     ex0

  159.         mov     r2,#04h
  160.         mov     r0,#50h
  161. i1:     jnb     p3.2,i2        ;等待 ir 信号出现
  162.         djnz    r2,i1
  163.         jmp     i_out          ;ir信号没出现,退出。

  164. i2:          mov     r4,#20
  165. i20:    call    del
  166.         djnz    r4,i20
  167.         jb      p3.2,i1        ;确认ir信号出现
  168. i21:    jb      p3.2,i3        ;等 ir 变为高电平
  169.         call    del
  170.         jmp     i21
  171. i3:     mov     r3,#0          ;8位数清为0
  172. ll:     jnb     p3.2,i4        ;等 ir 变为低电平
  173.         call    del
  174.         jmp     ll
  175. i4:     jb      p3.2,i5        ;等 ir 变为高电平
  176.         call    del
  177.         jmp     i4
  178. i5:     mov     r2,#0          ;0.14ms 计数
  179. l1:     call    del
  180.         jb      p3.2, n1       ;等 ir 变为高电平
  181.                                ;ir=0,检查r2中的计数值
  182.         mov     a,#8
  183.         clr     c
  184.         subb    a,r2           ;判断高低位
  185.                                        ;if c=0  bit=0
  186.         mov     a,@r0
  187.         rrc     a
  188.         mov     @r0,a          ;处理完一位
  189.         inc     r3
  190.         cjne    r3,#8,ll       ;需处理完8位
  191.         mov     r3,#0
  192.         inc     r0
  193.         cjne    r0,#54h,ll     ;收集到4字节了

  194.                 mov     a,53h               ;对接收码进行判断,是否接收完成、正确
  195.                 cpl     a
  196.                 cjne    a,52h,i_out

  197.             setb    logo           ;接收信号完成标志。0为未完成,1为完成


  198. n1:     inc     r2
  199.         cjne    r2,#30,l1        ;0.14ms 计数过长则时间到自动离开
  200.                
  201.                 setb    ex0
  202.                   
  203. i_out:  pop     psw
  204.             pop     acc
  205.             reti


  206. ;---------红外解码延时程序------                  
  207. del:    mov    r5,#1           ;ir解码使用 0.138ms
  208. del0:   mov    r6,#2
  209. del1:   mov    r7,#67
  210. del2:   djnz   r7,del2
  211.         djnz   r6,del1
  212.         djnz   r5,del0
  213.         ret


  214. ;=======3、EEPROM操作子程序 ========
  215. ;---------读取1个字节-------------------
  216. read:     mov     drh,#10h              
  217.           mov     drl,#00h                              
  218.           mov     cmd,#01h              
  219.           mov     contr,#84h            
  220.           mov     trig,#046h            
  221.           mov     trig,#0b9h            
  222.           mov     dbm,dat               
  223.           nop
  224.           nop
  225.           ret
  226. ;---------写入1个字节-------------------
  227. write:    lcall   clear
  228.           mov     dat,jsm      
  229.           mov     drh,#10h
  230.           mov     drl,#00h                              
  231.           mov     cmd,#02h              
  232.           mov     contr,#84h            
  233.           mov     trig,#046h           
  234.           mov     trig,#0b9h            
  235.           nop
  236.           nop
  237.           ret
  238. ;---------擦除1个字节-------------------
  239. clear:    mov    drh,#10h
  240.           mov    drl,#00h
  241.           mov    cmd,#03h              
  242.           mov    contr,#84h            
  243.           mov    trig,#046h            
  244.           mov    trig,#0b9h            
  245.           nop
  246.           nop
  247.           ret

  248. ;=========关闭EEPROM====================
  249. off_ee:   mov    drh,#00h
  250.           mov    drl,#00h
  251.           mov    cmd,#00h
  252.           mov    contr,#00h
  253.           mov    trig,#00h
  254.           ret

  255.           end
复制代码
Snap1.gif
回复 支持 反对

使用道具 举报

     
发表于 2010-3-13 20:59:32 | 显示全部楼层
硬件看明白了,软件还要多学习
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2010-3-15 19:56:04 | 显示全部楼层
请教一下翌版主。
在这电路图中,单片机输出5v低电平使三极管导通,并驱动12V继电器,这是否可行?是不是还要再加一个三极管。我对模拟电路不是很熟悉,请翌版主指教一下。
回复 支持 反对

使用道具 举报

发表于 2010-3-15 20:36:44 | 显示全部楼层

回复 4# xlfs 的帖子

做的真不错啊,学习,就是没学过stc

电路图中继电器驱动三极管画的有问题
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2010-3-15 22:00:29 | 显示全部楼层
说实在的,对模拟电路不熟悉,三极管偏置不知如何计算,先这样画着了。也可以将这些去掉,直接接个固态继电器,一定没问题。
回复 支持 反对

使用道具 举报

发表于 2010-3-16 12:02:19 | 显示全部楼层
控制继电器的三极管应用8050NPN管,光耦的电路也没画对
回复 支持 反对

使用道具 举报

     
发表于 2010-3-16 12:14:08 | 显示全部楼层

回复 4# xlfs 的帖子

这图驱动继电器的三极管画错了,应该是NPN的8050。 正像7楼说的,光耦也没画对。

个人觉得,那光耦可以不用。

[ 本帖最后由 翌阳 于 2010-3-16 12:15 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2012-8-16 11:17:22 | 显示全部楼层
本帖最后由 babygoo 于 2012-8-16 11:18 编辑

这个电路是不是一定要用4M的晶振啊,手上没有这个晶振,有12M
回复 支持 反对

使用道具 举报

发表于 2012-8-16 22:14:20 | 显示全部楼层
是否有编译好的hex文件啊
回复 支持 反对

使用道具 举报

     
发表于 2017-2-26 10:57:20 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

     
发表于 2017-3-9 20:15:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

     
发表于 2017-3-9 21:48:00 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报

     
发表于 2017-3-10 17:16:02 | 显示全部楼层
对技术大牛都服
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 15:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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