c51单片机红外解码程序.docx

上传人:b****7 文档编号:11410205 上传时间:2023-02-28 格式:DOCX 页数:24 大小:61.55KB
下载 相关 举报
c51单片机红外解码程序.docx_第1页
第1页 / 共24页
c51单片机红外解码程序.docx_第2页
第2页 / 共24页
c51单片机红外解码程序.docx_第3页
第3页 / 共24页
c51单片机红外解码程序.docx_第4页
第4页 / 共24页
c51单片机红外解码程序.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

c51单片机红外解码程序.docx

《c51单片机红外解码程序.docx》由会员分享,可在线阅读,更多相关《c51单片机红外解码程序.docx(24页珍藏版)》请在冰豆网上搜索。

c51单片机红外解码程序.docx

c51单片机红外解码程序

c51单片机红外解码程序-汇

编版和c语言版(总19页)

-CAL-FENGHAL-(YICAI)-CompanyOne1

■CAL■本页仅作为文档封面,使用请直接删除

利用程序判电平和时间进行解码,缺点是浪费系统软件资源;优点是对系统硬件要求稍低

ORG

0000H

TOZD

BIT

20H.2

XH

BIT

P3.3

;红外接收头数据接口

RS

BIT

P2.3

RW

BIT

P2.4

E

BIT

P2.5

BB

BIT

P3.6

ORG

0000H

AJMP

MAIN

ORG

000BH

;T0中断入口

LJMP

TOZDCX

ORG

01OOH

;主程序首地址

MAIN:

LCALL

CSH

MOV

DPTR,#TAB

;总查表

SETB

EA

;T0中断设定

SETB

ETO

MOV

TMOD,#01H

DDXH:

;信号接收前准备

SETB

P2.0

;关信号指示灯

MOV

PO,#OFFH

CLR

TRO

;关丁0中断

CLR

TOZD

;接收信号时间判断

MOV

Ro,#4

;延时计数

MOVTHO,#OOH

MOVTLO,#00H

;=二======二解码主要过程======关键

JB

XH,$

;等待电平变低,

解码从这开始

CLR

P2.0

;开信号指示灯,

表示正在接收信号

MOV

P0,#8EH

SETB

TRO

;开丁0中断

LCALL

YS3MS

JB

XH,DDXH

;干扰检测

LCALL

YS3MS

JB

XH,DDXH

;干扰检测

DD1:

JB

TOZD,DDXH

;是否超出接收允许时间

JNB

XH,DD1

;等待电平变高

LCALL

YS3MS

JNB

XH,DDXH

;干扰检测

DD2:

JB

TOZD,DDXH

;是否超出接收允许时间

JB

XH,DD2

;等待电平变低

JSSJ:

;信号确认,开始接收数据

MOV

RO,#30H

ZJ:

;接收一个字节数据

MOV

R2,#8

WEI:

;位数据,分辩0和1

JB

TOZD,DDXH

;是否超出接收允许时间

JNB

XH,WEI

;等待电平变高

LCALL

YS845

MOV

C,XH

;取位数据

RRC

A

DD3:

JB

TOZD,DDXH

;是否超出接收允许时间

JB

XH,DD3

;等待电平变低,为1的高电平提供过度

DJNZ

R2,WEI

;8位数据是否接收完

MOV

@R0,A

INC

RO

CJNE

RO,#34H,ZJ

;四字节数据是否接收完

MOV

A,33H

CPL

A

CJNE

A,32H,DDXH

;键值确认,解码

MOV

R4,A

=====这里已经取出键值,存在R4中

MOVR7,#100;

TSY:

MOV

DJNZ

CPL

R6,#255

R6,$

BB

MOV

A,#OCDH

LCALL

YJP.XZL

MOV

A,R4

MOV

B,#1OH

DIV

AB

MOVC

A,©A+DPTR

LCALL

YJP.XSJ

MOV

A,#OCEH

DJNZR7,TSY

;键值高位输岀

;键值低位输岀

 

LCALL

YJP.XZL

MOV

A,B

MOVC

A,©A+DPTR

LCALL

YJP.XSJ

LCALL

DYBF

LJMP

DDXH

YS845:

MOV

R7,#255

DJNZ

R7,$

MOV

R7,#163

DJNZ

R7,$

RET

YS3MS:

MOV

R7,#8

DDD:

MOV

R6,#255

DJNZ

R6,$

DJNZ

R7,DDD

RET

TOZDCX:

MOVTLO,#OOH

MOVTHO,#OOH

DJNZR5,TOFH

SETBTOZD

TOFH:

调用灯控制子程序返还等待下一次信号

延时845微秒

;延时3ms

;TO中断程序

RETI

;二=======以下是多余部分

MOV

A,#OCOH

LCALL

YJP.XZL

MOV

A,30H

MOV

B,#10H

DIV

AB

MOVC

A,©A+DPTR

LCALL

YJP.XSJ

MOV

A,#OC1H

LCALL

YJP.XZL

