OMEN 2005/1/16于TCL
***************************************************************
A_BIT EQU 20H 数码管个位数存放内存位置
B_BIT EQU 21H 数码管十位数存放内存位置
NO_OUT EQU 24H 最终控制号码存放单元
A_NO EQU 25H 数码管个位数对应代码存放内存位置
B_NO EQU 26H 数码管十位数对应代码存放内存位置
22H,23H为控制码及其反码的存放单元
*******************<<主程序>>***********************************
ORG 0000H
AJMP 0030H
ORG 0003H 外部中断P3.2脚INT0入口地址
AJMP INT 转入外部中断服务子程序(解码程序)
ORG 0030H
AJMP MAIN 转入主程序
***************************************************************
MAIN: MOV NO_OUT,#0H
SETB EA 打开CPU总中断请求
SETB IT0 设定INT0的触发方式为脉冲负边沿触发
SETB EX0 打开INT0中断请求
LOOP: MOV A,NO_OUT将按键的键值通过P1口的8个LED显示出来!
CPL A由于P1发光二极管显示的是电平的反状态,所以取反
MOV P1,A 发光二极管显示输出
LCALL DISPLAYLED数码管显示输出
AJMP LOOP循环
********************<<中断接受遥控程序>>************************
以下为进入P3.2脚外部中断子程序,也就是解码程序
INT:
PUSH ACC
PUSH PSW 将PSW和ACC推入堆栈保护
CLR EA 暂时关闭CPU的所有中断请求
MOV R6,#10
SB: LCALL DL865调用865微秒延时子程序
JB P3.2,EXIT延时865微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R6, SB重复10次,卖橡渗目的是检测在8650微秒内如果出现高电平就退出解码程序
以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.2, $ 等待高电平避开9毫秒低电平引导脉冲
LCALL DL4737 延时4.74毫秒避开4.5毫秒的结果码
MOV R7,#16忽略前26位系统识别码
JJJJA:JNB P3.2,$等待地址码第一位的高电平信号
LCALL DL865高电平开始后用865微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.2将P3.2引脚此时的电平状态0或1存入C中
JNC UUUA如果为0就跳转到UUUA
LCALL DL1000检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUUA: DJNZ R7,JJJJA
MOV R1,#22H 设定22H为起始RAM区
MOV R2,#2接收从22H到23H的2个内存,用于存放 *** 作码和 *** 作反码
PP: MOV R3,#8每组数据为8位
JJJJ: JNB P3.2,$等待地址码第一位的高电平信号
LCALL DL865高电平开始后用865微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.2将P3.2引脚此时的电平状态0或1存入C中
JNC UUU如果为0就跳转到UUU
LCALL DL1000检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUU: MOV A,@R1将R1中地址的给A
RRC A将C中的值0或1移入A中的最低位
MOV @R1,A将A中的数暂时存放在R1数值的内存中
DJNZ R3,JJJJ接收满8位换一个内存
INC R1对R1中的值加1,换下一个RAM
DJNZ R2,PP 接收完8位数据码和8位数据反码,存放在22H/23H中
MOV A,22H
CPL A对22H取反后和23H比较
CJNE A,23H,EXIT如果不等表示接收数据发生错误,放弃
MOV A,22H
MOV NO_OUT,A
LCALL EEPROM_C 清除以前的保存的码
LCALL DL4737
LCALL EEPROM_W 把码存在单片机内部的EEPROM里
LCALL DL4737
CLR P3.6蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
LCALL DL4737
LCALL DL4737
LCALL DL4737
SETB P3.6蜂鸣器停止
lcall DL4737
EXIT: SETB EA 允许中断
POP PSW
POP ACC 将PSW和ACC推入堆栈保护
RETI 退出解码子程序
*******************<<LED数码管显示子程序>>**********************
DISPLAY:
MOV A,NO_OUT 将NO_OUT分成个位和16位
ANL A,#0FH 取低四位放在a_bit
MOV A_BIT,A 个位
MOV A,NO_OUT
RR A
RR A
RR A
RR A 四次移动,把高四位移到低四位
ANL A,#0FH取高四位放在B_bit
MOV B_BIT,A 个位在b
MOV DPTR,#NUMTAB 指定查表启始地址
MOV A,A_BIT 取个位数
MOVC A,@A+DPTR 查个位数的7段代码
MOV A_NO,A
MOV A,B_BIT 取十位数
MOVC A,@A+DPTR 查十位数的7段代码
MOV B_NO,A
DPLOP:MOV A,A_NO
MOV P0,A 送出个位的7段代码
SETB P2.1关闭十位显示,防止鬼影
CLR P2.0 开个位显示
LCALL DL40 显示4737微秒
SETB P2.0关闭个位显示,防止鬼影
MOV A,B_NO
MOV P0,A 送出十位的7段代码
CLR P2.1 开十位显示
LCALL DL40 显示4737微秒
SETB P2.1关闭十位显示,防止鬼影
RET
**********************<<延时程序>>******************************
DL865: MOV R4,#12 1.09*(2R5+4)*R4+2延时子程序1,精确延时865微秒
D1: MOV R5,#31
DJNZ R5,$
DJNZ R4,D1
RET
DL4737: MOV R4,#12 延时子程序2,精确延时4737微秒
D2: MOV R5,#179
DJNZ R5,$
DJNZ R4,D2
RET
DL1000: MOV R4,#17延时程序3,精确延时1000微秒
D3: MOV R5,#25
DJNZ R5,$
DJNZ R4,D3
RET
DL40: MOV R4,#1延时程序4,精确延时40/17微秒
D4: MOV R5,#1
DJNZ R5,$
DJNZ R4,D4
RET
****************************************************************
如果是共阳数码管的显示代码 1-F 16个代码
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH STC新板的
END
红外遥控电子密码锁程序ORG0000H ;主程序
CLR P1.7 清零
MOVRO, #OOH
CLR P1.3 关报警
CLR P1.7 P1.7清零
CLR P1.4关报警
MOV RO,#OOH 串行口初始化
MOV 52H, #02H 将立即数02H送52H
MOV TMOD , #20H 设置T1工作方式2
MOV TL1,#OF4H 定时初始值送TL1
MOV TH1,#OF4H 定时初始值送TH1
SETBTR1 启动定时器T1
MOV SCON,#ODOH定义串行行工作方式3
MOV PCON , #OOH
KEY: JNB P1.5 , KEP1 选择密码57618
LJMP KEP2
*******************************************************密码57618程序
KEP1: MOV P2 ,#0FFH 关显示
MOV A , P0 判断是否有键按磨乱春下
CPL A 对P0口的数据取反
ANL A , #OFFH立即数OFF 与PO的数据相与
JNZ JP有陪氏键按下转至JP
MOV A , P1 判断是否有键盘按下
CPL A 将P1口的数据取反
ANL A ,#O7H 累加器数据为零转遥控接收程序
JZWAIT
ACALL D10MS 调用10秒延时瞎耐
MOV A , P1
CPL A
ANL A ,#O7H
JZWAIT
PP1:CJNE A , #01H ,JP1
MOV P2 , #89H 显示字符”H”
LJMP K0P1
PP2:CJNE A , #02H ,JP2
MOV P2 , #89H 显示字符”H”
LJMP KOP1
JP2:CJNE A , #04H,KY
MOV P2 ,#89H 显示字符”H”
JP3:MOV A , #O7H
CJNEA , #07H ,JP3
LJMPLP1
KOP1:MOV A ,P1
ANL A, #07H
CJNE A , #07H ,KOP1
LJMP KEP1
JP: LCALL D10MS
MOV A , PO
CPLA,
ANL A,#OFFH
JZ C6
CJZE A ,#01H ,KEY02
MOV P2, #89H
LJMPKEY1
KEY02: CJNE A ,#02H ,KEY03
MOV P2,#89H
LJMP KJP1
KEYO3: CJNE A , #04H, KEY04
MOV P2 ,#89
LJMP KJP1
KEY04: CJZE A , #08H, KEY05
MOV P2 ,#89H
LJMP KJP1
KEY05: CJZE A , #10H, KEY06
MOV P2 ,#89H
LJMP KJP1
KEY06: CJZE A , #08H, KEY07
MOV P2 ,#89H
LJMP KJP1
KEY07 CJZE A , #10HKEY08
MOV P2 ,#89H
LJMP KJP1
KEY08 CJZE A , #10H, C6
MOV P2 ,#89H
LJMP KJP1
KJP1: MOV A, P0
CJNE A , #OFFH ,KJP1
C6: LJMP WAIT
********************************************************************
KEY1: LCALL MP
CJNE A , #02H , KEY03
MOVP2 , #89H
KEY2 LCALL MP
CJNE A , #04 , KEY02
MOVP2 , #89H
KEY3 LCALL MP
CJNE A , #08 , KEY02
MOVP2 , #89H
KEY4 LCALL MP
CJNE A , #10H, KEY02
MOVP2 , #89H
KEY5 MOV A ,P0
CJNE A , #0FFH, KEY5
MOVP2 , #OFFH
MOVR5 ,#30H
KEY6: MOV A , PO
CPL A
ANL A , #OFFH
JNZ BB2
MOV A ,P1
CPL A
ANL A , #O7H
JZ BB1
LCALL D10MS
MOV A, P1
CPL A
ANLA ,#07H
JZ
CJNE A ,#04H ,B1
MOVP2 , #89H
LJMP LP2
B1: CJNE A, #01H ,BL1
MOV P2 ,#89H
LJMP KOP1
BL1: CJNEA , #02H ,BB1
MOV P2, #89H
LJMP KOP1
BB2: LCALLD10MS
MOV A , P0
CPL A
ANL A , #OFFH
JZ BB1
LJMP KEY02
BB1: MOV R7,#OC8H
BB4: MOV R6 ,#OF9H
NOP
NOP
BB5: JNZR6 ,BB5
DJNZ R7, BB4
DJNZ R5 , KEY6
LJMP WAIT
************************************************************密码81675程序
KEP2: MOV P2 ,#OFFH 关显示
MOV A ,PO
]CPLA
ANL A , #OFFH
JNZ HP
MOVA ,P1
CPL A
ANLA , #07H
JZ C9
LCALL D1OMS
MOV A ,P1
CPLA
ANL A ,#07H
JZ C9
BB: CJNE A , #O1H ,HP1
MOVP2 ,#89H
LJMP K1P1
HP1: CJNE A ,#02H ,HP2
MOV P2 ,#89H
LJMP K1P1
HP2: CJNE A ,#04H ,C9
MOVP2, #89H
HP3: MOVA ,P1
ANLA,#07H
CJNEA ,#07H ,HP3
MOV P2 ,#OFFH
LJMP LP1
K1P1 : MOV A ,P1
ANL A ,#O7H
CJNEA ,#07H,K1P1
C9:LJMP WAIT
HP:LCALL D1OMS
MOV A , PO
CPLA
ANL A ,#OFFH
JZ C9
CJNE A , #1OH,K0Y02
MOV P2 ,#89H
LJMP K0Y1
K0Y02: CJNE A,#01H ,K0Y03
MOV P2 ,#89H
LJMP KUP1
K0Y03 CJNE A,#02H ,K0Y04
MOV P2 ,#89H
LJMP KUP1
K0Y04 CJNE A,#04H ,K0Y05
MOV P2 ,#89H
LJMP KUP1
K0Y05 CJNE A,#08H ,K0Y06
MOV P2 ,#89H
LJMP KUP1
K0Y06CJNE A,#20,K0Y07
MOV P2 ,#89H
LJMP KUP1
K0Y07 CJNE A,#40,K0Y08
MOV P2 ,#89H
LJMP KUP1
K0Y08 CJNE A,#80,U2
MOV P2 ,#89H
LJMP KUP1
KUP1: MOVA ,PO
CJNE A ,#OFFH ,KUP1
U2: LJMP WAIT
K0Y1: LCALL MP
CJNE A #08H ,K0Y02
MOV P2 ,#89H
K0Y2 LCALL MP
CJNE A #04 ,K0Y02
MOV P2 ,#89H
K0Y3 LCALL MP
CJNE A #02 ,K0Y02
MOV P2 ,#89H
K0Y4 LCALL MP
CJNE A #01H ,K0Y02
MOV P2 ,#89H
K0Y6: MOV A ,PO
CPL A
ANL A,#OFFH
JNZ PP2
MOVA , P1
CPLA
ANLA ,#07H
JZPPL
LCALL D10MS
MOV A , P1
CPLA
ANL A ,#07H
JZ PP1
CJNE A ,#04H ,Y1
MOV P2 , 389H
LJMP LP2
Y1:CJNE A ,#01H ,Y11
MOV P2 ,#89H
LJMP K1P1
Y11:CJNE A , #02H ,PP1
MOV P2 ,#89H
LJMP K1P1
PP2:LCALL D10MS
MOV A,PO
CPLA
ANL A ,#OFFH
JZ PP1
LJMP K0Y02
PP1:MOVR7,#OC8H
PP4:MOV R6 , #OF9H
NOP
NOP
PP5: DJNZ R6 ,PP5
DJNZR7 ,PP4
DJNZ R5 ,K0Y6
LJMP WAIT
*****************************************************报警程序
LP1: SETBP1.4
INC RO
P019: MOV R3 ,#05H
P020:MOV R7 ,#0A0H
P018: SETB P1.3
LCALLP01A
CLR P1.3
LCALL P01A
DJNZ R7,P018
DJNZR3,P020
CLR P1.3
CJNER0 , #03H ,P017
LJMP P019
P017: CLRP1.4
LJMPWAIT
****************************************************开锁程序
LP2:SETB P1.7
LCALLT5S
CLR P1.7
MOV R0,#00H
LJMP WAIT
******************************************************判断键是否释放
MP: MOVA ,PO
CJNE A ,#OFFH ,MP
MOV P2,#OFFH
PM: MOV R5 ,#30H
LCALL TP
RET
******************************************************判断是否有键按下
TP: MOVA ,PO
CPLA
ANL A , #OFFH
JNZ AP
MOVA ,P1
CPL A
ANL A, #O7H
JZ TP3
LCALL D10MS
MOV A , P1
CPL A
ANL A , #07H
JZTP3
LCALLD10MS
MOV A ,P1
CPL A
ANL A,#07H
JZTP3K
CJNEA,#04H ,C1
MOV P2,#89H
C3: MOV A P1
ANL A , #07H
CJNE A #07H,C3
MOV P2,#0FFH
LJMP LP1
C1: CJNE A ,#01H ,C2
MOV P2 ,#OCOH
LJMP KCP1
C2: CJNE A ,#02 ,U11
MOV P2 ,#90HP
LJMP KCP1
KCP1: MOV A, P1
ANLA ,#07H
CJNE A ,#07H ,KCP1
U11: LJMP WAIT
AP: LCALL D10MS
MOVA ,P0
CPL A
ANL A , #0FFH
JZ TP3
RET
************************************************************400M延时程序
TP3: MOV R7 ,#OC8H
TP1: MOV R6, #OF9H
NOP
NOP
TP2:DJNZ R6 , TP2
DJNZ R7 ,TP1
DJNZ R5,TP 10S
LJMPWAIT
*********************************************************10延时程序]
D10MS : MOV R7,#05H
LOOP1: MOV R6,#OF9H
NOP
NOP
LOOP2: DJNZ R6 , LOOP2
DJNZR7 ,LOOP1
RET
*****************************************************延时程序
P01A: MOVR2 ,#06H
LCALL DELY
RET
DELY: PUSH 02H
DEL2 : PUSH 02H
DEL3 : PUSH 02H
DEL4: DJNZ R2, ,DEL4
POP O2H
DJNZ R2 ,DEL3
POP O2H
DJNZ R2 ,DEL2
POP O2H
DJNZ R2 ,DELY
RET
******************************************************5S 延时程序
T5S:MOV R4 ,#15H
TS1:MOV R3 ,#64H
TS2:MOV R2 ,#05H
TS3:MOV R1 , #OF9H
NOP
NOP
T5S4 DJNZ R1 ,TS4
DJNZ R2,TS3
DJNZ R3,TS2
DJNZ R4,TS1
RET
3、遥控发送程序
ORG 0000H
LOOPO: MOV SCON ,#0C0H 设定串行口工作方式3
MOVTMOD , #20H T1工作方式2
MOV PCON , #00H 波特率设置
MOV TL1 , #OF4H 定时初始值F4送TL1
MOV TH1, #OF4H定时初始值F4送TH1
*******************************************************************
CP:JB P1.0 ,CPK 判断遥控按键P1.0是否按下
LCALL PP 调用延时
JBP1.0 , CP
STEB TR1启动定时器T1
MOV50H,#5FH将立即数5FH 送50H 存储单元
MOV RO,#50H 将立即数50H 送RO寄存器
MOVR1,#05H 将立即数05H送R1寄存器
IND: MOV A,@R0 将50H中的5F送累加器A
MOV C, P
MOV TB8,C
MOVSBUF,A 将要发送数据5F送串行数据缓冲器
AAA : JNB P1.1,ON1 P1.1是”0”电平时转至调制程序
BBB”JB P1.1,CCC P1.1是”1”电平等待
AMP AAA
CCC :JBC TI ,CP判断发送中断标志位]
SETB P1.2 P1.2置1
AJMP BBB
ON1:ACALL ON
AJMP AAA
PP: MOV R6, #05H 延时子程序
100P3:MOV R5, #OF9H
NOP
NOP
100P4: DJNZ R5,100P4
DJNZ R6 ,100P3
RET
ON: CP1 P1.2 0电平调制程序
。。。。。。。。。。。。。。(共有82个CP1 P1.2)
RET
********************************************************************
4、遥控接收程序
WAIT: JBC R1 ,LOOP5 遥控接收程序
LJMP KEY
LOOP5: MOV R0 ,#51H 将立即数51H送R0
MOV R7 ,#03H 将立即数03H送R7
LOOP6: MOV A,SBUF 将串行缓冲器接收到的数据累加器A
JNBPSW.0 LOOP7标志位F0清零了吗?
JNBRB8 ,LOOP8 数据接收完了吗?
LOOP9 MOV@RO ,A 开锁处理程序
MOV R1 , 51H
CJNE R1 ,#1EH ,LP
DJNZ 52H , KP
CLR P1.7
MOV 52H ,# 02H
MOV R0 ,#OOH
LJMP WAIT
KP: SETB P1.7
MOVR0,#00H
LJMP WAIT
LP: DJNZ R7 ,WAIT
CLRPSW.5
LJMPWAIT
LOOP7: JB RB8 , LOOP8
LJMP LOOP9
LOOP8:SETB PSW.5 给标志位F0置1
LJMP WAIT ;继续接收数据
参考下!
方案一:采用频分橡物制多通道红外遥控发射和接收系统。频分制的频率编码一般采用频道编码开关,通过改变振荡电路的参数来改变振荡电路的振荡参数和频率。当按下不同的编码键时,振荡器就会输出不同频率的指令信号。这些指令信号经驱动级放大后对高频载波进行调制,并驱动红外发光管发出红外光脉冲信号。红外接收控制电路的组成框图包括红外接收光电转换器、前置放大器、频率译码电路、驱动级和执行机件等。当红外光电检测器接收到发射器发来的红外编码指令后,光电检测管随即将其转换成相应的电信号,再经过前置电压放大器放大后,加至频率译码电路和选频电路,选出不同指令的频率信号,并加至相应的驱动级及执行机件。对应每一频率的指令信号,应有一个相应的选频电路。
在频分制红外遥控电路中,代表控制指令信号的频率一般为几百赫兹至几十千赫兹。发射电路中的频率编码开关的位号应与接收电路中的选频电路的位号相对应,以选出不同频率的指令信号。
红外接收、译码电路由族旁红外接收器、前置放大器、解调器、指令译码器、记忆和驱动级组成。红外光电二极管将接收到的红外光信号转变成相应的电脉冲信号,再经高倍数电压放大后加至解调器进行解调,然后由指令译码器解码出指令信号。指令译码器是与指令编码器相对应的译码器,用于脉冲指令信号译出。译出的指令信号加至相应的记忆和驱动级,驱动执行机件动作,实现红外光遥控。
方案二:采用码分制多通道红外遥控发射和接收系统。码分制的遥控指令信号是由编码脉冲发生器(一般由数字集成电路和少量外围元件组成)产生的。码分指令是用不同的脉冲数目或不同宽度的脉冲组合而成的。
指令编码器由基本脉冲发生电路和指令编码开关组成。当按下S1—Sn中的某个指令键时,指令编码器将产生不同编码的指令信号。该编码信号经调制器调制后变为编码脉冲调制信号,再经驱动电路功率放大后加至红外发射级,驱动红外发射管发出红外编码脉冲光信号。
方案一:采用频分制多通道红外遥控系统。主要用在单通道或者几通道的红外遥控系统中。能够形成一个无线的短距离的遥控系统。主要由发射和接收并执行两部分组成。先是发射部分,用户根据需要按下功能键,在经过编码后通过红外发光二极管发射出信号。经过无线传输后,接收部分接收到发射信号,然后经过芯片内部译码并执行对应遥控路上的发光二极管发光
方案二:采用码分制多通道红外遥控系统。主要用在多通道的红外遥控系统中,遥控系统抗干扰强。能够形成一个无线的中距离的遥控系统。主要由发射和接收并执行两部分组成。用户根据需要按下功能键,先是指令编码器进行编码,在进行信号调制,在由红外发光二极管发射出信号,经过无线传输后,接收部分梁穗液接收到发射信号,先经过信号处理,在通过单片机软件译码,查表控制对应遥控路上的发光二极管发光
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)