访问电脑版页面

导航:老古开发网手机版STC单片机STC单片机的应用

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

导读:
关键字:
遥控器,STC89C52,

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

  很详细的红外学习型遥控器,储存在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 ;

  

  [1] [2]

来源:网络整理   作者:city_prolove  2018/3/15 15:09:00
栏目: [ STC单片机的应用]

相关阅读

采用STC89C51作为MCU的温湿度检测和控制系统设计

STC单片机实现电开水机自动供水的设计

STC12C5A60S2单片机老年人关怀系统实现打电话和发短信的设计

基于STC89C52单片机的温度计显示系统设计

基于STC12C5A60S2单片机对路口车流量检测系统的设计

基于STC89C52单片机为控制中心的高精度温度计显示系统设计

基于STC89C54RD单片机的高精度自动电阻测试仪设计

基于STC89S52单片机的电子万年历系统

基于STC单片机和传感器的LED智能照明控制系统

STC15F104E的STC单片机自动下载系统设计

STC12C2052单片机LED点阵电子时钟制作

STC89C52单片机对数字温度计显示系统的设计

基于STC单片机的硬件电路设计

STC单片机对逆变器的设计

基于STC12单片机的电梯防坠系统设计

低成本的STC单片机的导航授时系统设计

以STC11F32高速单片机为核心的非接触式灵活射频读卡器设计

以STC89C52单片机为核心的电子密码锁设计

以STC12C5A60S2单片机为中央处理芯片的可控电动扳手控制器设计

基于STC15w408AS的电子时钟的设计