b2c信息网

您现在的位置是:首页 > 今日新闻 > 正文

今日新闻

车载红外遥控按键源码(红外遥控小车流程图)

hacker2022-06-28 20:33:19今日新闻125
本文目录一览:1、我用单片机编程,怎样知道一个红外遥控器的每个按键的代码,或者怎样操作?

本文目录一览:

我用单片机编程,怎样知道一个红外遥控器的每个按键的代码,或者怎样操作?

单片机UART接个红外接收。另外还要做个遥控器,也用单片机UART接个红外发射。用遥控器的单片机做按键编码,发射不同的数据到串口,例如0x01是开,0xfe是关。

然后接收的单片机做UART数据解码,接收到0X01就做开操作,0XFE做关操作。

基于51单片机红外遥控代码(C语言)

以下文件是51单片机实现遥控解码,通过数码管显示键码的程序,P0口驱动数码管段选,p2.6和p2.7为数码管位选,接收头连到P3.2口。此程序以通过验证,可以直接编译使用,另外还有一个继电器和蜂鸣器的控制,不用可以屏蔽掉。

;********************************************************************************

;* 描述: *

;* 遥控键值读取器 *

;* 数码管显示, P0口为数码管的数据口 *

;* *

;********************************************************************************

;遥控键值解码-数码管显示 *

;********************************************************************************/

#include reg51.h

#include intrins.h

void IR_SHOW();

void delay(unsigned char x);//x*0.14MS

void delay1(unsigned char ms);

void beep();

sbit IRIN = P3^2;

sbit BEEP = P3^7;

sbit RELAY= P1^3;

sbit GEWEI= P2^7;

sbit SHIWEI= P2^6;

unsigned char IRCOM[8];

unsigned char code table[16] =

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

main()

{

IE = 0x81; //允许总中断中断,使能 INT0 外部中断

TCON = 0x1; //触发方式为脉冲负边沿触发

delay(1);

IRIN=1;

BEEP=1;

RELAY=1;

for(;;)

{

IR_SHOW();

}

} //end main

void IR_IN() interrupt 0 using 0

{

unsigned char i,j,k,N=0;

EA = 0;

I1:

for (i=0;i4;i++)

{

if (IRIN==0) break;

if (i==3) {EA =1;return;}

}

delay(20);

if (IRIN==1) goto I1; //确认IR信号出现

while (!IRIN) //等 IR 变为高电平

{delay(1);}

for (j=0;j4;j++)

{

for (k=0;k8;k++)

{

while (IRIN) //等 IR 变为低电平

{delay(1);}

while (!IRIN) //等 IR 变为高电平

{delay(1);}

while (IRIN) //计算IR高电平时长

{

delay(1);

N++;

if (N=30) {EA=1;return;}

}

IRCOM[j]=IRCOM[j] 1;

if (N=8) {IRCOM[j] = IRCOM[j] | 0x80;}

N=0;

}//end for k

}//end for j

if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}

IRCOM[5]=IRCOM[2] 0x0F;

IRCOM[6]=IRCOM[2] 0xF0;

IRCOM[6]=IRCOM[6] 4;

beep();

EA = 1;

}

void IR_SHOW()

{

P0 = table[IRCOM[5]];

GEWEI = 0;

SHIWEI = 1;

delay1(4);

P0 = table[IRCOM[6]];

SHIWEI = 0;

GEWEI = 1;

delay1(4);

}

void beep()

{

unsigned char i;

for (i=0;i100;i++)

{

delay(5);

BEEP=!BEEP;

}

BEEP=1;

}

void delay(unsigned char x)//x*0.14MS

{

unsigned char i;

while(x--)

{

for (i = 0; i13; i++) {}

}

}

void delay1(unsigned char ms)

