学习型红外遥控器的设计.docx

上传人:b****2 文档编号:18092857 上传时间:2023-04-24 格式:DOCX 页数:14 大小:32.80KB
下载 相关 举报
学习型红外遥控器的设计.docx_第1页
第1页 / 共14页
学习型红外遥控器的设计.docx_第2页
第2页 / 共14页
学习型红外遥控器的设计.docx_第3页
第3页 / 共14页
学习型红外遥控器的设计.docx_第4页
第4页 / 共14页
学习型红外遥控器的设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

学习型红外遥控器的设计.docx

《学习型红外遥控器的设计.docx》由会员分享,可在线阅读,更多相关《学习型红外遥控器的设计.docx(14页珍藏版)》请在冰豆网上搜索。

学习型红外遥控器的设计.docx

学习型红外遥控器的设计

相应的汇编代码:

使用的单片机是:

STC11F08XE

LastKey_8bitEQU40H

NowKey_8bitEQU41H

Elec_Level_8bitEQU42H

LevelDown_8bitEQU43H;-;

FLAG_T0BIT00H

KEY_F_VALUE1EQU21H;存放标志位的空间,用于查询标志位时处理只用

KEY_F_VALUE2EQU22H;存放标志位的空间,用于查询标志位时处理只用

KEY_L_Fbit01H;进入学习后,作为判断是否跳出学习的标志位

key_machineBIT02H

FLAG_LEARNING_Ybit03H

MACHINE_NOEQU3CH

JB_F_NOEQU44H;用于第一个8个数据是否检测完毕;初值设为8

JB_F_TOTALEQU45H;用于记录标志位查询的个数

ADDRH_FIRSTEQU46H;EEPROM的首地址高位

ADDRL_FIRSTEQU47H;EEPROM的首地址低位

F_L_1BIT04H

RESULT_FEQU48H;用于存放标志位处理后的结果

KEY_NUMBEREQU49H;进入学习后,学习的键号

F_LEARNINGBIT07H

F_KEY2BIT08H

F_KEY3BIT09H

F_KEY4BIT0AH

F_KEY5BIT0BH

F_KEY6BIT0CH

F_KEY7BIT0DH

F_KEY8BIT0EH

F_KEY9BIT0FH

F_KEYABIT10H

F_KEYBBIT11H

F_KEYCBIT12H

F_KEYDBIT13H

F_KEYEBIT14H

F_KEYFBIT15H

org0000H

AJMPMAIN

ORG000BH

AJMPTT0

ORG0030H

MAIN:

MOVTMOD,#01H

MOVTH0,#0D8H

MOVTL0,#0F0H

MOV20H,#0

MOV21H,#0

MOV22H,#0

MOVKEY_NUMBER,#0

MOVADDRH_FIRST,#0

MOVADDRL_FIRST,#0

MOVMACHINE_NO,#1

MOVLastKey_8bit,#0FFH

MOVElec_Level_8bit,#0FFH

MOVSP,#30H

SETBET0

SETBEA

SETBTR0

LCALLKEY_INTI

REGULATION:

LCALLGETNOWKEY

LCALLUPDATE_KEY_EST

LCALLKEY_DONE

;LCALLKEY_FUNCTION

LCALLDISP

WAIT_10MS:

JNBFLAG_T0,WAIT_10MS

CLRFLAG_T0

AJMPREGULATION

;================================================

TT0:

SETBFLAG_T0

MOVTH0,#0D8H

MOVTL0,#0F0H

RETI

;=========================当按键生效时讲对应按键的标志位置1

KEY_DONE:

MOVA,LevelDown_8bit

CJNEA,#00H,KEY_0

LJMPLOOP_OUT

KEY_0:

CJNEA,#11H,KEY_1

SETBKEY_MACHINE

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_1:

CJNEA,#21H,KEY_2

SETBF_L_1

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_2:

CJNEA,#41H,KEY_3

SETBF_KEY2

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_3:

CJNEA,#81H,KEY_4

SETBF_KEY3

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_4:

CJNEA,#12H,KEY_5

SETBF_KEY4

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_5:

CJNEA,#22H,KEY_6

SETBF_KEY5

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_6:

CJNEA,#42H,KEY_7

SETBF_KEY6

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_7:

CJNEA,#82H,KEY_8

SETBF_KEY7

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_8:

CJNEA,#14H,KEY_9

SETBF_KEY8

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_9:

CJNEA,#24H,KEY_A

SETBF_KEY9

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_A:

CJNEA,#44H,KEY_B

SETBF_KEYA

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_B:

CJNEA,#84H,KEY_C

SETBF_KEYB

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_C:

CJNEA,#18H,KEY_D

SETBF_KEYC

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_D:

CJNEA,#28H,KEY_E

SETBF_KEYD

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_E:

CJNEA,#48H,KEY_F

SETBF_KEYE

MOVLevelDown_8bit,#00H

LJMPLOOP_OUT

KEY_F:

CJNEA,#88H,LOOP_OUT

SETBF_KEYF

MOVLevelDown_8bit,#00H

LOOP_OUT:

RET

;----------------------根据具体硬件获取程序不同

;获取现在电平到NowKey_8bit

GETNOWKEY:

PUSHACC

MOVA,#0F0H

MOVP1,A

MOVA,P1

ANLA,#0F0H

MOVB,A

MOVA,#0FH

MOVP1,A

MOVA,P1

ANLA,#0FH

ORLA,B

MOVNowKey_8bit,A

POPACC

RET

;-----------------------------

KEY_INTI:

MOVLastKey_8bit,#00H

MOVNowKey_8bit,#00H

MOVLevelDown_8bit,#00H

RET

;-----------------------------

UPDATE_KEY_EST:

MOVA,NowKey_8bit;LastKey_8bit,NowKey_8bit同与

XRLA,LastKey_8bit

CPLA

MOVB,A;相同位存于B;就是同或

MOVA,NowKey_8bit;更新旧键值

MOVLastKey_8bit,A

MOVNowKey_8bit,A

MOVA,LastKey_8bit

XRLA,Elec_Level_8bit

ANLA,B;得到按键有效变化的按键位

MOVB,A;存储变化键位

ANLA,Elec_Level_8bit;取得变化键原值

CPLA

ANLA,B;取得变化键变化后值

;

;---------------下沿

MOVA,B;-;

ANLA,Elec_Level_8bit;-;

ORLA,LevelDown_8bit;-;

MOVLevelDown_8bit,A;-;

;-------------------------

MOVA,Elec_Level_8bit;变化键位与Elec_Level_8bit异或得到按键变化后所有按键当前有效状态

ANLA,B

MOVNowKey_8bit,A;NowKey_8bit作临时存储用

MOVA,Elec_Level_8bit

ORLA,B

CPLA

ORLA,NowKey_8bit;NowKey_8bit作临时存储用

CPLA

MOVElec_Level_8bit,A

RETURN_KEY_EST:

RET

;==========================对按键的功能进行分配

KEY_FUNCTION:

PUSHACC

PUSHPSW

MOVPSW,#10H

JNBKEY_MACHINE,TO_LEARNING

CLRKEY_MACHINE

MOVA,MACHINE_NO

CJNEA,#04H,LOOP_01

MOVMACHINE_NO,#01H

LJMPOUT_KEY_FUNCTION

LOOP_01:

INCMACHINE_NO

LJMPOUT_KEY_FUNCTION

TO_LEARNING:

JNBF_L_1,GOTO_EMOT_INF

CLRF_L_1

CPLKEY_L_F;这里作为检测此次按键是进入学习还是退出学习;=1是进入学习

jnbKEY_L_F,GOTO_EMOT_INF

LCALLLEARNING

LJMPOUT_KEY_FUNCTION

GOTO_EMOT_INF:

CLREX1;此时进入发射状态,关闭外中断1,由于外中断0必须在中断1产生后才能产生,

;而外中断0还用于唤醒单片机之用

LCALLEMOTE_INF

OUT_KEY_FUNCTION:

POPPSW

POPACC

RET

;==========================学习子程序

LEARNING:

MOV20H,#0

MOV21H,#0

MOV22H,#0

MOVLastKey_8bit,#0FFH

MOVElec_Level_8bit,#0FFH

LCALLKEY_INTI

