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

📄 ir_lcm_0k.a51

📁 NEC制红外遥控编码解码+LCM44780 LCM显示驱动
💻 A51
字号:
      ORG 0000H
      AJMP 0100H


;cycle=12/f=(12/12)us
      ORG 0100H
      MOV 1CH,#0FFH     ;CODE REGISTER
      mov 1ah,#0FFh
      mov 1bh,#0FFh
      mov 1dh,#0FFh
      MOV R7,#00H      ;?????
START:MOV P0,#0FFH
      MOV P1,#0FFH
      MOV P2,#0FFH
      MOV P3,#0FFH
;XXXXXXXXXXXXXXXXXXXXXXX
;X LCM44780 DISPLAY    X
;XXXXXXXXXXXXXXXXXXXXXXX
START1:
    
    RS EQU P0.0
    RW EQU P0.1
    E EQU P0.2
    mov p0,#0ffh
    MOV P2,#01H ;清除屏幕
    ACALL ENABLE
    MOV p2,#38H ;8位点阵
    ACALL ENABLE

    MOV p2,#06H ;移动光标/进入模式设定
    ACALL ENABLE
    MOV p2,#80H ;显示位置
    MOV P2,#01H ;清除屏幕
    ACALL ENABLE
    MOV p2,#0FH ;开显示
    ACALL ENABLE
l3: mov p2,#01h  ;清屏
    call enable

    mov p2,#0c0h   ;   设置显示在第一行
    acall enable
    mov p2,#01h

    ACALL ENABLE
    mov dptr,#table2 ;送第一句话
    acall write1
    mov p2,#0c2h     ;显示在第二行
    acall enable
    mov p2,#0a8h
    acall enable 
    mov dptr,#table1
    mov a,1ah        ;send 1ah data
    anl a,#0f0h
    swap a
    movc a,@a+dptr
    acall write2
    mov a,1ah
    anl a,#0fh
    movc a,@a+dptr
    acall write2
    mov a,1bh        ;send 1bh data
    anl a,#0f0h
    swap a
    movc a,@a+dptr
    acall write2
    mov a,1bh
    anl a,#0fh
    movc a,@a+dptr
    acall write2
    mov a,1ch        ;send 1ch data
    anl a,#0f0h
    swap a
    movc a,@a+dptr
    acall write2
    mov a,1ch
    anl a,#0fh
    movc a,@a+dptr
    acall write2
    mov a,1dh        ;send 1dh data
    anl a,#0f0h
    swap a
    movc a,@a+dptr
    acall write2
    mov a,1dh
    anl a,#0fh
    movc a,@a+dptr
    acall write2

    
;XXXXXXXXXXXXXXXXXXXXXXXXX
int0: jb p3.2,int0
      MOV R6,#0AH
SB:   ACALL YS1          ;调用882微秒延时子程序
      JB P3.2,exit       ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
      DJNZ R6,SB         ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
      JNB P3.2,$         ;等待高电平避开9毫秒低电平引导脉冲
      ACALL YS2          ;延时4.74毫秒避开4.5毫秒的结果码
      JB P3.2,EXIT
      MOV R1,#1AH
      MOV R2,#4
PP:   MOV R3,#8
JJJJ: JNB P3.2,$
      LCALL YS1
      MOV C,P3.2
      JNC UUU
      JB P3.2,$
UUU:  MOV A,@R1
      RRC A
      MOV @R1,A
      DJNZ R3,JJJJ
      INC R1
      DJNZ R2,PP
      MOV A,1AH
      XRL A,#00000000B
      JNZ EXIT
      MOV A,1BH
      XRL A,#11111111B
      JNZ EXIT
      MOV A,1CH
      CPL A
      XRL A,1DH
      JNZ EXIT

;XXXXXXXXXXXXXXXXXXXXXXXXX
AA:   MOV R1,#25
XX:   ACALL YS2
      JNB p3.2,HH
      DJNZ R1,XX
EXIT:  setb p3.2
       ajmp start1
HH:  MOV R6,#4
S:   ACALL YS1
     JB P3.2,EXIT
     DJNZ R6,S
     JNB P3.2,$
     ACALL YS3
     AJMP AA



;xxxxxxxxxxxxxxxxxxxxxxxxx

;YS1
YS1:  MOV R4,#20       ;DELAY 882US
D1:   MOV R5,#20
      
D11:  
      DJNZ R5,D11
      DJNZ R4,D1
      RET

;YS2
YS2:  MOV R4,#10       ;DELAY 4740US
D2:   MOV R5,#235
      
      DJNZ R5,$
      DJNZ R4,D2
      RET

YS3: MOV R4,#2         ;DELAY 1000US
DD3: MOV R5,#248
     DJNZ R5,$
     DJNZ R4,D3
     RET

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENABLE: ;送命令
   CLR RS      ;rs=0 send command
   CLR RW
   CLR E
   ACALL DELAY
   SETB E
   RET
write1:            ;送字符串
   mov r1,#00h
a1:mov a,r1
   movc a,@a+dptr
   call write2
   inc r1
   cjne a,#3ah,a1 ;以3aH做字符串结束标志
   ret
write2:           ;送单个字符
   mov p2,a
   setb rs        ;rs=1 send data
   clr rw
   clr e
   call delay
   setb e
   ret
delay:            ;延时子程序

d3:mov r7,#10
dd1:mov r6,#255
dd2:nop
   nop
   nop
   nop
   nop
   djnz r6,dd2
   djnz r7,dd1
   ret

table1: db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46h
table2: db 54h,48h,49h,53h,20h,4bh,45h,59h,20h,43h,4fh,44h,45h,3ah
end



    

⌨️ 快捷键说明

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