{

unsigned char i;

while(ms--)

{

for(i = 0; i120; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

来个红外线遥控的编码程序吧!用汇编的!

红外遥控电子密码锁程序

ORG 0000H ;主程序

CLR P1.7 ;清零

MOV RO, #OOH

CLR P1.3 ;关报警

CLR P1.7 ;P1.7清零

CLR P1.4 ;关报警

MOV RO, #OOH ;串行口初始化

MOV 52H, #02H ;将立即数02H送52H

MOV TMOD , #20H ;设置T1工作方式2

MOV TL1 ,#OF4H ;定时初始值送TL1

MOV TH1 ,#OF4H ;定时初始值送TH1

SETB TR1 ;启动定时器T1

MOV SCON, #ODOH ;定义串行行工作方式3

MOV PCON , #OOH

KEY: JNB P1.5 , KEP1 ;选择密码57618

LJMP KEP2

*******************************************************密码57618程序

KEP1: MOV P2 ,#0FFH ;关显示

MOV A , P0 判断是否有键按下

CPL A ;对P0口的数据取反

ANL A , #OFFH ;立即数OFF 与PO的数据相与

JNZ JP ;有键按下转至JP

MOV A , P1 ;判断是否有键盘按下

CPL A ;将P1口的数据取反

ANL A ,#O7H ;累加器数据为零转遥控接收程序

JZ WAIT

ACALL D10MS ;调用10秒延时

MOV A , P1

CPL A

ANL A ,#O7H

JZ WAIT

PP1: CJNE A , #01H ,JP1

MOV P2 , #89H ;显示字符”H”

LJMP K0P1

PP2: CJNE A , #02H ,JP2

MOV P2 , #89H ;显示字符”H”

LJMP KOP1

JP2: CJNE A , #04H ,KY

MOV P2 ,#89H ;显示字符”H”

JP3: MOV A , #O7H

CJNE A , #07H ,JP3

LJMP LP1

KOP1: MOV A ,P1

ANL A, #07H

CJNE A , #07H ,KOP1

LJMP KEP1

JP: LCALL D10MS

MOV A , PO

CPL A,

ANL A, #OFFH

JZ C6

CJZE A ,#01H ,KEY02

MOV P2, #89H

LJMP KEY1

KEY02: CJNE A ,#02H ,KEY03

MOV P2 ,#89H

LJMP KJP1

KEYO3: CJNE A , #04H, KEY04

MOV P2 ,#89

LJMP KJP1

KEY04: CJZE A , #08H, KEY05

MOV P2 ,#89H

LJMP KJP1

KEY05: CJZE A , #10H, KEY06

MOV P2 ,#89H

LJMP KJP1

KEY06: CJZE A , #08H, KEY07

MOV P2 ,#89H

LJMP KJP1

KEY07 CJZE A , #10H KEY08

MOV P2 ,#89H

LJMP KJP1

KEY08 CJZE A , #10H, C6

MOV P2 ,#89H

LJMP KJP1

KJP1: MOV A, P0

CJNE A , #OFFH ,KJP1

C6: LJMP WAIT

********************************************************************

KEY1: LCALL MP

CJNE A , #02H , KEY03

MOV P2 , #89H

KEY2 LCALL MP

CJNE A , #04 , KEY02

MOV P2 , #89H

KEY3 LCALL MP

CJNE A , #08 , KEY02

MOV P2 , #89H

KEY4 LCALL MP

CJNE A , #10H, KEY02

MOV P2 , #89H

KEY5 MOV A ,P0

CJNE A , #0FFH, KEY5

MOV P2 , #OFFH

MOV R5 ,#30H

KEY6: MOV A , PO

CPL A

ANL A , #OFFH

JNZ BB2

MOV A ,P1

CPL A

ANL A , #O7H

JZ BB1

LCALL D10MS

MOV A , P1

CPL A

ANL A ,#07H

JZ

CJNE A ,#04H ,B1

MOV P2 , #89H

LJMP LP2

B1: CJNE A, #01H ,BL1

MOV P2 ,#89H

LJMP KOP1

BL1: CJNE A , #02H ,BB1

MOV P2 , #89H

LJMP KOP1

BB2: LCALL D10MS

MOV A , P0

CPL A

ANL A , #OFFH

JZ BB1

LJMP KEY02

BB1: MOV R7 ,#OC8H

BB4: MOV R6 ,#OF9H

NOP

NOP

BB5: JNZ R6 ,BB5

DJNZ R7, BB4

DJNZ R5 , KEY6

LJMP WAIT

************************************************************密码81675程序

KEP2: MOV P2 ,#OFFH ;关显示

MOV A ,PO

] CPL A

ANL A , #OFFH

JNZ HP

MOV A ,P1

CPL A

ANL A , #07H

JZ C9

LCALL D1OMS

MOV A ,P1

CPL A

ANL A ,#07H

JZ C9

BB: CJNE A , #O1H ,HP1

MOV P2 ,#89H

LJMP K1P1

HP1: CJNE A ,#02H ,HP2

MOV P2 ,#89H

LJMP K1P1

HP2: CJNE A ,#04H ,C9

MOV P2, #89H

HP3: MOV A ,P1

ANL A ,#07H

CJNE A ,#07H ,HP3

MOV P2 ,#OFFH

LJMP LP1

K1P1 : MOV A ,P1

ANL A ,#O7H

CJNE A ,#07H ,K1P1

C9: LJMP WAIT

HP: LCALL D1OMS

MOV A , PO

CPL A

ANL A ,#OFFH

JZ C9

CJNE A , #1OH,K0Y02

MOV P2 ,#89H

LJMP K0Y1

K0Y02: CJNE A ,#01H ,K0Y03

MOV P2 ,#89H

LJMP KUP1

K0Y03 CJNE A ,#02H ,K0Y04

MOV P2 ,#89H

LJMP KUP1

K0Y04 CJNE A ,#04H ,K0Y05

MOV P2 ,#89H

LJMP KUP1

K0Y05 CJNE A ,#08H ,K0Y06

MOV P2 ,#89H

LJMP KUP1

K0Y06 CJNE A ,#20,K0Y07

MOV P2 ,#89H

LJMP KUP1

K0Y07 CJNE A ,#40,K0Y08

MOV P2 ,#89H

LJMP KUP1

K0Y08 CJNE A ,#80,U2

MOV P2 ,#89H

LJMP KUP1

KUP1: MOV A ,PO

CJNE A ,#OFFH ,KUP1

U2: LJMP WAIT

K0Y1: LCALL MP

CJNE A #08H ,K0Y02

MOV P2 ,#89H

K0Y2 LCALL MP

CJNE A #04 ,K0Y02

MOV P2 ,#89H

K0Y3 LCALL MP

CJNE A #02 ,K0Y02

MOV P2 ,#89H

K0Y4 LCALL MP

CJNE A #01H ,K0Y02

MOV P2 ,#89H

K0Y6: MOV A ,PO

CPL A

ANL A ,#OFFH

JNZ PP2

MOV A , P1

CPL A

ANL A ,#07H

JZ PPL

LCALL D10MS

MOV A , P1

CPL A

ANL A ,#07H

JZ PP1

CJNE A ,#04H ,Y1

MOV P2 , 389H

LJMP LP2

Y1: CJNE A ,#01H ,Y11

MOV P2 ,#89H

LJMP K1P1

Y11: CJNE A , #02H ,PP1

MOV P2 ,#89H

LJMP K1P1

PP2: LCALL D10MS

MOV A, PO

CPL A

ANL A ,#OFFH

JZ PP1

LJMP K0Y02

PP1: MOV R7 ,#OC8H

PP4: MOV R6 , #OF9H

NOP

NOP

PP5: DJNZ R6 ,PP5

DJNZ R7 ,PP4

DJNZ R5 ,K0Y6

LJMP WAIT

*****************************************************报警程序

LP1: SETB P1.4

INC RO

P019: MOV R3 ,#05H

P020: MOV R7 ,#0A0H

P018: SETB P1.3

LCALL P01A

CLR P1.3

LCALL P01A

DJNZ R7 ,P018

DJNZ R3 ,P020

CLR P1.3

CJNE R0 , #03H ,P017

LJMP P019

P017: CLR P1.4

LJMP WAIT

****************************************************开锁程序

LP2: SETB P1.7

LCALL T5S

CLR P1.7

MOV R0 ,#00H

LJMP WAIT

******************************************************判断键是否释放

MP: MOV A ,PO

CJNE A ,#OFFH ,MP

MOV P2 ,#OFFH

PM: MOV R5 ,#30H

LCALL TP

RET

******************************************************判断是否有键按下

TP: MOV A ,PO

CPL A

ANL A , #OFFH

JNZ AP

MOV A ,P1

CPL A

ANL A, #O7H

JZ TP3

LCALL D10MS

MOV A , P1

CPL A

ANL A , #07H

JZ TP3

LCALL D10MS

MOV A ,P1

CPL A

ANL A ,#07H

JZ TP3K

CJNE A, #04H ,C1

MOV P2 ,#89H

C3: MOV A P1

ANL A , #07H

CJNE A #07H ,C3

MOV P2 ,#0FFH

LJMP LP1

C1: CJNE A ,#01H ,C2

MOV P2 ,#OCOH

LJMP KCP1

C2: CJNE A ,#02 ,U11

MOV P2 ,#90HP

LJMP KCP1

KCP1: MOV A , P1

ANL A ,#07H

CJNE A ,#07H ,KCP1

U11: LJMP WAIT

AP: LCALL D10MS

MOV A ,P0

CPL A

ANL A , #0FFH

JZ TP3

RET

************************************************************400M延时程序

TP3: MOV R7 ,#OC8H

TP1: MOV R6 , #OF9H

NOP

NOP

TP2: DJNZ R6 , TP2

DJNZ R7 ,TP1

DJNZ R5 ,TP ;10S

LJMP WAIT

*********************************************************10延时程序]

D10MS : MOV R7 ,#05H

LOOP1: MOV R6 ,#OF9H

NOP

NOP

LOOP2: DJNZ R6 , LOOP2

DJNZ R7 ,LOOP1

RET

*****************************************************延时程序

P01A: MOV R2 ,#06H

LCALL DELY

RET

DELY: PUSH 02H

DEL2 : PUSH 02H

DEL3 : PUSH 02H

DEL4: DJNZ R2, ,DEL4

POP O2H

DJNZ R2 ,DEL3

POP O2H

DJNZ R2 ,DEL2

POP O2H

DJNZ R2 ,DELY

RET

******************************************************5S 延时程序

T5S: MOV R4 ,#15H

TS1: MOV R3 ,#64H

TS2: MOV R2 ,#05H

TS3: MOV R1 , #OF9H

NOP

NOP

T5S4 DJNZ R1 ,TS4

DJNZ R2 ,TS3

DJNZ R3 ,TS2

DJNZ R4 ,TS1

RET

3、遥控发送程序

ORG 0000H

LOOPO: MOV SCON ,#0C0H ;设定串行口工作方式3

MOV TMOD , #20H ;T1工作方式2

MOV PCON , #00H ;波特率设置

MOV TL1 , #OF4H ;定时初始值F4送TL1

MOV TH1 , #OF4H ;定时初始值F4送TH1

*******************************************************************

CP: JB P1.0 ,CPK ;判断遥控按键P1.0是否按下

LCALL PP ;调用延时

JB P1.0 , CP

STEB TR1 ;启动定时器T1

MOV 50H ,#5FH ; 将立即数5FH 送50H 存储单元

MOV RO ,#50H ;将立即数50H 送RO寄存器

MOV R1 , #05H ;将立即数05H送R1寄存器

IND: MOV A ,@R0 ; 将50H中的5F送累加器A

MOV C , P

MOV TB8 ,C

MOV SBUF ,A ;将要发送数据5F送串行数据缓冲器

AAA : JNB P1.1 ,ON1 ; P1.1是”0”电平时转至调制程序

BBB” JB P1.1 ,CCC ;P1.1是”1”电平等待

AMP AAA

CCC : JBC TI ,CP ;判断发送中断标志位]

