单片机开发,如何获取家用空调(我的是海尔空调)遥控红外通信协议,码表

单片机开发,如何获取家用空调(我的是海尔空调)遥控红外通信协议,码表,第1张

,空调器的遥控码比较长,达100多位,分析其规律比较难,但是先要会记录其主要代码,用定时器记录其高低电平的时间依次存入RAM中,待一帧数据结束后,再存入EEPROM中,可以发往上位机进行分析

也可以不加识别地再次调用,这样会占用较大的EEPROM空间

因此不能记录其所有的按键状态 同样是开机按键,制冷和制热状态下的遥控码是不同的

没写错,只不过时间周期最长,具体得看晶振频率。

是1

没看懂,好像没表达清楚有错别字

此程序外部中断优先级比定时器中断优先级高

得看主程序

我的专业就是学这方面的。

根据我的经验,如果你是为了做个万能遥控器,是不可能的。

当按下遥控器的按键时,遥控器将发出一串二进制代码,我们称它为一帧数据。这一帧数据通常由引导码、客户码(可以多个)、数据码(可以多个)、校验码、结束码等按一定的规律组成。在实际使用中对遥控器发射的二进制代码的编码也有所不同,通常有曼彻斯特编码和脉冲宽度编码之分,由于这种不同以及上述帧内不同的组合,就形成各种各样的遥控器编码格式,所以没有万能一说。

谢谢指正

你要明白,你按数字键1,其实它是发射一个红外代码。一个遥控器的红外代码应由以下三部分组成:引导码,前16为用户识别码(即不同产家不用型号不同遥控有不同用户码),后16位为 *** 作码(里面8位功能码及8位功能反码,这16位就是遥控器上不同按键的区分)。上面32位码都是二进制数,即“0”、“1“。程序中第一个for语句,是把用户识别码和 *** 作码一起分成4部分,每部分8位(1个字节),接下来的for语句是对每一位进行判断,判断是0还是1,然后用value通过与来记住一个字节里面的每一位,最后再将value赋给date。

;遥控器读码程序(晶振为110592),该程序能读出遥控器的控制码,并通过LED显示出来

;OMEN 2005/1/16于TCL

;

A_BIT EQU 20H ;数码管个位数存放内存位置

B_BIT EQU 21H ;数码管十位数存放内存位置

NO_OUT EQU 24H ;最终控制号码存放单元

A_NO EQU 25H ;数码管个位数对应代码存放内存位置

B_NO EQU 26H ;数码管十位数对应代码存放内存位置

;22H,23H为控制码及其反码的存放单元

;<<主程序>>

ORG 0000H

AJMP 0030H

ORG 0003H ;外部中断P32脚INT0入口地址

AJMP INT ;转入外部中断服务子程序(解码程序)

ORG 0030H

AJMP MAIN ;转入主程序

;

MAIN: MOV NO_OUT,#0H

SETB EA ;打开CPU总中断请求

SETB IT0 ;设定INT0的触发方式为脉冲负边沿触发

SETB EX0 ;打开INT0中断请求

LOOP: MOV A,NO_OUT;将按键的键值通过P1口的8个LED显示出来!

CPL A ;由于P1发光二极管显示的是电平的反状态,所以取反

MOV P1,A ;发光二极管显示输出

LCALL DISPLAY;LED数码管显示输出

AJMP LOOP;循环

;<<中断接受遥控程序>>

;以下为进入P32脚外部中断子程序,也就是解码程序

INT:

PUSH ACC

PUSH PSW ;将PSW和ACC推入堆栈保护

CLR EA ;暂时关闭CPU的所有中断请求

MOV R6,#10

SB: LCALL DL865;调用865微秒延时子程序

JB P32,EXIT;延时865微秒后判断P32脚是否出现高电平如果有就退出解码程序

DJNZ R6, SB;重复10次,目的是检测在8650微秒内如果出现高电平就退出解码程序

;以上完成对遥控信号的9000微秒的初始低电平信号的识别。

JNB P32, $ ;等待高电平避开9毫秒低电平引导脉冲

LCALL DL4737 ;延时474毫秒避开45毫秒的结果码

MOV R7,#16;忽略前26位系统识别码

JJJJA:JNB P32,$;等待地址码第一位的高电平信号

LCALL DL865;高电平开始后用865微秒的时间尺去判断信号此时的高低电平状态

MOV C,P32;将P32引脚此时的电平状态0或1存入C中

JNC UUUA;如果为0就跳转到UUUA

LCALL DL1000;检测到高电平1的话延时1毫秒等待脉冲高电平结束

UUUA: DJNZ R7,JJJJA

MOV R1,#22H ;设定22H为起始RAM区

MOV R2,#2;接收从22H到23H的2个内存,用于存放 *** 作码和 *** 作反码

PP: MOV R3,#8;每组数据为8位

JJJJ: JNB P32,$;等待地址码第一位的高电平信号

LCALL DL865;高电平开始后用865微秒的时间尺去判断信号此时的高低电平状态

MOV C,P32;将P32引脚此时的电平状态0或1存入C中

JNC UUU;如果为0就跳转到UUU

LCALL DL1000;检测到高电平1的话延时1毫秒等待脉冲高电平结束

UUU: MOV A,@R1;将R1中地址的给A

RRC A;将C中的值0或1移入A中的最低位

MOV @R1,A;将A中的数暂时存放在R1数值的内存中

DJNZ R3,JJJJ;接收满8位换一个内存

INC R1;对R1中的值加1,换下一个RAM

DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在22H/23H中

MOV A,22H

CPL A;对22H取反后和23H比较

CJNE A,23H,EXIT;如果不等表示接收数据发生错误,放弃

MOV A,22H

MOV NO_OUT,A

;LCALL EEPROM_C ;清除以前的保存的码

;LCALL DL4737

;LCALL EEPROM_W ;把码存在单片机内部的EEPROM里

;LCALL DL4737

CLR P36;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功

LCALL DL4737

LCALL DL4737

LCALL DL4737

SETB P36;蜂鸣器停止

lcall DL4737

EXIT: SETB EA ;允许中断

POP PSW

POP ACC ;将PSW和ACC推入堆栈保护

RETI ;退出解码子程序

;<<LED数码管显示子程序>>

DISPLAY:

MOV A,NO_OUT ;将NO_OUT分成个位和16位

ANL A,#0FH ;取低四位放在a_bit

MOV A_BIT,A ;个位

MOV A,NO_OUT ;

RR A

RR A

RR A

RR A ;四次移动,把高四位移到低四位

ANL A,#0FH;取高四位放在B_bit

MOV B_BIT,A ;个位在b

MOV DPTR,#NUMTAB ;指定查表启始地址

MOV A,A_BIT ;取个位数

MOVC A,@A+DPTR ;查个位数的7段代码

MOV A_NO,A

MOV A,B_BIT ;取十位数

MOVC A,@A+DPTR ;查十位数的7段代码

MOV B_NO,A

DPLOP:MOV A,A_NO

MOV P0,A ;送出个位的7段代码

;SETB P21;关闭十位显示,防止鬼影

CLR P20 ;开个位显示

LCALL DL40 ;显示4737微秒

SETB P20;关闭个位显示,防止鬼影

MOV A,B_NO

MOV P0,A ;送出十位的7段代码

CLR P21 ;开十位显示

LCALL DL40 ;显示4737微秒

SETB P21;关闭十位显示,防止鬼影

RET

;<<延时程序>>

DL865: MOV R4,#12 ; 109(2R5+4)R4+2延时子程序1,精确延时865微秒

D1: MOV R5,#31

DJNZ R5,$

DJNZ R4,D1

RET

DL4737: MOV R4,#12 ;延时子程序2,精确延时4737微秒

D2: MOV R5,#179

DJNZ R5,$

DJNZ R4,D2

RET

DL1000: MOV R4,#17;延时程序3,精确延时1000微秒

D3: MOV R5,#25

DJNZ R5,$

DJNZ R4,D3

RET

DL40: MOV R4,#1;延时程序4,精确延时40/17微秒

D4: MOV R5,#1

DJNZ R5,$

DJNZ R4,D4

RET

;

;如果是共阳数码管的显示代码 1-F 16个代码

NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH ;STC新板的

END

以上就是关于单片机开发,如何获取家用空调(我的是海尔空调)遥控红外通信协议,码表全部的内容,包括:单片机开发,如何获取家用空调(我的是海尔空调)遥控红外通信协议,码表、关于单片机TC9012红外编码问题、机顶盒的红外接收编码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9280545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存