51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > 51单片机 > 详细内容
红外线遥控电风扇设计思路【精】
发布时间:2009/6/29  阅读次数:4456  字体大小: 【】 【】【

;------------------------------------------------------------------------------  
KEY5:  
  CJNE  A,#05H,POTHER    ;开关机处理程序
  JB  KAI,GUAN
  CLR  MDI      
  CLR  LED_M      
  SETB  KAI
  JMP  MAIN      ;返
  
GUAN:  SETB  LLOW      ;关低中高
  SETB  MDI
  SETB  HIGHT
  CLR  KAI
  JMP  MAIN
POTHER:
  JMP  MAIN      ;其他键的不处理直接返回  
;==============================================================================
;T0定时中断处理
;==============================================================================    
LP0:
  PUSH  ACC      ;中断处理
  PUSH  PSW
  MOV  TH0,#3CH    ;定时50MS
  MOV  TL0,#0B0H
  DJNZ  CUZHI,GRET    ;1S到后向下执行
  MOV  CUZHI,#20      ;给50MS的寄存器给初值
  INC  SEN      
  MOV  A,SEN
  CJNE  A,#60,GRET    ;1分钟到后向下执行
  INC  MIN
  MOV  A,MIN
  
  JB  SJ01,LOOP_1H    ;定时1小时的处理
  JB  SJ02,LOOP_2H    ;定时2小时的处理
  JB  SJ03,LOOP_4H    ;定时4小时的处理
  CJNE  A,#30,GRET    ;半小时到后向下执行    
  MOV  P1,#0FFH    ;关断所有档位
  MOV  P0,#0FFH
  SETB  SJ01      ;将1H的标志位进行置 1
  JMP  GRET
LOOP_1H:
  CJNE  A,#60,GRET    ;1小时到后向下执行
  MOV  P1,#0FFH
  MOV  P0,#0FFH
  CLR  SJ01      ;将1H的标志位进行置 0
  SETB  SJ02      ;将2H的标志位进行置 1
  JMP  GRET
LOOP_2H:
  CJNE  A,#60,GRET    ;1小时到后向下执行
  INC  HOUR
  MOV  A,HOUR
  CJNE  A,#2,GRET    
  MOV  P1,#0FFH    ;关断
  MOV  P0,#0FFH
  CLR  SJ02      ;关断2H的标志位
  SETB  SJ03      ;将4H的标志位进行置位
  JMP  GRET      ;中断返回
LOOP_4H:
  CJNE  A,#60,GRET    ;1小时到后向下执行
  INC  HOUR
  MOV  A,HOUR
  CJNE  A,#4,GRET    ;4小时到后向下执行
  MOV  P1,#0FFH    ;关断
  MOV  P0,#0FFH
  CLR  SJ03      ;将4H的标志位进行清零
  JMP  GRET      ;中断返回
GRET:  
  CLR  TR0
  POP  PSW
  POP  ACC
  RETI

;==============================================================================  
;INT0中断处理程序:对接收数据进行接收      
;==============================================================================
JISH_INT0:
  PUSH  ACC
  PUSH  PSW
  CLR  EX0      ;关断中断  
  MOV  R6,#10      ;避开9MS时间的引导码
SB:  CALL  DY882US
  JB  P3.2,EXIT    ;,EX检测为1时退出
  DJNZ  R6,SB      ;检测为0时,引导码过
  JNB  P3.2,$;      ;检测为0时,等待
  ACALL  DY4700US    ;避开4。5MS时间的引导码
  MOV  R7,#16      ;避开系统码
JJJJA:  JNB  P3.2,$
  LCALL  DY882US
  MOV  C,P3.2      ;将P3.2送C中
  JNC  UUUA      ;若C=0则转
  LCALL  DY1000US
UUUA:  DJNZ  R7,JJJJA
  MOV  R1,#MRD
  MOV  R2,#2
PP:  MOV  R3,#8      ;右移的次数
JJJJ:  JNB  P3.2,$      ;=0则等
  LCALL  DY882US
  MOV  C,P3.2      ;送C中
  JNC  UUU
  LCALL  DY1000US
UUU:  MOV  A,@R1      ;送存贮的首址
  RRC  A
  MOV  @R1,A      ;送存贮单元中
  DJNZ  R3,JJJJ      ;完成一个字节,没完则
  INC  R1
  DJNZ  R2,PP
  MOV  A,MRD
  CPL  A
  CJNE  A,31H,EXIT    ;进行数据码和数据的反码进行比较
EXIT:  POP  PSW
  POP  ACC
  SETB  LREC      ;置REC的标志位
  SETB  EX0      ;打开INT0的中断
  RETI
      
;==============================================================================
;INT1的中断处理
;==============================================================================
KEY_INT1:
  PUSH  ACC
  PUSH  PSW
  CLR  EX1      ;关断INT1
  LCALL  SCANKEY
  CALL  KEY_K10      ;置高、中、低的标志位
  CALL  FENG_3      ;置风类的标志位
  CALL  JS      ;置定时时间标志位
  SETB  LKEYON      ;按键标志位
  SETB  EX1      ;打开中断位
  POP  PSW
  POP  ACC
  RETI
;------------------------------------------------------------------------------
;定时的置位标志程序
;------------------------------------------------------------------------------  
JS:
  CLR  SJ00
  CLR  SJ01
  CLR  SJ02
  CLR  SJ03
    
  MOV  A,MRD
  CJNE  A,#04H,KEY_K4D    ;
  INC  TIME
  MOV  A,TIME
  CJNE  A,#5,KEY_K4
  MOV  TIME,#1
