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

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

(3)程序流程图 :

(图14)控制板主程序流程

(图15)键值处理流程

======================================================================

红外发射控制程序:

;=============电风扇红外发射(遥控器)程序=====================================
;按键说明:
;K1:低风档,键值为 01
;K2:中风档,键值为 02
;K3:高风档,键值为 03
;K4:彩灯档,键值为 04
;K5:自然风档,键值为05
;K6:睡眠风档,键值为06
;K7:正常风档,键值为07
;K8:定时档,键值为08
;K9:开关机,键值为9
;采用 4×1.5V 供电,用89C2051作CPU芯片,当没有按键按下时,进入待机状态
;按键采用INT0进行中断,只采用了8个按键
;==============================================================================
R31    DATA  1FH

KEYON    BIT  20H.0    ;按键按下的标志

SENDBUF    DATA  30H    ;定义发送系统码缓冲的地址

FMOUT    BIT  P3.3    ;38K输出

DATAOUT    BIT  P3.0    ;数据输出

; BYTE Register
P0                DATA       80H
P1                 DATA       90H
P2                 DATA       0A0H
P3                  DATA       0B0H
PSW         DATA       0D0H
ACC           DATA       0E0H
B                     DATA       0F0H
SP                 DATA       81H
DPL            DATA       82H
DPH             DATA       83H
PCON       DATA       87H
TCON       DATA       88H
TMOD      DATA       89H
TL0             DATA       8AH
TL1            DATA       8BH
TH0             DATA       8CH
TH1             DATA       8DH
IE                     DATA       0A8H
IP                     DATA       0B8H
SCON       DATA       98H
SBUF       DATA       99H

RG  0000H
  JMP  MAIN
  ORG  0003H      ;INT0的中断入口
  JMP  KEY_INT0
  ORG  000BH      ;T0的中断入口
  JMP  FM_T0
  ORG  0100H
;------------------------------------------------------------------------------
;进入主程序
;------------------------------------------------------------------------------
MAIN:  MOV  R0,#7FH    ;预使用单元清0
  CLR  A
MAIN0:
  MOV  @R0,A
  DJNZ  R0,MAIN0    ;清缓冲的地址单元值
  MOV  SP,#60H
      
  MOV  P1,#00001111B    ;将P1置输入
  CLR  KEYON      
  CLR  IT0      ;设置电平触发
  SETB  PT0      
  SETB  EX0
  SETB  EA      
  MOV  40H,#0FFH
  MOV  41H,#0FFH
  MOV  42H,#0FFH  
  CLR  DATAOUT          
  CLR  FMOUT      ;38K的中断初始值
  MOV  TMOD,#02H    ;T0的工作方式2
  MOV  TH0,#0F7H    ;送初值    
  SETB  FMOUT      
  CLR  TR0      ;1/3的高电平标志
  MOV  R2,#02H      ;2/3的循环次数  
  DJNZ  40H,LOOP1
  DJNZ  41H,LOOP1
  DJNZ  42H,LOOP1
  MOV  PCON,#01H    ;进入待机
LOOP1:  JMP  MAIN
    
;=============================================================  
;中断程序:完成其按键按下的标志位
;=============================================================
KEY_INT0:
  PUSH  ACC
  PUSH  PSW
  CLR  EX0
  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  SENDBUF+2,A    ;键号存于32H单元中
  CPL  A
  MOV  SENDBUF+3,A    ;存键号的反码
  MOV  SENDBUF,#0FFH    ;系统码在30H单元中
  MOV  SENDBUF+1,#00H    ;系统反码在31H单元中
  LCALL  SEND
  SETB  ET0      ;发送引导码
  SETB  TR0      ;启动T0
  LCALL  PP      ;发送一帧数据.包括系统码和数据码
  CLR  TR0      ;当发送完后关断定时器
  CLR  ET0      ;关T0的中断
  SETB  EX0      ;执行完后打开外INT0
  MOV  40H,#0FFH
  MOV  41H,#0FFH
  MOV  42H,#0FFH
  POP  PSW
  POP  ACC
  RETI
;=============================================================================
FM_T0:  JB  F0,IT01
  DJNZ  R2,GRET
  MOV  R2,#2
IT01:  CPL  FMOUT
  CPL  F0
GRET:  RETI
;==============================================================================      
;引导脉冲子程序
SEND:  SETB  DATAOUT
  LCALL  DY9000us
  CLR  DATAOUT
  LCALL  DY4500us
  RET  
;==============================================================================

;发送四个缓冲单元中的内容程序:

PP:  MOV  R3,#4    ;发送的字节数
  MOV  R1,SENDBUF  
PP0:  MOV  R2,#08H    ;让其循环8次
  MOV  A,@R1    ;将数据首址
  CLR  C    ;清CY
PP1:  RRC  A    ;右环移带进位
  JC  ONE    ;若C等1
ZER0:  SETB  DATAOUT    ;若C等0
  CALL  DY562us
  CLR  DATAOUT
  CALL  DY562us
    
ONE:  SETB  DATAOUT
  CALL  DY562us
  CLR  DATAOUT
  CALL  DY1687us
  DJNZ  R2,PP1
  INC  R1
  DJNZ  R3,PP0    ;等四个字节的发送完
  RET
;=========================================================================    
DY1687us:
  MOV  R31,#38
L2:         PUSH       R31
L3:         DJNZ       R31,L3
               POP         R31
               DJNZ       R31,L2
               RET
;========================================================================    
DY562us:  
  MOV  R31,#20
L22:       PUSH       R31
L33:       DJNZ       R31,L33
               POP         R31
               DJNZ       R31,L22
               RET    
;==========================================================================
;延时9000us子程序:
DY9000us:  
  MOV  R31,#91
L2A:       PUSH       R31
L3A:       DJNZ       R31,L3A
               POP         R31
               DJNZ       R31,L2A
               RET  
;==============================================================================
;延时4500us子程序    
DY4500us:    
  MOV  R31,#67
L2B:       PUSH       R31
L3B:       DJNZ       R31,L3B
               POP         R31
               DJNZ       R31,L2B
               RET    
;==============================================================================

DY10S:  MOV  R6,#10
L2C:  MOV  R4,#2
L3C:  MOV  R5,#248
  DJNZ  R5,$
  DJNZ  R4,L3C
  DJNZ  R6,L2C
  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号