日军舰撞我保钓船

公告 欢迎访问器件网,点此进入电子工程师论坛

本站主题: 推广非日产电子元器件及无日产器件的设计方案

液晶屏世界  器件销售 集成器件 分立器件 资讯中心 下载中心 电子工程师论坛

推广国产器件,振兴民族电子产业是我们的追求.如您需要器件选型,技术支持,采购,欢迎联系. 最新消息: 替换日产光耦TLP521,PC817的光耦K1010免费提供样品.

红外遥控电风扇控制系统设计

红外遥控电风扇控制系统设计
作者:单片机技术培训班学员 陈行军
概述

   遥控电风扇是 90年代初期在广东珠江三角洲地区作做大量的研发和生产,并有专门的掩模芯片作为主控芯片使用,现本人用单片机作了接收和发射的配套使用的系统方案。红外遥控电路现在已成为一种设计电路的时尚,现 简单地介绍了红外线遥控发射、接收系统的原理,给出用 89C2051作为遥控接收系统解码器的一种巧妙实现方法,以及完整的51汇编程序代码。包括发射、接收的原理图及其编程的主程序、发送程序、接收程序、定时中断程序的流程过程,从而完成此设计的要点,参考流程方框图的构思过程,可以编写应用软件。遥控电风扇控制系统分为两大部分:遥控器和电风扇控制板,下面分别加以描述。

一、遥控器

  为了能远离距的控制电风扇,采用了红外遥控器。通常红外遥控器由发射和接收两部分组成,发射部分由单片机 80C2051等构成。接收部分装在电风扇的控制器内,由89C51等构成。

1. 工作原理及组成部分

(1)CPU 采用AT89C2051单片机,AT89C2051的功能:

   和 MCS-8051产品兼容、2KB可重编程闪速存储器、耐久性:1000写/擦除周期、2.7V~6V的操作范围、全静态操作:0Hz~24MHz、两级加密程序存储器、128×8位内部RAM、15根可编程I/O引线、6个中断源、可编程串行UART通道、直接LED驱动输出、片内模拟比较器、低耗空载和掉电方式。

(2)电源采用4节7号电池来提供电源,并用一个二极管(IN4148)进行降压。

(3)调制部分:采用CD40106进行缓冲放大并整形.发送的数字信号与38K的载波进行相与,将其调制在一起,整形并缓冲放大,经过8050进行放大驱动红外发射管,使其发射红外光。

(4)红外发射方原理见图(1)所示。

 


 

(图 1 )遥控器原理框图

2.红外发射

(1)发射部分包括键盘矩阵、编码调制、红外发送器。使用89C2051芯片 将按键信号调制在 38KHz 的载波信号上通过三极管放大后发射出去。红外编码为: 全码 =引导码+系统码+系统反码+数据码+数据反码。89C2051 的 P1口构成矩阵式键盘,用T1产生定时中断,驱动P3.3产生一个38K的方波,作为红外线的调制基波。将发送的数据和P3.0进行逻辑与后,经过40106整形,用三极管驱动红外发射管发射。

(2)按键功能

K1:低档、中档、高档;键值为 01H

K2彩灯:键值为 02H

K3:自然风、睡眠风、正常风键;值为03H

K4定时;键值为04H

K5开/关机;键值为05H

(3)当无键按下时,延时10秒后进入待机状态,系统处于低功耗模式。 当有按键按下时,INT0中断产生中断,同时唤醒CPU进行工作状态。

3.红外发射的编码方式

   遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本 NEC的uPD6121G组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:

(1)采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。

“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管发射。

(2)遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制0FFH;后16位为8位操作码(功能码)及其反码。

(3)遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间。

(4)其相关的波形图如下:

(图 2)遥控编码

4.硬件设计

硬件设计见电路原理图(3)所示。

(图3)遥控器电路原理图

5.软件设计

(1)采用中断的处理程序完成整个系统的操作,INT0中断处理完成键盘扫描以及发送。

(2)程序流程图:

(图 4)遥控器软件流程图

二、 电风扇控制板
1.工作原理及组成部分: 红外接收部分包括光电转换放大器、解调、解码电路。

(1)CPU板将单片机、控制、键盘组合在一起完成了人机对话。 用 AT89C51单片机来作主芯片控制,采用红外T1838接收头,用双向可控硅MC97A6控制电机档位,具有红外遥控功能。

(2)电源部分:交流220V经变压器降压为2×8V,全波整流后再由三端稳压器LM7805稳压,供给控制板。

(3) 电风扇控制板框图

 


 

(图 5 )电风扇控制板框图

2.设计方案

(1)控制部分

(图 6)电机引线图

K1:低、中、高档,相应的指示灯亮。参见(图6)

K2:控制彩灯,相应的指示灯亮

K3:自然风、睡眠风、正常风控制 。参见(图8)、(图9)、(图10)

K4: 定时30分钟,1小时,2小时,4小时。相应的指示灯点亮。参见(图7)

K5:具有开机功能和关机功能

 


 

(图7)定时时循环图

(2)风类

自然风的处理流程 :


 

( 图 8) 自然风的循环图

