带存储功能的学习型红外遥控器源代码

发布者:gamma14最新更新时间:2012-09-04 来源: 51hei关键字:存储功能  红外遥控器  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			       ;

    INC  R0
    MOV  A,TL1
    MOV  @R0,A
    INC  R0
    MOV  A,TH1
    MOV  @R0,A
    INC  R1			       ;红外线时间	   1
;--------------------------------------
;--------------------------------------
    MOV  TH1,#0
    MOV  TL1,#12
    SETB TR1
    CLR  TF1
    
  TESTLRD:
    MOV  A,TH1
    JB   TF1,LRDOVER
    JB   LRDR,TESTLRD     

    CLR  TR1			       
    INC  R0
    MOV  A,TL1
    MOV  @R0,A
    INC  R0
    MOV  A,TH1
    MOV  @R0,A   		       ;代码        	   2
    INC  R1 
;**************************************	
  
  TEST_DATA: 
    MOV  TH1,#0
    MOV  TL1,#12
    SETB TR1 
    CLR  TF1         

    MOV  A,R1
    SUBB A,#101  ;44H
    JC   READLOOP_S		       ;下一代码    
;--------------------------------------
 LRDOVER:
    CLR  TR1
    SETB EA
    MOV  A,R1
    MOV  LRDBUF,A                      ;代码个数缓冲
    RET 					   
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
LRD1SEND:
     CLR   EA
    MOV   R1,LRDBUF
    MOV   R0,#LRDBUF 
    MOV   A,R1
    JZ    LRD_END
    SUBB  A,#101   ;72
    JNC   LRD_END
    CLR   EA
    MOV   TH1,#0

 LRD1OUTLOOP:
    CLR   TR1
    INC   R0
    MOV   A,@R0
    CPL   A
    MOV   TL1,A     
    INC   R0
    MOV   A,@R0
    CPL   A
    MOV   TH1,A 
    SETB  TR1			       
    CLR   TF1
;--------------------------------------
  LRD1CONT:
    CPL   LRD1
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP                                ;发送红外波形  38K HZ 
    JNB   TF1,LRD1CONT      	       ;红外前导代码   	              
    CLR   LRD1     
    DJNZ  R1,SEND_DATA
    LJMP  LRD_END

 SEND_DATA:
;--------------------------------------
 
    CLR   TR1
    INC   R0
    MOV   A,@R0
    CPL   A
    MOV   TL1,A    
    INC   R0
    MOV   A,@R0
    CPL   A
    MOV   TH1,A
    SETB  TR1
    CLR   TF1
    DJNZ  R1,OUT_1_CODE


 LRD_END:
    CLR   TR1
    CLR   TF1
    SETB  EA
    RET
 OUT_1_CODE:
    JNB   TF1,$			       ;红外代码
;--------------------------------------
    LJMP  LRD1OUTLOOP 
    RET  	       ;取下一个代码
;==========================================================
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 


DELAY:
      MOV   R7,#200
DEL_L:
      MOV   R6,#30
      DJNZ  R6,$
      DJNZ  R7,DEL_L
      RET
      
DELY_2:
            MOV     R7,#250
DEL_2:         
           LJMP    DELAY
           DJNZ    R7,DEL_2
           MOV     R7,#250
DEL_3:     LJMP    DEL_2
           DJNZ    R7,DEL_3
           RET
     

源代码下载地址:http://www.51hei.com/ziliao/file/hogwxx1.rar

关键字:存储功能  红外遥控器  stc89c52 引用地址:带存储功能的学习型红外遥控器源代码

上一篇:自制四位数码管显示的数字钟c程序
下一篇:STC单片机用键盘控制二极管亮灭的问题

推荐阅读最新更新时间:2024-03-16 13:07

stc单片机自动下载程序原理和代码实现
1/stc单片机下载程序的原理 首先我们要理解stc单片机下载程序的原理。在stc单片机中有两个程序区:用户程序区和ISP监控程序区。 这是stc89c52单片机数据手册中的内容。 根据数据手册,我们可以知道,当冷启动或者对ISP_CONTR寄存器送入60H产生复位以后,单片机会从ISP监控程序区开始执行程序。 如果这时候检测到合法的ISP下载命令流(后面会说什么是ISP的合法下载流),则ISP监控程序开始与ISP下载软件通信(如stc-isp),软件也会进入编程模式,向监控程序发送程序码,监控程序接收程序码,并将其写入用户程序区中。成功后,用户程序立即生效,开始运行用户程序。 如果这时候没有检测到合法的ISP下载命
[单片机]
stc单片机自动下载程序原理和代码实现
用单片机解码红外遥控器
用单片机解码红外遥控器 遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。如果能将遥控器上许多的按键解码出来.用作单片机系统的输入.则解决了常规矩阵键盘线路板过大、布线复杂、占用I/O口过多的弊病。而且通过使用遥控器,操作时可实现人与设备的分离,从而更加方便使用。下面以TC9012-p.htm" target="_blank" title="TC9012货源和PDF资料" TC9012编码芯片的遥控器为例。谈谈如何用常用的51系统单片机进行遥控的解码。 一、编码格式 1、0和1的编码 遥控器发射的信号由一串O和1的二进制代码组成
[单片机]
用单片机解码<font color='red'>红外遥控器</font>
单片机——红外遥控器——代码
#include #include #include ./delay/delay.h #include ./lcd1602/lcd1602.h unsigned int irtime = 0; bit startflag = 0; unsigned char irdata ; unsigned char ircood ; bit irok = 0; sbit IR = P3^2; void timer0() { EA = 1; TMOD |= 0x02; TH0 = 0; TL0 = 0; ET0 = 1;
[单片机]
F289C数据存储型万用表的新功能及适用范围
新型 289C 是新一代高性能工业用数据存储型万用表,可用来解决电子、工厂自动化、电力分配和机电设备中的复杂问题。由于能够记录数据并在屏幕上以图形方式进行查看,您可以更加快速地将问题解决,并有助于将停产时间降 具备新的功能 新功能 - 大号 50,000 字、3.5 英寸 1/4 VGA 点阵式显示屏,带白色背光照明。 新功能 - 通过扩展存储器来完成数据记录功能,可随时间进行无人看管的监视。使用内置的趋势捕获功能,用户可无需使用 PC 而以图形方式查看记录的读数。可随时间存储最多 10,000 个读数。 新功能 - 在需要进行 PC 下载之前,可保存多个记录进程。 新功能 - 小电阻 50 Ω 量程,1 mΩ 分辨率,10
[测试测量]
红外通信—红外遥控器NEC解码程序
单片机芯片使用的stc89c52;找到要用的部分的的原理图即可.这是一整个单片机开发板的电路图其他的忽略. /** *********************************************************************************************** * @file main.c * @author xr * @date 2014年3月31日10:26:47 * @version V1.2.3 * @brief 红外通信 NEC协议进行红外遥控器解码 显示用户码和键码到数码管上 * @note 单片机STC89C52RC MCU 晶振
[单片机]
51单片机入门模板(STC89C52RC)
该模板适用于51单片机入门,比较易于理解,包含定时器和串口的操作。 可以在定时器T0中断服务函数和主循环中实现主要功能,在UART中断服务函数(T1定时器)中实现简单的串口通信接收命令的功能。 注:本模板STC89C52RC单片机使用11.0592MHz的晶振,若使用12MHz晶振可修改定时器相关位置 STC89C52RC原理图 模板及分析 1.主要结构 #include reg52.h unsigned char T0RH = 0; //T0重载值高字节 unsigned char T0RL = 0; //T0重载值低字节 unsigned char RxdByte = 0; //串口接收到的字节
[单片机]
51单片机入门模板(<font color='red'>STC89C52</font>RC)
红外遥控器软件解码及其应用
摘要:通过对红外遥控器各按键发送冲波形的分析可以识别码型,从而为软件解码提供依据。本文以实例介绍红外遥控器与单片机的硬件接口,并从原理出发给出软件解码的方法。这是一个可以直接引用的成功例子,同时也为各类红外遥控器在单片机控制产品中的开发应用提供了一个非常实用的参考。 关键词:遥控器 软件解码 单片机 在单片机控制产品的开发应用中,为了向控制系统软件控制命令,键盘往往是不可缺少的。传统方法是利用并行输入/输出接口芯片扩展一个键盘接口,或者直接利用单片机的并行端口进行扩展。在某些应用环境下,这种方式2个弊端:①键盘和控制系统连在一起,不灵活,环境适应性差;②浪费单片机的端口,且硬件成本较高。 使用红外遥控器作为控制系统的输入设备
[应用]
基于单片机数字式智能电子热量称的设计
  1.引言   称重装置是工农业生产和商品流通扩大中不可缺少的计量工具,电子秤以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。随着人们生活水平的提高,在全民重视健康,生活品质日益提高的今天,除了能够实现称重,智能化和开发新功能是设计研发的主要趋势。开发智能热量称功能成为一个新方向,将电子技术实际应用到日常生活中,解决和填补人们在实用生活家电某些功能的不足和空白。本文研究基于单片机的电子称设计,在不增加成本的基础上开发电子称的新功能,设计数字式智能电子热量称,指导人们健康生活,具有实际应用和推广价值。   2.电子热量称系统设计   称重传感器感应被测重力,本设计中选用电阻应变式压力传感器作为电子称称重传感器,当有
[单片机]
基于单片机数字式智能电子热量称的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved