微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 分享个单机片红外线遥控器源码,有不足的希望大家指出

分享个单机片红外线遥控器源码,有不足的希望大家指出

时间:10-02 整理:3721RD 点击:

  1.  ORG   0000H

  2. MAIN:  MOV   SP,#60H
  3.     MOV   P0,#0FFH
  4.     MOV   P1,#0FFH
  5.     MOV   P2,#0FFH
  6.     MOV   P3,#0FFH
  7.     JNB   P3.2,$    ;等待遥控信号出现
  8.     MOV   R6,#10
  9. SB:   ACALL  YS1      ;调用882微秒延时子程序
  10.     JB   P3.2,MAIN   ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
  11.     DJNZ  R6, SB    ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
  12.                ;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
  13.     JNB   P3.2, $    ;等待高电平避开9毫秒低电平引导脉冲
  14.     ACALL  YS2      ;延时4.74毫秒避开4.5毫秒的结果码
  15.     MOV   R1,#1AH    ;设定1AH为起始RAM区
  16.     MOV   R2,#4

  17. PP:   MOV   R3,#8
  18. JJJJ:  JNB   P3.2,$    ;等待地址码第一位的高电平信号
  19.     LCALL  YS1      ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
  20.     MOV   C,P3.2    ;将P3.2引脚此时的电平状态0或1存入C中
  21.     JNC   UUU      ;如果为0就跳转到UUU
  22.     JB   P3.2,$    ;如果为1就等待高电平信号结束
  23. UUU:   MOV   A,@R1     ;将R1中地址的给A
  24.     RRC   A       ;将C中的值0或1移入A中的最低位
  25.     MOV   @R1,A     ;将A中的数暂时存放在R1中
  26.     DJNZ  R3,JJJJ    ;接收地址码的高8位
  27.     INC   R1      ;对R1中的值加1,换成下一个RAM
  28.     DJNZ  R2,PP     ;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH的RAM中
  29.                ;以下对代码是否正确和定义进行识别
  30.     MOV   A,1AH     ;比较高8位地址码
  31.     XRL   A,#00000000B ;判断1AH的值是否等于00000000,相等的话A为0
  32.     JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
  33.     MOV   A,1BH     ;比较低8位地址
  34.     XRL   A,#11111111B ;再判断高8位地址是否正确
  35.     JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
  36.     MOV   A,1CH     ;比较数据码和数据反码是否正确?
  37.     CPL   A
  38.     XRL   A,1DH     ;将1CH的值取反后和1DH比较 不同则无效丢弃,核对数据是否准确
  39.     JNZ   MAIN     ;如果不相等说明解码失败退出解码程序
  40.     LCALL  SOUND     ;解码成功,声音提示
  41.     MOV   A,1AH
  42.     CPL   A
  43.     MOV   P1,A     ;遥控码十六进制值通过P1口LED显示出来

  44. ;-------- 下面为0~9键码判断并在实验板的5位数码管中显示键值 --------
  45. JZPD:  MOV   A,1AH
  46. IRD0:  CJNE  A,#00H,IRD1  ;按键"0"判断显示
  47.     MOV   P0,#0C0H
  48.     MOV   P2,#11100000B
  49.     AJMP  MAIN
  50. IRD1:  CJNE  A,#01H,IRD2  ;按键"1"判断显示
  51.     MOV   P0,#0F9H
  52.     MOV   P2,#11100000B
  53.     AJMP  MAIN
  54. IRD2:  CJNE  A,#02H,IRD3  ;按键"2"判断显示
  55.     MOV   P0,#0A4H
  56.     MOV   P2,#11100000B
  57.     AJMP  MAIN
  58. IRD3:  CJNE  A,#03H,IRD4  ;按键"3"判断显示
  59.     MOV   P0,#0B0H
  60.     MOV   P2,#11100000B
  61.     AJMP  MAIN
  62. IRD4:  CJNE  A,#04H,IRD5  ;按键"4"判断显示
  63.     MOV   P0,#99H
  64.     MOV   P2,#11100000B
  65.     AJMP  MAIN
  66. IRD5:  CJNE  A,#05H,IRD6  ;按键"5"判断显示
  67.     MOV   P0,#92H
  68.     MOV   P2,#11100000B
  69.     AJMP  MAIN
  70. IRD6:  CJNE  A,#06H,IRD7  ;按键"6"判断显示
  71.     MOV   P0,#82H
  72.     MOV   P2,#11100000B
  73.     AJMP  MAIN
  74. IRD7:  CJNE  A,#07H,IRD8  ;按键"7"判断显示
  75.     MOV   P0,#0F8H
  76.     MOV   P2,#11100000B
  77.     AJMP  MAIN
  78. IRD8:  CJNE  A,#08H,IRD9  ;按键"8"判断显示
  79.     MOV   P0,#80H
  80.     MOV   P2,#11100000B
  81.     AJMP  MAIN
  82. IRD9:  CJNE  A,#09H,IRDOR  ;按键"9"判断显示
  83.     MOV   P0,#90H
  84.     MOV   P2,#11100000B
  85.     AJMP  MAIN

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

  88. YS1:   MOV   R4,#19 ;延时子程序1
  89. D1:   MOV   R5,#18
  90.     DJNZ  R5,$
  91.     DJNZ  R4,D1

  92.     RET

  93. YS2:   MOV   R4,#10 ;延时子程序2
  94. D2:   MOV   R5,#216
  95.     DJNZ  R5,$
  96.     DJNZ  R4,D2

  97.     RET

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

复制代码


我只会用C语言,汇编的还没学会,

实在看不懂呵呵

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top