睡眠风的处理流程 :

 


 

( 图 9) 自然风的循环图

正常风的处理流程 :


 

(图10)正常风循环

(3)工作方式:分为手动和遥控两种方式。

4.硬件设计:参见(图11)

(图 11)电风扇控制板电路原理图

5.软件设计:

(1)红外遥控输入在 P3.2(INT0),面板按键P3.3(INT1)。

(2) 遥控的解码过程:

(图12)编码

(图13)数据帧图形

   单片机收到一个中断后,开始计数, 然后在主程序有一个判断子程序,首先判断是否>8MS,是否有高电平,再判断是否>4MS的低电平,然后再判断是否是0或1,循环32次完成,32个码的接收和存储。

(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个按键
;==============================================================================
$include(2051RAM.INC)
;$include(REG51.INC)

 ORG 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 
   
    

;========================电风扇红外接收(控制板)程序=========== 
;用89C51单片机来作主芯片控制,采用红外1838接收头,可控硅采用MC97A6
;风扇具有红外遥控功能
;K1:低档,相应的指示灯亮 ,中档,相应的指示灯亮 , 高档,相应的指示灯亮    
;K2:彩灯,相应的指示灯亮
;K3:自然风控制       睡眠风的控制 正常风的控制      
;K4:定时30分钟,1小时,2小时,4小时
;K5:开关机功能
;自然风的处理流程:停--->开低档--->延时6秒--->开中档-->
;延时6秒--->开高档--->循环
;睡眠风的处理流程:停6S--->开低档10S--->停延时10S-->开中档10S-->
;停延时10S-->开高档10S--->循环
;正常风的处理流程:开低档10S--> 开中档10S--> 开高档10S---> 循环

;==========================================================
$INCLUDE(REG51.INC)
$INCLUDE(89C51RAM.INC)
 ORG 0000H
 JMP START
 ORG 0003H
 JMP JISH_INT0 ;红外遥控中断设置
 ORG 000BH
 JMP LP0  ;定时中断
 ORG 0013H
 JMP KEY_INT1 ;按键中断 
 ORG 0100H
START: 
 MOV R0,#7FH  ;预使用单元清0
 CLR A
MAIN0:
 MOV @R0,A
 DJNZ R0,MAIN0
  
 MOV SP,#60H
 MOV TMOD,#01H
 MOV TH0,#3CH  ;定时50MS
 MOV TL0,#0B0H
 
 SETB LLOW   ;关低风
 SETB MDI   ;关中风
 SETB HIGHT   ;关高风
 SETB LLAP   ;关彩灯
 MOV P0,#0FFH  ;关所有的指示灯
  
 SETB EX0
 SETB EX1
 SETB EA   ;CPU开中
   
MAIN: JB LKEYON,KEYHANDLE ;检按键标志位
 JB REC,KEYHANDLE  ;检接收中断标志位

 JMP MAIN   ;转主程序
 
;============================================================================== 
;键值的处理的程序
;键盘处理程序
;K1键:完成弱、中、强控制,相应的指示灯点亮
;K2键:完成彩灯控制,相应的指示灯点亮
;K3键:完成自然风、睡眠风、正常风的控制,相应的指示灯点亮
;K4键:完成定时的控制,同时0.5H,1H,2H,4H,相应的指示灯点亮
;K5键:开/关机
;==============================================================================
KEYHANDLE:
 CLR LKEYON
 CLR LREC
 MOV A,MRD
    
 CJNE A,#01H,KEY2  ;当键值=01H时, 
;------------------------------------------------------------------------------
;低、中、高、的控制
;------------------------------------------------------------------------------
KEY1: JB DANG01,DIFENG
 JB DANG02,ZHONGFENG ;DANG02 中档标志位
 JB DANG03,QIANGFENG ;DANG03 强档标志位 
 JMP MAIN
;------------------------------------------------------------------------------
;低档控制 
DIFENG: 
 JNB DANG01,FAN0
 SETB LLOW   ;完成了低档的程序,关低
 SETB MDI   ;关中
 SETB HIGHT   ;关高
 CALL DY20MS   ;保证三个SCR全部为关断状态
 CLR LLOW   ;开低风
 CLR LED_L   ;开低档指示灯
 CLR DANG01
FAN0: JMP MAIN

;------------------------------------------------------------------------------
;中档控制
ZHONGFENG: 
 
 JNB DANG02,FAN0
 SETB LLOW   ;关低
 SETB MDI   ;关中
 SETB HIGHT   ;关高
 CALL DY20MS   ;保证三个SCR全部为关断状态
 CLR MDI
 CLR LED_M
 CLR DANG02
 
 AJMP MAIN   ;跳转到
;------------------------------------------------------------------------------
;高档控制
QIANGFENG:
 
 JNB DANG03,FAN0 
 SETB LLOW   ;关低
 SETB MDI   ;关中
 SETB HIGHT   ;关高
 CALL DY20MS   ;保证三个SCR全部为关断状态
 CLR HIGHT
 CLR LED_H
 CLR DANG03
 AJMP MAIN   ;跳转到
;------------------------------------------------------------------------------
;彩灯控制
;------------------------------------------------------------------------------ 
KEY2: 
 CJNE A,#02H,KEY3  ;K4的处理程序 彩灯的处理程序
 JB PLAP,LED1
 CLR LLAP   ;第一次按时将彩灯打开,
 CLR LED_LAP   
 SETB PLAP   
 JMP MAIN   ;返回
LED1: SETB LLAP   ;第二次按时将彩灯关断
 SETB LED_LAP
 CLR PLAP 
 JMP MAIN   ;跳转到
;------------------------------------------------------------------------------
;风类处理过程
;------------------------------------------------------------------------------ 
KEY3: 
 CJNE A,#03H,KEY4_A  ;K3的处理程序处理风类
 JB SMF,SKEEP
 JB ZCF,SPRING_A
 JB ZRF,WATERM
 JMP MAIN
 KEY4_A:JMP KEY4
 SPRING_A:
  JMP SPRING
;------------------------------------------------------------------------------
;自然风控制   
WATERM: 
 JNB ZRF,FAN1
 CLR ZRF
 SETB LLOW   ;处理自然风,关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN0  ;查询
 JB LKEYON,ZHUAN0  ;查询
 CALL DY6S
 CLR LLOW
 JB LREC,ZHUAN0  ;查询
 JB LKEYON,ZHUAN0  ;查询 
 CALL DY6S
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN0  ;查询
 JB LKEYON,ZHUAN0  ;查询
 CALL DY20MS
 CLR MDI
 JB LREC,ZHUAN0  ;查询
 JB LKEYON,ZHUAN0  ;查询
 CALL DY6S
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN0  ;查询
 JB LKEYON,ZHUAN0  ;查询
 CALL DY20MS
 CLR HIGHT
 CALL DY6S
 AJMP WATERM
ZHUAN0: SETB SMF
FAN1: JMP MAIN
  
;------------------------------------------------------------------------------
;睡眠风控制
SKEEP: 
 
 JNB SMF,FAN2
 CLR SMF
SLEEP1: SETB LLOW   ;处理睡眠风,关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY6S
 CLR LLOW   ;开低档
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY10S
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY10S
 
 CLR MDI   ;开中档
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY10S
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY10S
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY10S
  
 CLR HIGHT   ;开高档
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY10S
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 JB LREC,ZHUAN1  ;查询
 JB LKEYON,ZHUAN1  ;查询
 CALL DY10S
 AJMP SKEEP
ZHUAN1: CLR SMF
 SETB ZCF
FAN2: JMP MAIN  
;------------------------------------------------------------------------------
;正常风控制 
  
SPRING:
 
 JNB ZCF,FAN3
 CLR ZCF
SPRING1:
 SETB LLOW   ;处理正常风,关低'中'高
 SETB MDI
 SETB HIGHT
 CALL DY20MS
 CLR LLOW   ;开低档 
 JB LREC,ZHUAN2  ;查询
 JB LKEYON,ZHUAN2  ;查询
 CALL DY10S
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 LCALL DY20MS
 JB LREC,ZHUAN2  ;查询
 JB LKEYON,ZHUAN2  ;查询
 CLR MDI   ;开中档
 CALL DY10S
 
 
 SETB LLOW   ;关低'中'高
 SETB MDI
 SETB HIGHT
 LCALL DY20MS
 JB LREC,ZHUAN2  ;查询
 JB LKEYON,ZHUAN2  ;查询
 CLR HIGHT   ;开高档
 CALL DY10S
 AJMP SPRING
ZHUAN2: CLR ZCF
FAN3: JMP MAIN 
  
;------------------------------------------------------------------------------
;定时控制
;------------------------------------------------------------------------------  
KEY4: 
 CJNE A,#04H,KEY5 ;K4的定时的处理程序
 JB SJ01,DY1H  
 JB SJ02,DY2H
 JB SJ03,DY4H
 JNB SJ00,FAN4
 CLR SJ00
 SETB TR0   ;0 5H处理   
 JMP MAIN
 
DY1H: 
 JNB SJ01,FAN4
 CLR SJ01
 SETB TR0
 JMP MAIN
  
DY2H: 
 JNB SJ02,FAN4
 CLR SJ02
 SETB TR0
 JMP MAIN
 
DY4H: 
 JNB SJ03,FAN4
 CLR SJ02
 SETB TR0
FAN4: JMP MAIN
;------------------------------------------------------------------------------
;开关机
;------------------------------------------------------------------------------ 
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   ;取行号

9 7 3 1 2 4 8 :
南京高略科技有限公司致力于国产器件和非日产器件推广
您如果需要相关器件或技术支持,请联系:
电话(TEL): 025-6885 3239 传真(FAX): 025-6885 3238

友情提醒: 下载链接在http://pdf.18ic.com电子工程师论坛的,都需要注册并发表精华文章:)

正确认识和理解抵制日货,欢迎点这里阅读器件网站长的大作,纪念抗战胜利60周年宣传资料

相关新闻:
无相关新闻

06-03-28 11:33:26


中国器件网 苏ICP备05063888号