当前位置:首页 > 大学毕业设计---基于51单片机智能红外遥控器的
青岛农业大学机电工程学院本科毕业设计(论文)
ANL A,#0FH
CJNE A,#0FH,KEYH1;按键在第1行 SETB P3.5 CLR P3.6 MOV A,P3 ANL A,#0FH
CJNE A,#0FH,KEYH2;按键在第2行 SETB P3.6 CLR P3.7 MOV A,P3 ANL A,#0FH
CJNE A,#0FH,KEYH3;按键在第3行 ;LJMP Q1 LJMP KEYWORK
MOV R2,#00H;第0行行号初值为0
KEYH0:
LJMP KEYL;查列线值
MOV R2,#04H;第1行行号初值为4
KEYH1:
LJMP KEYL;查列线值
MOV R2,#08H;第2行行号初值为8
KEYH2:
LJMP KEYL;查列线值
MOV R2,#0CH;第3行行号初值为12
KEYH3:
LJMP KEYL;查列线值
KEYL: MOV DPTR,#TABL
MOV B,A CLR A MOV R0,A
MOV A,R0;查列号开始
KEYLL:
SUBB A,#04H;判断是不是4列检查完了 ;JNC Q1 JNC KEYWORK MOV A,R0
MOVC A,@A+DPTR
26
青岛农业大学机电工程学院本科毕业设计(论文)
INC R0 ;R0存列值
CJNE A,B,KEYLL ;实际列值B与假设在那一列的值不等,则不再那一列,去
查下一列
DEC R0
MOV A,R0;列值放入A ADD A,R2;求出键值 MOV B,A MOV P2,#00H
MOV DPTR,#TABDISP;用数码管显示 MOVC A,@A+DPTR MOV P0,A CLR C RET
TABL:DB 0EH,0DH,0BH,07H 2、发送子程序
‘1’用10 个t的低电平和10 个t 的脉冲表示,‘0’用20 个t 的低
电平和10 个t 的脉冲表示,占空比分别为1 :2 和1 :3 ,符合NEC 通用编码(NEC编码的一帧,通常按一下遥控器按钮所发送的数据,由引导码、地址码及数据码组成)带同步帧(20个脉冲的低电平,输开始) 和结束帧(传输结束10个脉冲的低电平)。下面是选择键‘E’对应的子程序。
FASE:
MOV A,B ORL A,#0E0H
MOV R4 ,#8 ;1us发送8 位
MOV R5 ,# 20 ;1us 传输开始(同步帧) ,发送20个脉冲 LCALL H;2us调用一次子程序L20,产生20个脉冲的电平
GO: RLC A ;1us
JC S1 ;2us判断是发送'0'还是'1'是\转到s1\LCALL FAS0;2us LJMP NEXT;2us
DJNZ R4 ,GO ;2us发送8 位未完,继续
27
S1 : LCALL FAS1;2us NEXT:
青岛农业大学机电工程学院本科毕业设计(论文)
LCALL L10 ;2us 发送完,发送10个脉冲的低电平,结束 ;MOV P2,#00H RET
;2us
;发送“1”的子程序 FAS1: l1:
CLR P3.3 ;1μs ; ************* MOV R6 , #124;1μs
10个脉冲的低电平
DJNZ R6 , $;248μs ; *************
MOV R5,#10;2us SETB P3.3 ;1μs MOV R6 , #5 ;1μs
DJNZ R6 , $ ;执行5 次×2μsP次= 10μs NOP ;1us CLR P3.3 ;1μs MOV R6 , # 4 ;1μs DJNZ R6 , $ ;8μs NOP ;1us DJNZ R5 ,FS1;2μs RET ;2us
FS1:
;发送“0”的子程序 FAS0: l0:
CLR P3.3;1us MOV R5,#30
;**************
;1us 20个脉冲宽度的低电平
MOV R6,#225;1us DJNZ R6,$;450
DJNZ R5,$;60us ;*****************
MOV R5,#10;1us SETB P3.3 ;1μs MOV R6 , #5 ;1μs
DJNZ R6 , $ ;执行5 次×2μsP次= 10μs
28
FS0:
青岛农业大学机电工程学院本科毕业设计(论文)
NOP ;1us CLR P3.3 ;1μs MOV R6 , #4 ;1μs DJNZ R6 , $ ;8μs NOP ;1us DJNZ R5 ,FS0;2μs RET ;2us
4.2.2 接收子程序
接收程序中要解决的问题是如何正确的解出码值,这是接收程序的主要任务。另外需要注意的是红外一体化接收头HS0038输出的时序与输入是相反的,理解好这一点,是设计好解码程序的关键。
1、解码子程序 EEX0: CLR EA
CLR EX0
MOV R5,#8 ;接收8 位 ;MOV P2,#02H
;JB P3.2 ,$ ;等待同步帧,同步帧为低电平
MOV R7,#15 ; 同步帧(低电平) 到来后,延时等待15 个脉冲的时间 LCALL DELAY1 ; 调用子程序DELAY1,产生26μs 的延时 JB P3.2,Z1;延时15 个脉冲后,若P1. 0= 1 ,转JIES 重新检测
JNB P3.2 ,$ ;延时15 个脉冲后,若P1. 0 还是0 ,传输开始,再等编码中的高电
J1: 平
GO:
MOV R7 , #15 ; 编码中的高电平到来后,延时15 个脉冲的时间 LCALL DELAY1
JNB P3.2, RE1 ;延时15个脉冲后,P1. 0 = 0转RE1 ,P1. 0 = 1 顺执行 CLR C ; P1. 0 = 1 时应解码为0 ,使标志C 清0 RLC A ;把标志C = 0 移入寄存器A中,经8 次移位到A 的高位 JB P3.2 , $ ;跳过后续高电平 JNB P3.2 , $ ;再跳过后续低电平 LJMP NEXT ;转接收下一位
29
RE1 : SETB C ;P1. 0 = 0 时应解码为1 ,使标志C 置1
共分享92篇相关文档