MOV

A,B

MOVC

A,©A+DPTR

LCALL

YJP.XSJ

MOV

A,#0C4H

LCALL

YJP.XZL

DYBF:

;用号码前高位输出

;用户码前低位输岀

;用户码后高位输出

 

MOVA,31H

MOVB,#1OH

DIVAB

MOVCA,@A+DPTR

LCALLYJP_XSJ

MOVA,#0C5H;用户码后低位输出

LCALLYJP.XZL

MOVA,B

MOVCA,©A+DPTR

LCALLYJP.XSJ

;二二二二二=二二二二二此处专门针对我的开发板和遥控,不是解码的关键,只是一种应用举例

MOV

A,R4

CJNE

A,#0CH,BAI

;是否1号键按下

CPL

P1.0

;点亮1号灯

BA1:

CJNE

A,#18H,BA2

;是否2号键按下

CPL

Pl.1

;点亮1号灯

BA2:

CJNE

A,#5EH,BA3

;是否3号键按下

CPL

Pl.2

;点亮1号灯

BA3:

CJNE

A,#08H,BA4

;是否4号键按下

CPL

Pl.3

;点亮1号灯

BA4:

CJNE

A,#1CH,BA5

;是否5号键按下

CPL

Pl.4

;点亮1号灯

BA5:

CJNE

A,#5AH,BA6

;是否6号键按下

CPL

Pl.5

;点亮1号灯

BA6:

CJNE

A,#42H,BA7

;是否7号键按下

CPL

Pl.6

;点亮1号灯

BA7:

CJNE

A,#52H,BAB

;是否8号键按下

CPL

BAB:

RET

CSH:

Pl.7

;点亮1号灯

二======液晶初始化

MOVA,#00111000B

LCALLYJP.XZL

MOVA,#00001100B不闪烁

LCALLYJP.XZL

;8位数据,双行显示,5-7字型

;调用写液晶指令

;显示屏开启,光标出现在地址计数器位置,光标

;调用写液晶指令

MOV扎#0000011OBLCALLYJP.XZL

MOVA,#81H;

LCALLYJP.XZL

MOVA,#4CH

LCALLYJP_XSJ

MOVA,#83H;

LCALLYJP.XZL

MOVA,#47H

LCALLYJP.XSJ

MOVA,#85H;

LCALLYJP.XZL

MOVA,#58H

LCALLYJP.XSJ

MOVA,#88H

LCALLYJP.XZL

MOVA,#5AH

LCALLYJP_XSJ

MOVA,#89H

LCALLYJP.XZL

MOVA,#68H

LCALLYJP.XSJ

MOVA,#8AH;

LCALLYJP.XZL

MOVA,#69H

LCALLYJP.XSJ

MOVA,#8CH

LCALLYJP.XZL

MOVA,#5AH

LCALLYJP.XSJ

MOVA,#8DH

LCALLYJP.XZL

MOVA,#61H

LCALLYJP.XSJ

MOVA,#8EH;

LCALLYJP.XZL

MOVA,#6FH

LCALLYJP.XSJ

MOVA,#0C2H

LCALLYJP.XZL

MOVA,#48H

LCALLYJP.XSJ

MOVA,#0C6H

LCALLYJP_XZL

;光标右移一格,AC值加一,字符全部不动

;调用写液晶指令

丄的ASCII码

<的ASCII码

序的ASCII码

f

之的ASCII码

9

山的ASCII码

;i的ASCII码

9

之的ASCII码

9

g的ASCII码

;o的ASCII码

9

⑴的ASCII码

LCALLYJP_XSJ

RET

;====二写指令到液晶二======

YJP.XZL:

LCALLCHECK_BUSY;查询忙碌状态

CLRE

CLRRS

CLRRW

SETBE

MOVPO,A;写指令

CLRE

RET

;=====二写数据到液晶二=======

YJP.XSJ:

LCALLCHECK_BUSY;查询忙碌状态

CLRE

SETBRS

CLRRW

SETBE

MOVPO,A;写数据

CLRE

RET

;====二查询忙碌标志二======

CHECK_BUSY:

PUSHACC

BUSY.LOOP:

CLRE

SETB

RW

CLR

RS

SETB

E

MOV

A,PO;读取状态

JB

pO.7,BUSY.LOOP

POP

ACC

LCALLDEL

RET

DEL:

MOVR6,#5

LI:

MOVR7,#248

DJNZR7,$

DJNZR6,L1

RET

TAB:

DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46H

END

中断加定时器

c语言版

 

优点:

完全是状态解码,极少的占用系统(CPU),随时都可以解码,而不管系统此时运行到何处。

占用系统两个硬件资源,一个外部中断和一个定时器。

•I••1••I••I••I••I••I••I••I••1••I••I••I••I••I••I••I••1••I••I••I••I••I••I••I••1••I••I••I••I••I••I••I••1••I••I••I••I••I••I••I••1••I••I••I••I••I••I••I••1••I••I••I••I•