LCALLGETNOWKEY

LCALLUPDATE_KEY_EST

LCALLKEY_DONE

LCALLDISP

JBkey_machine,KEY_MACHINE_NOUSE

JNBF_L_1,KEEP_LEARNING

CLRF_L_1

CPLKEY_L_F;这里作为检测此次按键是进入学习还是退出学习;=1是进入学习

JNBKEY_L_F,OUT_LEARNING

CPLKEY_L_F

JNBKEY_L_F,OUT_LEARNING

LJMPKEEP_LEARNING

KEY_MACHINE_NOUSE:

CLRkey_machine

WAIT_10MS_L:

JNBFLAG_T0,WAIT_10MS_L

CLRFLAG_T0

AJMPLEARNING

KEEP_LEARNING:

LCALLKEY_VALUE_DONE;对标志位的值进行处理,使其用于检查学习具体那一个按键

;类似于按键扫描

jnbFLAG_LEARNING_Y,WAIT_10MS_L;判断是否有学习按键按下,有的继续学习,

;没有则退出后继续判断那个需要学习的按键

clrFLAG_LEARNING_Y;在每次判断之后,需立即清除相应的标志位

LCALLADDR_GET

LCALLLEARN_BEGIN

LCALLRECIEVEING

LJMPWAIT_10MS_L

OUT_LEARNING:

CLRkey_machine

RET

;===========================单个数码管静态显示

DISP:

MOVA,MACHINE_NO

MOVDPTR,#T_AB

MOVCA,@A+DPTR

MOVP0,A

RET

T_AB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH

;========================红外发射子程序

EMOTE_INF:

RET

;=============学习初始化

LEARN_BEGIN:

RET

;=============接收解码

RECIEVEING:

AJMP$

RET

;=============地址获取

ADDR_GET:

MOVA,MACHINE_NO

DECA

MOVB,#2

MULAB

MOVDPTR,#T_GET_ADDR

MOVCA,@A+DPTR

MOVADDRH_FIRST,A

MOVADDRL_FIRST,#00H

MOVA,KEY_NUMBER

MOVKEY_NUMBER,#0

MOVB,#2

MULAB

ADDA,ADDRH_FIRST

MOVADDRH_FIRST,A

RET

T_GET_ADDR:

DB00H,00H,1CH,00H,38H,00H,54H,00H

;==============对标志位的值进行处理

KEY_VALUE_DONE:

MOVJB_F_NO,#9

MOVJB_F_TOTAL,#0

KEY_VALUE_DONE1:

DJNZJB_F_NO,NEXT_JB

MOVJB_F_NO,#1

LJMPNEXT_6BIT

NEXT_JB:

MOVA,JB_F_TOTAL

MOVDPTR,#TAB_DOING

MOVCA,@A+DPTR

ANLA,KEY_F_VALUE1

MOVRESULT_F,A

movA,RESULT_F

JZinc_total

SETBFLAG_LEARNING_Y

MOVRESULT_F,#0

MOVkey_number,JB_F_TOTAL

LJMPOUT_KEY_VALUE_DONE

inc_total:

INCJB_F_TOTAL

LJMPKEY_VALUE_DONE1

NEXT_6BIT:

MOVA,JB_F_TOTAL

CJNEA,#0EH,GOING_ON

;SETBFLAG_LEARNING_Y

LJMPOUT_KEY_VALUE_DONE

GOING_ON:

MOVA,JB_F_TOTAL

MOVDPTR,#TAB_DOING

MOVCA,@A+DPTR

ANLA,KEY_F_VALUE2

MOVRESULT_F,A

JZINC_TOTAL2

SETBFLAG_LEARNING_Y

MOVKEY_F_VALUE2,#0

MOVRESULT_F,#0

MOVKEY_NUMBER,JB_F_TOTAL

LJMPOUT_KEY_VALUE_DONE

INC_TOTAL2:

INCJB_F_TOTAL

LJMPKEY_VALUE_DONE1

OUT_KEY_VALUE_DONE:

RET

TAB_DOING:

DB01H,02H,04H,08H,10H,20H,40H,80H,01H,02H,04H,08H,10H,20H,40H,80H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1