KEY_K4:
  MOV  A,TIME
  CJNE  A,#1,KEY_K4A    ;等1则置ZRF
  SETB  SJ00
  JMP  KEY_K4D

KEY_K4A:  
  CJNE  A,#2,KEY_K4B    ;等2则置SMF
  SETB  SJ01
  JMP  KEY_K4D
KEY_K4B:
  CJNE  A,#3,KEY_K4C    ;等3则置ZCF
  SETB  SJ02
  JMP  KEY_K4D
KEY_K4C:
  CJNE  A,#4,KEY_K4D    ;等3则置ZCF
  SETB  SJ03
  JMP  KEY_K4D
KEY_K4D:
  RET
;------------------------------------------------------------------------------
;高中低档的置标志位子程序
;------------------------------------------------------------------------------
KEY_K10:
  CLR  DANG01
  CLR  DANG02
  CLR  DANG03
    
  MOV  A,MRD
  CJNE  A,#01H,KEY_K1C    ;
  INC  FENG
  MOV  A,FENG
  CJNE  A,#4,KEY_K1
  MOV  FENG,#1
KEY_K1:
  MOV  A,FENG
  CJNE  A,#1,KEY_K1A
  SETB  DANG01
  JMP  KEY_K1C
KEY_K1A:  
  CJNE  A,#2,KEY_K1B
  SETB  DANG02
  JMP  KEY_K1C

KEY_K1B:
  CJNE  A,#3,KEY_K1C
  SETB  DANG03
  JMP  KEY_K1C
KEY_K1C:
  RET
;------------------------------------------------------------------------------
;自然风、睡眠风、正常风的置标志位子程序
;------------------------------------------------------------------------------
FENG_3:
  CLR  ZRF
  CLR  SMF
  CLR  ZCF
    
  MOV  A,MRD
  CJNE  A,#03H,KEY_K3C    ;
  INC  FLEI
  MOV  A,FLEI
  CJNE  A,#4,KEY_K3
  MOV  FLEI,#1
KEY_K3:
  MOV  A,FLEI
  CJNE  A,#1,KEY_K3A    ;等1则置ZRF
  SETB  ZRF
  JMP  KEY_K3C
KEY_K3A:  
  CJNE  A,#2,KEY_K3B    ;等2则置SMF
  SETB  SMF
  JMP  KEY_K3C
KEY_K3B:
  CJNE  A,#3,KEY_K3C    ;等3则置ZCF
  SETB  ZCF
  JMP  KEY_K3C
KEY_K3C:
  RET
;==============================================================================
;扫描键盘程序。
;==============================================================================  
SCANKEY:
  MOV  A,P1      
  CPL  A      
  ANL  A,#0FH
  MOV  R2,A      ;将行号存入R2中
  MOV  P1,#0F0H    ;将列置输入端
  MOV  A,P1      
  CPL  A
  ANL  A,#0F0H      ;取列号并存入A中
  MOV  R1,#03H      ;置列初号
  MOV  R3,#03H      ;置循环次数
  CLR  C
PINT01:  RLC  A      ;取列号
  JC  PINT01      
  DEC  R1
  DJNZ  R3,PINT01
    
PINT02:  MOV  A,R2      ;取行号
  MOV  R2,#00H
  MOV  R3,#03H      ;置循环次数
PINT03:  RRC  A      
  JC  PINT04
  INC  R2
  DJNZ  R3,PINT03
PINT04:  MOV  A,R2
  CLR  C      
  RLC  A      
  RLC  A
  ADD  A,R1
  MOV  MRD,A      ;键号存于MRD单元中  
  RET
;==============================================================================          
DY20MS:
    MOV  53H,#8AH            
DELAY_0:
  PUSH       53H
DELAY_1:
  DJNZ       53H,DELAY_1
               POP         53H
               DJNZ       53H,DELAY_0
               RET            
;==============================================================================    
DY6S:  
  MOV  R7,#12H
DEYLAY_00:
  MOV  53H,#0DDH            
DELAY_11:
  PUSH       53H
DELAY_22:
  DJNZ       53H,DELAY_22
               POP         53H
               DJNZ       53H,DELAY_11
               DJNZ  R7,DEYLAY_00
               RET            
;==============================================================================              
DY8S:  MOV  R7,#16
  
DEYLAY_33:
  MOV  53H,#0DDH            
DELAY_44:
  PUSH       53H
DELAY_55:
  DJNZ       53H,DELAY_55
               POP         53H
               DJNZ       53H,DELAY_44
               DJNZ  R7,DEYLAY_33
               RET        
;==============================================================================    
DY10S:  MOV  R7,#20
  MOV  R7,#12H
DEYLAY_66:
  MOV  53H,#0DDH            
DELAY_77:
  PUSH       53H
DELAY_88:
  DJNZ       53H,DELAY_88
               POP         53H
               DJNZ       53H,DELAY_77
               DJNZ  R7,DEYLAY_66
               RET        
;==============================================================================  

DY882US:MOV  R4,#20
D1:  MOV  R5,#20
  DJNZ  R5,$
  DJNZ  R4,D1
  RET
DY1000US:
  MOV  R4,#2
D3:  MOV  R5,#248
  DJNZ  R5,$
  DJNZ  R4,D3
  RET
DY4700US:
YS2:  MOV  R4,#10
D2:  MOV  R5,#235
  DJNZ  R5,$
  DJNZ  R4,D2
  RET

END

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[1]
  • 评论人:[匿名] 时间: [2009/12/29 19:50:29] IP:[221.10.76.17*]
  • 楼主感谢你的分享,不过你的程序好像有问题,我按照你的程序调试了一下,行不通,最明显的就是那个矩阵键盘的读值程序,不知你调试过没有

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号