********六哥红夕卜解码程序********************************

•|••4••j••||••4••1••1••|••4••j••|••j••4••1••1••j••j••j••|••j••4••1••1••j••j••j••|••j••4••1••1••j••j••j••|••j••4••1••1••j••j••j••|••j••4••1••1••j••j••j••|••j••4••1••4•

#include"STC15Fxxxx.H"

/

fffvgwviwviwviwvawvTwviwviwviwviwvTWviwvawvawviwviwviwviwvTWviwvawvawviwviwviwviwvTWviwvawvawviwviwviwviwvTWviwvawvawviwviwviwviwvTWviwvawvawviwviwviwviw

/////用户配置区:

#define

xi_tong_plini

振频率设定

如你的系统晶振频率是12MHz,则写

#define

jan_zhi

Pl

///解码输出二进制端口,解码成功则从该

端口输岀键值的二进制

sbit

zhi_s=

P5"5;

///解码成功标志,解码成功一次该端口取

反一次

////外部中断

#define

zd_rkdz

interrupt

0///中断入口设置

#define

zd_cffs

ITO

///中断触发方式设置

#define

zd_dk

EXO

///中断打开设置

////

ttdefinestc.dsqszAUXR&二0x7F;//定时器时钟12T模式,不需要可在AUXR....前加〃

/

fffawvTwvawv^wviwvTwv^wvawvTwvTwvawv^wviwvTwv^wvawvTwvTwvawv^wviwvTwv^wvawvTwvTwvawv^wviwvTwv^wvawvTwvTwvawv^wviwvTwv^wvawvTwvTwvawv^wviwvTwv^wvawvawviw

•'••••»••»••»••"••»••»••»••»••»••»••»••"••»••»••»••»••»••»••»••"••»••»••»••»••»••»••»••"••»••»••»••»••»••»••»••"••»••»••»••»••»••»••»••"••»••»••»••»••»••»••»••"••»••»••»••»••»••»••»••"••»••»••»••»•

•I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I•

和<本程序使用外部中断加定时器来实现红外解码,占用系统软件资*************源极少,硬件方面占用了一个外部中断,定时器中断还可以进行********材***一些简单的运用,软件部分可以做很多的动作,就看你发挥了!

********

•|••|••1••|••4••4••|••|••|••|••1••|••4••4••|••|••|••|••1••|••4••4••|••|••|••|••1••|••4••4••|||••|••1••|••4••4••|||••|••1••|••4••4••|||••|••1••|••4••4••|||••|••1••|••4••4••|||••|•

^defineshi_jian定时器设置,请勿更改

unsignedcharhwyhmh,hwyhml,hwjz,hwsj,hwjmws;///全局变量bithwjmok,yxjm;///全局变量,红外解码OK,允许解码

voidmain(void)

EA二1;zd_cffs二1;zd_dk二1;

ETO二1;stc_dsqszTMOD&二OxFO;TMOD|=0x01;while

(1)

{if(hwjmok){hwjmok=0;jan_zhi=hwjz;zhis二、zhis;}

}

}

THO二0;

TRO二1;///开启TO

if(a>shi_jian_*13000&&a

{

hwsj=0;

hwjmws=32;

yxjm=l:

}

else辻(yxjm)///ifl分支1.已收到引导码,允许解码

{

if(a>shi_jian_*l1000&&a

判重复码U-12ms

{

hwjmok=l;

}

else///if2分支3。

否则解码,取位

{

hwjmws一;

////////////////////////////////////////////////////////

辻(a>shi_jian_*2000&&a

2.4ms

{

hwsj»=l;

hwsj1=0x80;

}

else辻(a>shi_jian_*1000&&a

1.3ms

{hwsj»=l;

}

else

{

hwjmws=32;

yxjnFO;//清除允许解码标志

TRO二0;//关闭TO

}

//////////////////////////////////////////////////////////

}

switch(hwjmws)

{case24:

{

hwyhmh=hwsj;

hwsj=0;

}

break;

case16:

{hwyhml=hwsj:

hwsj=O;}break;

case8:

{hwjz=hwsj;

hwsj=0;}

break;

case0:

{if(hwjz='hwsj)

{hwjmok=l;

TL0=shi_jian_*12000%256;

THO二shi_jian」12000/256;}

}

break;

default:

;}

}

else;

}

中断加定时器-一汇编版

•I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I•

********六哥红夕卜解码程序********************************

••1••'••"••"••"••»••"•••••»••'••"••"••"••»••"•••••»••'••"••"••"••»••"•••••»••'••"••"••"••»••"•••••»••'••"••"••"••»••"•••••»••'••"••"••"••»••"•••••»••'••"••"••"••»••"•

•I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I•

•»••"••"••»•••••»••"••"••»••"••"••»•••••»••"••"••»••"••"••»•••••»••"••"••»••"••"••»•••••»••"••"••»••"••"••»•••••»••"••"••»••"••"••»•••••»••"••"••»••"••"••

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1