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

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

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

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

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

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

  3. c语言中整形变量,C语言基本数据类型:整型(int)用法详解

    1.整型int C语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int是整型之一,一般被称为整型.以后,在不产生歧义的情况下,我们把整数类型和int都称为整 ...

  4. C语言基本数据类型:整型(int)用法详解

    1. 整型int     C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int是整型之一,一般被称为整型.以后,在不产生歧义的情况下,我们把整数类型和i ...

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

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

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

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

  7. 单片机推挽输出c语言,单片机IO口科普:推挽输出、开漏输出详解

    原标题:单片机IO口科普:推挽输出.开漏输出详解 在学单片机和选用逻辑器件的时候我们常别人说这款芯片是推挽输出驱动能力强,这个引脚是开漏输出需要加上拉电阻. 是不是有时候感觉一头雾水? 今天就详解一下 ...

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

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

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

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

最新文章

  1. Excel事半功倍的应用
  2. mysql如何创建非管理员权限_mysql权限管理,一个非db管理员创建mysql的做法_MySQL...
  3. DCMTK:测试dcmseg的DcmSegUtils功能
  4. nginx php 防止跨站,Nginx下多网站单独php-fpm进程目录权限防跨站
  5. clang 反汇编
  6. vscode打开自动提示_Python编程的最好搭档:VSCode 详细指南
  7. 传抖音多位内容负责人将转岗;马斯克弟弟:我们兄弟俩都不迷恋财富;Chrome 99发布 | 极客头条...
  8. 【安装包】MySQL客户端
  9. 48. action 与 filter 的执行流程
  10. JavaSE学习--单例设计模式
  11. 360修复高危漏洞可以修复吗_大理石刮痕可以修复吗?如何修复?
  12. python的类,复现assert和eval成功失败原因
  13. 了解常见的开源协议(BSD, GPL, LGPL,MIT)涉及到GNU,LINUX,自由软件(免费开源),开源软件(自由免费开源和商业结合允许二次开发闭源),免费软件(免费使用不开源代码)
  14. 腾讯云实验室:搭建 LNMP 环境
  15. 为什么常用二倍图,流式布局中一倍图是否靠得住
  16. 读书印记 - 《星船伞兵》
  17. 【Oracle】-Difference between Instance recovery and Crash Recovery
  18. DSSD: Deconvolutional Single Shot Detector
  19. 高斯混合模型的终极理解
  20. CCD与CMOS摄像头哪个好

热门文章

  1. 2013中国高校SAS数据分析大赛完美落幕
  2. 【C语言】结构体类型的定义与使用
  3. VS2017下getcwd()函数“E0020未定义标识符;getcwd() 错误C3861“getcwd”: 找不到标识符”解决办法
  4. PS经典教程—使用你自己的图片制作…
  5. altium designer设计电路板全流程
  6. [毕业设计]电商大数据的商品推荐系统
  7. 2017韩国云服务器,虎云韩国云服务器KCS安装宝塔Linux面板教程
  8. Java毕设项目的创意项目众筹平台的设计与开发(java+VUE+Mybatis+Maven+Mysql)
  9. 全球及中国激光防护镜行业投资机会分析研究及企业经营战略建议报告2022-2027年版
  10. DC-DC电源模块直流隔离升压正负高压输出5v12v24v转±50v±110v±150v±200v±250v±300VDC