SETB P1.2 ;P1.2置1

AJMP BBB

ON1: ACALL ON

AJMP AAA

PP: MOV R6, #05H ;延时子程序

100P3: MOV R5 , #OF9H

NOP

NOP

100P4: DJNZ R5 ,100P4

DJNZ R6 ,100P3

RET

ON: CP1 P1.2 ;0电平调制程序

。。。。。。。。。。。。。。(共有82个CP1 P1.2)

RET

********************************************************************

4、遥控接收程序

WAIT: JBC R1 ,LOOP5 ;遥控接收程序

LJMP KEY

LOOP5: MOV R0 ,#51H ;将立即数51H送R0

MOV R7 ,#03H ;将立即数03H送R7

LOOP6: MOV A ,SBUF ;将串行缓冲器接收到的数据累加器A

JNB PSW.0 LOOP7 ;标志位F0清零了吗?

JNB RB8 ,LOOP8 ;数据接收完了吗?

LOOP9 MOV @RO ,A ;开锁处理程序

MOV R1 , 51H

CJNE R1 ,#1EH ,LP

DJNZ 52H , KP

CLR P1.7

MOV 52H ,# 02H

MOV R0 ,#OOH

LJMP WAIT

KP: SETB P1.7

MOV R0 ,#00H

LJMP WAIT

LP: DJNZ R7 ,WAIT

CLR PSW.5

LJMP WAIT

LOOP7: JB RB8 , LOOP8

LJMP LOOP9

LOOP8: SETB PSW.5 ;给标志位F0置1

LJMP WAIT ;继续接收数据

参考下!

求一份红外遥控程序(发射和接受)汇编。。。谢谢

ORG 0000H

AJMP MAIN

ORG 0003H ;外部中断P3.2脚INT0入口地址

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

ORG 0100H

MAIN: SETB EA

SETB IT0

SETB EX0

AJMP $

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

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

MOV R6,#5

SB: ACALL YS1 ;调用882微秒延时子程序

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

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

;---------------以上完成对遥控信号引导码的 4500 微秒的初始低电平信号的识别!!!!!

JNB P3.2, $ ;等待高电平避开 4.5 毫秒低电平引导脉冲

ACALL YS2 ;延时4.74毫秒避开 4.5 毫秒的结果码

;---------------以上是对引导码的 4500 微秒高电平的初始识别!!!!!

;-------------------------------------------------------------------------

MOV R7,#16 ;忽略前16位系统识别码 (即地址码)

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

LCALL YS1 ;高电平开始后用882微秒的时间延时去判断信号此时的高低电平状态

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

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

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

UUUA: DJNZ R7,JJJJA

