基于stc89c52单片机的红外学习型遥控器

发布时间:2023-07-19  

  在智能电视、网络机顶盒(电视盒子)上,常见的主流遥控器无外乎“红外线”、“蓝牙”两种遥控方式。“蓝牙”遥控器因其“无需对准”、“可以绕弯控制”、“控制距离远”等特点近年来越来越受到厂商的重视以及消费者的青睐,然而尽管如此,仍然有大量用户坚持使用红外线遥控,原因就是现阶段很多蓝牙遥控器存在诸多缺陷及问题,影响用户日常使用操作。


  很详细的红外学习型遥控器,储存在24c64中的汇编子程序,在你自己的设计中只要修改一下IO调用它就可以了,是本人的工程验证能学习市面常用的绝大部分红外线遥控器


  用的是stc89c52单片机,下面是汇编代码:

  ;**********************************

  ;---------------------AT24C64 CODE-------------------------

  ;==========================================================

  ICSTART: ;I2C 开始

  SETB SDA

  NOP

  NOP

  NOP

  NOP

  SETB SCK

  NOP

  NOP

  NOP

  NOP

  CLR SDA

  NOP

  NOP

  NOP

  NOP

  CLR SCK

  RET

  ;==========================================================

  ICSTOP: ;I2C 结束

  CLR SDA

  NOP

  NOP

  NOP

  NOP

  CLR SCK

  NOP

  NOP

  NOP

  NOP

  SETB SCK

  NOP

  NOP

  NOP

  NOP

  SETB SDA

  RET

  ;==========================================================

  ICACK: ;I2C 应答

  CLR SDA

  NOP

  NOP

  NOP

  NOP

  SETB SCK

  NOP

  NOP

  NOP

  NOP

  CLR SCK

  RET

  ;==========================================================

  NOACK: ;I2C 无应答

  SETB SDA

  NOP

  NOP

  NOP

  NOP

  SETB SCK

  NOP

  NOP

  NOP

  NOP

  CLR SCK

  RET

  ;==========================================================

  ICREADBIT: ;I2C 读取一位

  SETB SDA

  NOP

  NOP

  NOP

  NOP

  SETB SCK

  NOP

  NOP

  NOP

  NOP

  MOV C,SDA

  CLR SCK

  RET

  ;----------------------------------------------------------

  ICREADACK:

  MOV R7,#200

  SETB SDA

  NOP

  NOP

  NOP

  NOP

  SETB SCK

  NOP

  NOP

  NOP

  NOP

  READACKS:

  JNB SDA,ACKEND

  DJNZ R7,READACKS

  SETB C

  CLR SCK

  RET

  ACKEND:

  CLR C

  CLR SCK

  RET

  ;==========================================================

  ICREADBYTE: ;I2C 读取一个字节

  MOV R7,#8

  READLOOP:

  LCALL ICREADBIT

  RLC A

  DJNZ R7,READLOOP

  MOV R7,A

  RET

  ;==========================================================

  ICWRITEBIT: ;I2C 写一位

  MOV SDA,C

  NOP

  NOP

  NOP

  NOP

  SETB SCK

  NOP

  NOP

  NOP

  NOP

  CLR SCK

  RET

  ;==========================================================

  ICWRITEBYTE: ;I2C 写一个字节

  MOV A,R7

  MOV R7,#8

  WRITELOOP:

  RLC A

  LCALL ICWRITEBIT

  DJNZ R7,WRITELOOP

  RET

  ;==========================================================

  READAT:

  MOV A,R7 ;计算I2C地址

  MOV B,#208 ;144

  MUL AB

  MOV R2,B

  MOV R3,A

  


  LCALL ICSTART ;I2C 数据读入缓冲区

  MOV R7,#0A0H ;R2R3 I2C地址

  LCALL ICWRITEBYTE ;R0 缓冲区地址

  LCALL ICREADACK ;R1 数据个数

  JNC RACKEND

  RET

  ;

  RACKEND:

  MOV A,R2

  MOV R7,A

  LCALL ICWRITEBYTE

  LCALL ICREADACK

  MOV A,R3

  MOV R7,A

  LCALL ICWRITEBYTE

  LCALL ICREADACK

  LCALL ICSTART

  MOV R7,#0A1H

  LCALL ICWRITEBYTE

  LCALL ICREADACK

  MOV R0,#LRDBUF

  MOV R1,#208 ;144

  READDATAS:

  LCALL ICREADBYTE

  LCALL ICACK

  MOV @R0,A

  INC R0

  DJNZ R1,READDATAS

  LCALL NOACK

  LCALL ICSTOP

  RET

  ;==========================================================

  WRITEAT: ;缓冲区数据写入 I2C

  MOV A,R7 ;计算I2C地址

  MOV B,#208 ;;144

  MUL AB

  MOV R2,B

  MOV R3,A

  MOV R5,#13 ;9 13*16=208

  MOV R0,#LRDBUF

  ICWRITENEXT:

  LCALL ICSTART

  MOV R7,#0A0H

  LCALL ICWRITEBYTE

  LCALL ICREADACK

  JNC WACKEND

  ;

  ;

  WACKEND:

  MOV A,R2

  MOV R7,A

  LCALL ICWRITEBYTE

  LCALL ICREADACK

  MOV A,R3

  MOV R7,A

  LCALL ICWRITEBYTE

  LCALL ICREADACK

  MOV R1,#16

  WRITEDATAS:

  MOV A,@R0

  INC R0

  MOV R7,A

  LCALL ICWRITEBYTE

  LCALL ICREADACK

  DJNZ R1,WRITEDATAS

  LCALL ICSTOP

  MOV R7,#250

  DELAY_D:

  MOV R6,#20

  DJNZ R6,$

  DJNZ R7,DELAY_D

  MOV A,R3

  ADD A,#16

  MOV R3,A

  MOV A,R2

  ADDC A,#0

  MOV R2,A

  DJNZ R5,ICWRITENEXT

  RET

  ;*****************************************************************

  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  LRDREAD:

  ;红外代码读取

  MOV R0,#LRDBUF ;代码缓冲区清零

  MOV R1,#208 ;144

  CLR A

  CLRLRDBUF:

  MOV @R0,A

  INC R0

  DJNZ R1,CLRLRDBUF

  MOV R0,#LRDBUF

  SETB LRDR

  LRDTEST:

  SETB TR2

  SETB ES ;红外代码起始检测

  JB RI,LLOOP ;这里是检测有键按下时。。。。。。

  CLR TR2

  JNB LRDR,READSTART

  JB HWXX,LRDTEST ;红外学习标志位

  LJMP LLLOOP

  LLOOP: ;

  CLR RI

  MOV A,SBUF

  MOV R0,#250

  MOV R1,#250

  LP4: JB RI,LP3

  DJNZ R0,LP4

  DJNZ R1,LP4

  LJMP LRDTEST

  LP3: CLR RI

  CLR ES

  MOV A,SBUF

  MOV A,#00H

  LP2:

  CLR HONGWAI ;红外按钮标志位

  CLR P3.3

  CLR HWXX

  MOV SBUF,#37H

  JNB TI,$

  CLR TI

  DEC SP

  DEC SP

  LJMP LOOP

  LLLOOP: RET

  ;--------------------------------------

  READSTART:

  CLR EA

  ;SETB P0.6

  MOV TH1,#0

  MOV TL1,#12

  SETB LRDR

  ;--------------------------------------

  READLOOP_S:

  SETB TR1

  CLR TF1

  TEST_LRDR:

  MOV A,TH1

  JB TF1,LRDOVER

  JNB LRDR,TEST_LRDR

  CLR TR1 ;


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>