⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 读码器.txt

📁 READING CODE TESTER
💻 TXT
字号:
ORG   0000H 
MAIN:  MOV   SP,#60H
    MOV   P0,#0FFH
    MOV   P1,#0FFH
    MOV   P2,#0FFH
    MOV   P3,#0FFH
    JNB   P3.2,$    ;等待遥控信号出现
    MOV   R6,#10
SB:   ACALL  YS1      ;调用882微秒延时子程序
    JB   P3.2,MAIN   ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
    DJNZ  R6, SB    ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
               ;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
    JNB   P3.2, $    ;等待高电平避开9毫秒低电平引导脉冲
    ACALL  YS2      ;延时4.74毫秒避开4.5毫秒的结果码
    MOV   R1,#1AH    ;设定1AH为起始RAM区
    MOV   R2,#4 
PP:   MOV   R3,#8
JJJJ:  JNB   P3.2,$    ;等待地址码第一位的高电平信号
    LCALL  YS1      ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
    MOV   C,P3.2    ;将P3.2引脚此时的电平状态0或1存入C中
    JNC   UUU      ;如果为0就跳转到UUU
    JB   P3.2,$    ;如果为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     ;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
               ;以下对代码是否正确和定义进行识别
    MOV   A,1AH     ;比较高8位地址码
    XRL   A,#00000000B ;判断1AH的值是否等于00000000,相等的话A为0
    JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
    MOV   A,1BH     ;比较低8位地址
    XRL   A,#11111111B ;再判断高8位地址是否正确
    JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
    MOV   A,1CH     ;比较数据码和数据反码是否正确?
    CPL   A
    XRL   A,1DH     ;将1CH的值取反后和1DH比较 不同则无效丢弃,核对数据是否准确
    JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
    LCALL  SOUND     ;解码成功,声音提示
    MOV   A,1AH
    CPL   A
    MOV   P1,A     ;遥控码十六进制值通过P1口LED显示出来

;-------- 下面为0~9键码判断并在实验板的5位数码管中显示键值 --------
JZPD:  MOV   A,1AH
IRD0:  CJNE  A,#00H,IRD1  ;按键"0"判断显示
    MOV   P0,#0C0H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD1:  CJNE  A,#01H,IRD2  ;按键"1"判断显示
    MOV   P0,#0F9H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD2:  CJNE  A,#02H,IRD3  ;按键"2"判断显示
    MOV   P0,#0A4H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD3:  CJNE  A,#03H,IRD4  ;按键"3"判断显示
    MOV   P0,#0B0H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD4:  CJNE  A,#04H,IRD5  ;按键"4"判断显示
    MOV   P0,#99H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD5:  CJNE  A,#05H,IRD6  ;按键"5"判断显示
    MOV   P0,#92H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD6:  CJNE  A,#06H,IRD7  ;按键"6"判断显示
    MOV   P0,#82H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD7:  CJNE  A,#07H,IRD8  ;按键"7"判断显示
    MOV   P0,#0F8H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD8:  CJNE  A,#08H,IRD9  ;按键"8"判断显示
    MOV   P0,#80H
    MOV   P2,#11100000B
    AJMP  MAIN
IRD9:  CJNE  A,#09H,IRDOR  ;按键"9"判断显示
    MOV   P0,#90H
    MOV   P2,#11100000B
    AJMP  MAIN

IRDOR: MOV   P2,#0FFH     ;关闭数码管使能。"0~9"以外的非数字功能按键键值不采用数码管显示,直接从P1口输出键值
    AJMP  MAIN

YS1:   MOV   R4,#19 ;延时子程序1
D1:   MOV   R5,#18
    DJNZ  R5,$
    DJNZ  R4,D1 
    RET

YS2:   MOV   R4,#10 ;延时子程序2
D2:   MOV   R5,#216
    DJNZ  R5,$
    DJNZ  R4,D2 
    RET

SOUND: MOV   R7,#228 ;音效延时子程序
SDL1:  CPL   P3.7
    MOV   R6,#0FFH
SDL0:  DJNZ  R6,SDL0
    DJNZ  R7,SDL1
    RET 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -