描述

STC89C52学习型遥控器,可存八个红外遥控信息,只要再把按键用定时器中断2完成就可以用于商业生产。

RXIN BIT P2.0

TXZAI BIT P2.2

TXOUT BIT P2.1

KEY_SIGN BIT 20H ;为0按键错误,为1按键正确

RXTX_SIGN BIT 21H ;为0是为发射状态,为1是为接收状态

ISP_DATA DATA 0E2H ;ISP功能寄存器定义

ISP_ADDRH DATA 0E3H

ISP_ADDRL DATA 0E4H

ISP_CMD DATA 0E5H

ISP_TRIG DATA 0E6H

ISP_CONTR DATA 0E7H

ISP_CMD_NO EQU 0 ;操作数

ISP_CMD_READ EQU 1

ISP_CMD_PROGRAM EQU 2

ISP_CMD_ERASE EQU 3

WAIT_TIME EQU 1 ;等待时间

ZHIL EQU 30H

ZHIH EQU 31H

GESHU EQU 32H

JISHU EQU 33H

KEY_WORD EQU 34H

KEY_VALUE EQU 35H

ADDRH EQU 36H

ADDRL EQU 37H

TX_GESHU EQU 38H

ORG 0000H

LJMP START

ORG 000BH

LJMP T0IN

ORG 001BH

LJMP T1IN

ORG 0100H

START: MOV SP,#10H

CLR RXTX_SIGN

LJMP KEY_MAIN

KEY_MAIN:LCALL SCAN_KEY ;检测有没有单个按键按下

MOV A,KEY_WORD

CJNE A,#00H,NEXT1

LJMP KEY_MAIN

NEXT1: JNB KEY_SIGN,KEY_MAIN

MOV KEY_VALUE,A

LCALL RE_DELAY ;消抖时间20ms

LCALL SCAN_KEY ;是否依然是按下的

MOV A,KEY_WORD

CJNE A,#00H,NEXT2

LJMP KEY_MAIN

NEXT2: JNB KEY_SIGN,KEY_MAIN

CJNE A,KEY_VALUE,KEY_MAIN

RELEASE: LCALL SCAN_KEY ;查看是否放开按键了

MOV A,KEY_WORD

CJNE A,#00H,RELEASE

MOV DPTR,#TAB ;执行相应的程式

CLR C

MOV A,KEY_VALUE

ADD A,KEY_VALUE

JMP @A+DPTR

TAB: AJMP KEY_0

AJMP KEY_1

AJMP KEY_2

AJMP KEY_3

AJMP KEY_4

AJMP KEY_5

AJMP KEY_6

AJMP KEY_7

AJMP KEY_8

AJMP KEY_9

AJMP KEY_10

AJMP KEY_11

AJMP KEY_12

AJMP KEY_13

AJMP KEY_14

AJMP KEY_15

AJMP KEY_16

KEY_0: LJMP KEY_MAIN ;无效的按健值

KEY_1: JNB RXTX_SIGN,T1RX ;接收发送键设定键,P1灯亮为接收存储状态,灯灭是为发射状态

T1TX: CLR RXTX_SIGN

MOV P1,#0FFH

LJMP KEY_MAIN

T1RX: SETB RXTX_SIGN

MOV P1,#00H

LJMP KEY_MAIN

KEY_2: MOV ADDRH,#20H

MOV ADDRL,#00H

JB RXTX_SIGN,KEY2_RX

KEY2_TX:LJMP TX_START

KEY2_RX:LJMP RX_START

KEY_3: MOV ADDRH,#22H

MOV ADDRL,#00H

JB RXTX_SIGN,KEY3_RX

KEY3_TX:LJMP TX_START

KEY3_RX:LJMP RX_START

KEY_4: MOV ADDRH,#24H

MOV ADDRL,#00H

JB RXTX_SIGN,KEY4_RX

KEY4_TX:LJMP TX_START

KEY4_RX:LJMP RX_START

KEY_5: MOV ADDRH,#26H

MOV ADDRL,#00H

JB RXTX_SIGN,KEY5_RX

KEY5_TX:LJMP TX_START

KEY5_RX:LJMP RX_START

KEY_6: MOV ADDRH,#28H

MOV ADDRL,#00H

JB RXTX_SIGN,KEY6_RX

KEY6_TX:LJMP TX_START

KEY6_RX:LJMP RX_START

KEY_7: MOV ADDRH,#2AH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY7_RX

KEY7_TX:LJMP TX_START

KEY7_RX:LJMP RX_START

KEY_8: MOV ADDRH,#2CH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY8_RX

KEY8_TX:LJMP TX_START

KEY8_RX:LJMP RX_START

KEY_9: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY9_RX

KEY9_TX:LJMP TX_START

KEY9_RX:LJMP RX_START

KEY_10: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY10_RX

KEY10_TX:LJMP TX_START

KEY10_RX:LJMP RX_START

KEY_11: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY11_RX

KEY11_TX:LJMP TX_START

KEY11_RX:LJMP RX_START

KEY_12: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY12_RX

KEY12_TX:LJMP TX_START

KEY12_RX:LJMP RX_START

KEY_13: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY13_RX

KEY13_TX:LJMP TX_START

KEY13_RX:LJMP RX_START

KEY_14: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY14_RX

KEY14_TX:LJMP TX_START

KEY14_RX:LJMP RX_START

KEY_15: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY15_RX

KEY15_TX:LJMP TX_START

KEY15_RX:LJMP RX_START

KEY_16: MOV ADDRH,#2EH

MOV ADDRL,#00H

JB RXTX_SIGN,KEY16_RX

KEY16_TX:LJMP TX_START

KEY16_RX:LJMP RX_START

SCAN_KEY:CLR KEY_SIGN

MOV KEY_WORD,#00H

KEY1: MOV P3,#11111110B ;第一行

JB P3.4,KEY2

JB KEY_SIGN,KEYWRONG1

MOV KEY_WORD,#1

SETB KEY_SIGN

KEY2: JB P3.5,KEY3

JB KEY_SIGN,KEYWRONG1

MOV KEY_WORD,#2

SETB KEY_SIGN

KEY3: JB P3.6,KEY4

JB KEY_SIGN,KEYWRONG1

MOV KEY_WORD,#3

SETB KEY_SIGN

KEY4: JB P3.7,KEY5

JB KEY_SIGN,KEYWRONG1

MOV KEY_WORD,#4

SETB KEY_SIGN

LJMP KEY5

KEYWRONG1: LJMP KEYWRONG

KEY5: MOV P3,#11111101B ;第二行

JB P3.4,KEY6

JB KEY_SIGN,KEYWRONG2

MOV KEY_WORD,#5

SETB KEY_SIGN

KEY6: JB P3.5,KEY7

JB KEY_SIGN,KEYWRONG2

MOV KEY_WORD,#6

SETB KEY_SIGN

KEY7: JB P3.6,KEY8

JB KEY_SIGN,KEYWRONG2

MOV KEY_WORD,#7

SETB KEY_SIGN

KEY8: JB P3.7,KEY9

JB KEY_SIGN,KEYWRONG2

MOV KEY_WORD,#8

SETB KEY_SIGN

LJMP KEY9

KEYWRONG2:LJMP KEYWRONG

KEY9: MOV P3,#11111011B ;第三行

JB P3.4,KEY10

JB KEY_SIGN,KEYWRONG3

MOV KEY_WORD,#9

SETB KEY_SIGN

KEY10: JB P3.5,KEY11

JB KEY_SIGN,KEYWRONG3

MOV KEY_WORD,#10

SETB KEY_SIGN

KEY11: JB P3.6,KEY12

JB KEY_SIGN,KEYWRONG3

MOV KEY_WORD,#11

SETB KEY_SIGN

KEY12: JB P3.7,KEY13

JB KEY_SIGN,KEYWRONG3

MOV KEY_WORD,#12

SETB KEY_SIGN

LJMP KEY13

KEYWRONG3:LJMP KEYWRONG

KEY13: MOV P3,#11110111B ;第四行

JB P3.4,KEY14

JB KEY_SIGN,KEYWRONG4

MOV KEY_WORD,#13

SETB KEY_SIGN

KEY14: JB P3.5,KEY15

JB KEY_SIGN,KEYWRONG4

MOV KEY_WORD,#14

SETB KEY_SIGN

KEY15: JB P3.6,KEY16

JB KEY_SIGN,KEYWRONG4

MOV KEY_WORD,#15

SETB KEY_SIGN

KEY16: JB P3.7,SCAN_END

JB KEY_SIGN,KEYWRONG4

MOV KEY_WORD,#16

SETB KEY_SIGN

LJMP SCAN_END

KEYWRONG4: LJMP KEYWRONG

KEYWRONG:CLR KEY_SIGN

SCAN_END:RET

RE_DELAY: MOV R7,#5

DE2: MOV R6,#10

DE1: MOV R5,#200

DJNZ R5,$

DJNZ R6,DE1

DJNZ R7,DE2

RET

RX_START: CLR P2.4 ;接收红外信号,存入外部扩展寄存器0~256

CLR P2.6

CLR P2.7

CLR P2.2

CLR TXOUT

MOV R1,#00H

MOV R0,#00H

MOV TMOD,#00010001B

MOV TH0,#00H

MOV TL0,#00H

MOV TH1,#00H

MOV TL1,#00H

CLR ET0

CLR ET1

CLR EA

CLR TR0

CLR TR1

LJMP RX_MAIN

RX_MAIN: MOV R0,#00H

JB RXIN,$

SETB TR0

JUDGE1: JB TF0,RXEND

JNB RXIN,JUDGE1

CLR TR0

SETB TR1

MOV A,TL0

MOV X @R0,A

INC R0

MOV A,TH0

MOV X @R0,A

INC R0

MOV TL0,#00H

MOV TH0,#00H

INC R1

JUDGE2: JB TF1,RXEND

JB RXIN,JUDGE2

CLR TR1

SETB TR0

MOV A,TL1

MOV X @R0,A

INC R0

MOV A,TH1

MOV X @R0,A

INC R0

MOV TL1,#00H

MOV TH1,#00H

INC R1

AJMP JUDGE1

RXEND: CLR TR0

CLR TR1

CLR TF0

CLR TF1

MOV TL0,#00H

MOV TH0,#00H

MOV TL1,#00H

MOV TH1,#00H

MOV GESHU,R1

MOV R1,GESHU ;取反转换重新存入外部扩展寄存器

MOV R0,#00H

LOOP_CPL: MOV X A,@R0

CPL A

MOV X @R0,A

INC R0

MOV X A,@R0

CPL A

MOV X @R0,A

INC R0

DJNZ R1,LOOP_CPL

LJMP ISP_STORE

ISP_STORE: LCALL ISP_ERASE

MOV ISP_DATA,GESHU ;将个数输入到ISP_EEPROM的第一位

MOV ISP_ADDRH,ADDRH

MOV ISP_ADDRL,ADDRL

CLR EA

MOV ISP_CONTR,#WAIT_TIME

ORL ISP_CONTR,#10000000B

MOV ISP_CMD,#ISP_CMD_PROGRAM

MOV ISP_TRIG,#46H

MOV ISP_TRIG,#0B9H

NOP

MOV R1,GESHU

MOV R0,#00H

LOOP_WRITE: LCALL BYTE_WRITE ;将扩展寄存器中的计时值依次放入ISP_EEPROM第二位开始的存储器中

INC R0

LCALL BYTE_WRITE

INC R0

DJNZ R1,LOOP_WRITE

MOV ISP_CMD,#00H ;ISP指令清零,防止误触发

MOV ISP_TRIG,#00H

MOV ISP_ADDRH,#00H

MOV ISP_ADDRL,#00H

MOV p1,geshu

LJMP KEY_MAIN

BYTE_WRITE: MOV X A,@R0

MOV ISP_DATA,A

MOV ISP_ADDRH,ADDRH

INC R0

MOV ISP_ADDRL,R0

DEC R0

CLR EA

MOV ISP_CONTR,#WAIT_TIME

ORL ISP_CONTR,#10000000B

MOV ISP_CMD,#ISP_CMD_PROGRAM

MOV ISP_TRIG,#46H

MOV ISP_TRIG,#0B9H

NOP

RET

ISP_ERASE: MOV ISP_ADDRH,ADDRH

MOV ISP_ADDRL,ADDRL

CLR EA

MOV ISP_CONTR,#WAIT_TIME

ORL ISP_CONTR,#10000000B

MOV ISP_CMD,#ISP_CMD_ERASE

MOV ISP_TRIG,#46H

MOV ISP_TRIG,#0B9H

NOP

RET

TX_START: MOV ISP_ADDRH,ADDRH ;取出第一位的个数

MOV ISP_ADDRL,ADDRL

CLR EA

MOV ISP_CONTR,#WAIT_TIME

ORL ISP_CONTR,#10000000B

MOV ISP_CMD,#ISP_CMD_READ

MOV ISP_TRIG,#46H

MOV ISP_TRIG,#0B9H

NOP

MOV ISP_CMD,#00H ;ISP指令清零,防止误触发

MOV ISP_TRIG,#00H

MOV ISP_ADDRH,#00H

MOV ISP_ADDRL,#00H

MOV A,ISP_DATA ;为0FF则是错误的,回去,不为0FF则继续

CJNE A,#0FFH,ISP_READ

LJMP KEY_MAIN

ISP_READ: MOV GESHU,ISP_DATA

MOV R1,GESHU

MOV R0,#00H

LOOP_READ: LCALL BYTE_READ

INC R0

LCALL BYTE_READ

INC R0

DJNZ R1,LOOP_READ

LJMP TX_EXROM

BYTE_READ: INC R0

MOV ISP_ADDRH,ADDRH

MOV ISP_ADDRL,R0

DEC R0

CLR EA

MOV ISP_CONTR,#WAIT_TIME

ORL ISP_CONTR,#10000000B

MOV ISP_CMD,#ISP_CMD_READ

MOV ISP_TRIG,#46H

MOV ISP_TRIG,#0B9H

NOP

MOV A,ISP_DATA

MOV X @R0,A

RET

TX_EXROM: MOV TMOD,#00010010B

MOV TH0,#0F4H

MOV TL0,#0F4H

MOV R1,GESHU

MOV R0,#00H

MOV X A,@R0

MOV TL1,A

INC R0

MOV X A,@R0

MOV TH1,A

INC R0

DEC R1

MOV X A,@R0

MOV ZHIL,A

INC R0

MOV X A,@R0

MOV ZHIH,A

INC R0

DEC R1

SETB ET1

SETB ET0

SETB EA

SETB TR1

SETB TR0

CLR TXOUT

MAIN2:CJNE R1,#00H,MAIN2

CLR TXOUT

MOV p1,#55h

LJMP KEY_MAIN

T0IN:CPL TXZAI

RETI

T1IN: MOV TL1,ZHIL

MOV TH1,ZHIH

JB TR0,NEXTT1

SETB TR0

LJMP NEXTT

NEXTT1:CLR TR0

CLR TXZAI

NEXTT:CPL TXOUT

MOV X A,@R0

MOV ZHIL,A

INC R0

MOV X A,@R0

MOV ZHIH,A

INC R0

DJNZ R1,OUTTI

CLR TR1

CLR TR0

CLR TXZAI

CLR TXOUT

OUTTI:RETI

DELAYXMS: MOV R7,#255

DEL1: MOV R6,#4

DEL2: MOV R5,#5

DJNZ R5,$

DJNZ R6,DEL2

DJNZ R7,DEL1

RET

DELAYX2MS: MOV R7,#255

DEL12: MOV R6,#50

DEL22: MOV R5,#50

DJNZ R5,$

DJNZ R6,DEL22

DJNZ R7,DEL12

RET

END

打开APP精彩内容

点击阅读全文

C语言遥控器程序,单片机学习型遥控器程序详解(完整版)相关推荐

  1. 单片机遥控器c语言程序,单片机学习型遥控器程序详解(完整版)

    STC89C52学习型遥控器,可存八个红外遥控信息,只要再把按键用定时器中断2完成就可以用于商业生产. RXIN BIT P2.0 TXZAI BIT P2.2 TXOUT BIT P2.1 KEY_ ...

  2. 说明使用tc编程的一般步骤 c语言,TC编程手册详解-完整版.doc

    TC编程手册详解-完整版 TC编程手册详解-完整版 本文是TC的第一部分,主要介绍一些TC相关的基础知识,并着重针对循环.变量等TC基本概念中的易混的淆部分加以辨析,即是一份编程初学者的指南,也可算作 ...

  3. 彻底搞定C语言指针详解完整版

    http://www.360doc.com/content/11/0313/21/507289_100846724.shtml

  4. C语言遥控器程序,学习型遥控器C语言.doc

    /*********************************************************************/ // remote.c // 学习型遥控器 // 使用k ...

  5. c语言数据类型int的用法,C语言基本数据类型:整型(int)用法详解|C语言学习

    C语言基本数据类型:整型(int)用法详解 1. 整型 int C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int 是整型之一,一般被称为整型.以后, ...

  6. fm24c16c语言程序,单片机读写24C01~24C16程序

    单片机读写24C01~24C16程序,24C02 read / write process 关键字:单片机读写24C01~24C16程序 单片机读写24C01~24C16程序 AT89S52 晶振频率 ...

  7. c语言将AOE网络的数据写入TXT文档中,数据结构与算法学习辅导及习题详解.张乃孝版-C/C++文档类资源...

    数据结构与算法学习辅导及习题详解.张乃孝版.04年10月 经过几年的努力,我深深体会到,编写这种辅导书要比编写一本湝通教材困难得多. 但愿我的上述理想,在本书中能够得以体现. 本书的组织 本书继承了& ...

  8. 一个C#程序员学习微信小程序的笔记

    一个C#程序员学习微信小程序的笔记 客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在 ...

  9. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  10. c语言中getenv的作用,C语言putenv()函数和getenv()函数的使用详解

    C语言putenv()函数和getenv()函数的使用详解 C语言putenv()函数:改变或增加环境变量头文件: #include4 定义函数: int putenv(const char * st ...

最新文章

  1. 推动网络由连接为中心向用户为中心转变
  2. (IT/互联网行业)你给自己当前的职位拼几分?(评分标准,个人看法,勿喷~)...
  3. 解决windows 2003无法远端登录windows 2008
  4. HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。(上传文件长度问题)
  5. java jni技术_JNI技术简介
  6. MySQL使用触发器实现check约束功能
  7. mysql索引超出范围 index_输入查询条件会报参数索引超出范围的错误
  8. 国内外计算机视觉领域优秀研究团队汇总
  9. 蚁群优化算法之精华蚂蚁系统和排列蚂蚁系统学习笔记
  10. 以云数据库产品为例深度对比分析:华为云更安全还是阿里云更安全?
  11. canvas.toDataURL()降低图片质量,以减少图片上传大小
  12. 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
  13. 拉格朗日对偶问题的一些介绍
  14. HDU 6070 Dirt Ratio
  15. OC视频笔记7(自定义初始化方法)8(类方法与实例方法的区别)(为什么NSString后面加*)
  16. android车机蓝牙,安卓APP通过蓝牙串口模块控制DSP车机收音机
  17. java JDBC连接MySQL数据库调用存储过程进行查询
  18. Google公益广告的答案
  19. 张江创业者说 | 影创科技孙立:改变世界,从改变视野开始
  20. 关于AjaxPro用法

热门文章

  1. vuejs出的手机app有哪些_vue.js点餐app手机触屏滑动分类菜单切换代码
  2. 易快报创始人兼CEO马春荃:数智化时代扑面而来,多维度重构企业财智领域
  3. 浅谈尾调用和尾递归(C语言)
  4. oracle general ledger,处理 Oracle General Ledger 调整期间
  5. Encoded password does not look like BCrypt 使用SpringSecurity中BCryptPasswordEncoder做盐值加密时出现错误
  6. 开发人员常说的CLI是什么
  7. BCIduino社区|HY-BCI Pro多通道科研级脑电放大器接收lsl脑电数据并进行显示
  8. 面试经典必问:ReentrantLock 中CLH队列
  9. 游戏,让学习成瘾pdf_设计上瘾的视频游戏
  10. 智力题解题报告No.12 倒油 倒酒 倒水问题