;--------------------------------------------------------------------------

MOV R1,#1AH ;设定1AH为起始RAM区

MOV R2,#2 ;接收从1AH到1BH的2个内存,用于存放操作码 (即数据码) 和操作反码

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

JJJJ: JNB P3.2,$ ;等待 数据码 第一位的高电平信号

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

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

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

LCALL YS3 ;检测到高电平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位数据反码,存放在1AH/1BH中

MOV A,1AH

CPL A ;对1AH取反后和1BH比较

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

;---------------------------------------------------------------------

MOV P0,1AH ;将按键的键值通过P1口的8个LED显示出来!

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

LCALL YS2

LCALL YS2

LCALL YS2

SETB P2.1 ;蜂鸣器停止

EXIT: SETB EA ;允许中断

RETI ;退出解码子程序

;-------------------------延时子程序---------------------------------

YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒

D1: MOV R5,#20

DJNZ R5,$

DJNZ R4,D1

RET

YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒

D2: MOV R5,#235

DJNZ R5,$

DJNZ R4,D2

RET

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

D3:MOV R5,#248

DJNZ R5,$

DJNZ R4,D3

RET

END

发表评论

评论列表

  • 性许妄愿(2022-06-28 20:39:50)回复取消回复

    CALL D10MS MOV A , P0 CPL A ANL A , #OFFH JZ BB1

  • 惑心鸽吻(2022-06-29 04:11:17)回复取消回复

    ;标志位F0清零了吗? JNB RB8 ,LOOP8 ;数据接收完了吗?LOOP9 MOV @RO ,A

  • 绿邪好倦(2022-06-28 23:25:33)回复取消回复

    MOV P2 ,#89H LJMP KUP1K0Y06 CJNE A ,#20,K0Y07 MOV P2 ,#89H

  • 绿邪妄愿(2022-06-29 05:40:22)回复取消回复

    r i; for (i=0;i100;i++) { delay(5); BEEP=!BEEP; } BEEP=1;}void delay(unsigned char x)//x*0.14MS{ unsigned char i