文档库 最新最全的文档下载
当前位置:文档库 › c51单片机红外解码程序-汇编版和c语言版

c51单片机红外解码程序-汇编版和c语言版

c51单片机红外解码程序-汇编版和c语言版
c51单片机红外解码程序-汇编版和c语言版

纯软件解码 --- 汇编版

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

ORG 0000H

T0ZD 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 T0ZDCX

ORG 0100H ;主程序首地址

MAIN:

LCALL CSH

MOV DPTR,#TAB ;总查表

SETB EA ;T0中断设定

SETB ET0

MOV TMOD,#01H

DDXH: ;信号接收前准备

SETB P2.0 ;关信号指示灯

MOV P0,#0FFH

CLR TR0 ;关T0中断

CLR T0ZD ;接收信号时间判断

MOV R5,#4 ;延时计数

MOV TH0,#00H

MOV TL0,#00H

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

=================================================== =========

JB XH,$ ;等待电平变低,解码从这开始

CLR P2.0 ;开信号指示灯,表示正在接收信号

MOV P0,#8EH

SETB TR0 ;开T0中断

LCALL YS3MS

JB XH,DDXH ;干扰检测

LCALL YS3MS

JB XH,DDXH ;干扰检测

DD1:

JB T0ZD,DDXH ;是否超出接收允许时间

JNB XH,DD1 ;等待电平变高

LCALL YS3MS

JNB XH,DDXH ;干扰检测

DD2:

JB T0ZD,DDXH ;是否超出接收允许时间

JB XH,DD2 ;等待电平变低

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

MOV R0,#30H

ZJ: ;接收一个字节数据

MOV R2,#8

WEI: ;位数据,分辩0和1

JB T0ZD,DDXH ;是否超出接收允许时间

JNB XH,WEI ;等待电平变高

LCALL YS845

MOV C,XH ;取位数据

RRC A

DD3:

JB T0ZD,DDXH ;是否超出接收允许时间

JB XH,DD3 ;等待电平变低,为1的高电平提供过度DJNZ R2,WEI ;8位数据是否接收完

MOV @R0,A

INC R0

CJNE R0,#34H,ZJ ;四字节数据是否接收完

MOV A,33H

CPL A

CJNE A,32H,DDXH ;键值确认,解码

MOV R4,A

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

================================================== MOV R7,#100;

TSY:MOV R6,#255

DJNZ R6,$

CPL BB

DJNZ R7,TSY

MOV A,#0CDH ;键值高位输出

LCALL YJP_XZL

MOV A,R4

MOV B,#10H

DIV AB

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0CEH ;键值低位输出

LCALL YJP_XZL

MOV A,B

MOVC A,@A+DPTR

LCALL YJP_XSJ ;

LCALL DYBF ;调用灯控制子程序

LJMP DDXH ;返还等待下一次信号

YS845: ;延时845微秒

MOV R7,#255

DJNZ R7,$

MOV R7,#165

DJNZ R7,$

RET

YS3MS: ;延时3ms

MOV R7,#8

DDD:

MOV R6,#255

DJNZ R6,$

DJNZ R7,DDD

RET

T0ZDCX: ;T0中断程序

MOV TL0,#00H

MOV TH0,#00H

DJNZ R5,T0FH

SETB T0ZD

T0FH:

RETI

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

=================================================== ========================

DYBF:

MOV A,#0C0H ;用号码前高位输出LCALL YJP_XZL

MOV A,30H

MOV B,#10H

DIV AB

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0C1H ;用户码前低位输出LCALL YJP_XZL

MOV A,B

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0C4H ;用户码后高位输出LCALL YJP_XZL

MOV A,31H

MOV B,#10H

DIV AB

MOVC A,@A+DPTR

LCALL YJP_XSJ

MOV A,#0C5H ;用户码后低位输出LCALL YJP_XZL

MOV A,B

MOVC A,@A+DPTR

LCALL YJP_XSJ

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

MOV A,R4

CJNE A,#0CH,BA1 ;是否1号键按下

CPL P1.0 ;点亮1号灯

BA1:

CJNE A,#18H,BA2 ;是否2号键按下

CPL P1.1 ;点亮1号灯

BA2:

CJNE A,#5EH,BA3 ;是否3号键按下

CPL P1.2 ;点亮1号灯

BA3:

CJNE A,#08H,BA4 ;是否4号键按下

CPL P1.3 ;点亮1号灯

BA4:

CJNE A,#1CH,BA5 ;是否5号键按下

CPL P1.4 ;点亮1号灯

BA5:

CJNE A,#5AH,BA6 ;是否6号键按下

CPL P1.5 ;点亮1号灯

BA6:

CJNE A,#42H,BA7 ;是否7号键按下

CPL P1.6 ;点亮1号灯

BA7:

CJNE A,#52H,BAB ;是否8号键按下

CPL P1.7 ;点亮1号灯

BAB:RET

CSH:

;=============液晶初始化===============

MOV A, #00111000B ;8位数据,双行显示,5-7字型

LCALL YJP_XZL ;调用写液晶指令

MOV A, #00001100B ;显示屏开启,光标出现在地址计数器位置,光标不闪烁LCALL YJP_XZL ;调用写液晶指令

MOV A, #00000110B ;光标右移一格,AC值加一,字符全部不动

LCALL YJP_XZL ;调用写液晶指令

MOV A,#81H ;

LCALL YJP_XZL

MOV A, #4CH ;L的ASCII码

LCALL YJP_XSJ

MOV A,#83H ;

LCALL YJP_XZL

MOV A, #47H ;G的ASCII码

LCALL YJP_XSJ

MOV A,#85H ;

LCALL YJP_XZL

MOV A, #58H ;X的ASCII码

LCALL YJP_XSJ

MOV A,#88H ;

LCALL YJP_XZL

MOV A, #5AH ;Z的ASCII码

MOV A,#89H ;

LCALL YJP_XZL

MOV A, #68H ;h的ASCII码LCALL YJP_XSJ

MOV A,#8AH ;

LCALL YJP_XZL

MOV A, #69H ;i的ASCII码LCALL YJP_XSJ

MOV A,#8CH ;

LCALL YJP_XZL

MOV A, #5AH ;Z的ASCII码LCALL YJP_XSJ

MOV A,#8DH ;

LCALL YJP_XZL

MOV A, #61H ;a的ASCII码LCALL YJP_XSJ

MOV A,#8EH ;

LCALL YJP_XZL

MOV A, #6FH ;o的ASCII码LCALL YJP_XSJ

MOV A,#0C2H ;

LCALL YJP_XZL

MOV A, #48H ;H的ASCII码LCALL YJP_XSJ

MOV A,#0C6H ;

LCALL YJP_XZL

MOV A, #48H ;H的ASCII码

MOV A,#0CAH ;

LCALL YJP_XZL

MOV A, #4AH ;J的ASCII码

LCALL YJP_XSJ

MOV A,#0CBH ;

LCALL YJP_XZL

MOV A, #5AH ;Z的ASCII码

LCALL YJP_XSJ

MOV A,#0CCH ;

LCALL YJP_XZL

MOV A, #3AH ;:的ASCII码

LCALL YJP_XSJ

MOV A,#0CFH ;

LCALL YJP_XZL

MOV A, #48H ;H的ASCII码

LCALL YJP_XSJ

RET

;=========写指令到液晶============= YJP_XZL:

LCALL CHECK_BUSY;查询忙碌状态

CLR E

CLR RS

CLR RW

SETB E

MOV P0,A;写指令

CLR E

RET

;==========写数据到液晶============== YJP_XSJ:

LCALL CHECK_BUSY;查询忙碌状态

CLR E

SETB RS

CLR RW

SETB E

MOV P0,A;写数据

CLR E

RET

;=========查询忙碌标志============ CHECK_BUSY:

PUSH ACC

BUSY_LOOP:

CLR E

SETB RW

CLR RS

SETB E

MOV A,P0;读取状态

JB p0.7,BUSY_LOOP

POP ACC

LCALL DEL

RET

DEL: MOV R6,#5

L1: MOV R7,#248

DJNZ R7,$

DJNZ R6,L1

RET

TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

DB 41H,42H,43H,44H,45H,46H

END

中断加定时器---C语言版

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

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

/******************************************************

********六哥红外解码程序********************************

********************************************************/

#include"STC15Fxxxx.H"

///**************************************************

/////用户配置区:

#define xi_tong_pl 12000000 ///晶振频率设定如你的系统晶振频率是12MHz,则写12000000

#define jan_zhi P1 ///解码输出二进制端口,解码成功则从该端口输出键值的二进制

sbit zhi_s = P5^5; ///解码成功标志,解码成功一次该端口取反一次

////外部中断

#define zd_rkdz interrupt 0 ///中断入口设置

#define zd_cffs IT0 ///中断触发方式设置

#define zd_dk EX0 ///中断打开设置

////

#define stc_dsqsz AUXR &= 0x7F;//定时器时钟12T模式,不需要可在AUXR....前加//

///**************************************************

/****************************************************************** *****本程序使用外部中断加定时器来实现红外解码,占用系统软件资********

*****源极少,硬件方面占用了一个外部中断,定时器中断还可以进行********

*****一些简单的运用,软件部分可以做很多的动作,就看你发挥了!********

******************************************************************/

#define shi_jian_ (xi_tong_pl/12000000)///定时器设置,请勿更改

unsigned char hwyhmh,hwyhml,hwjz,hwsj,hwjmws;///全局变量

bit hwjmok,yxjm;///全局变量,红外解码OK,允许解码

void main(void)

{

EA=1; //总中断打开

zd_cffs=1; //外部中断_边沿触发方式

zd_dk=1; //外部中断_打开

ET0=1; //定时器中断打开

stc_dsqsz

TMOD &= 0xF0; //设置定时器模式

TMOD |= 0x01; //设置定时器模式

while(1)

{if(hwjmok)

{hwjmok=0;

jan_zhi=hwjz;

zhi_s=~zhi_s;

}

}

}

/*------------------------------------------------

定时器0中断子程序

------------------------------------------------*/

void T0ZDCX(void) interrupt 1 using 3

{

yxjm=0; //未收到重复码清除解码允许标志

hwjz=0;

TR0=0; //关闭定时器

}

/********************************************************* 中断方式红外接收程序

***********************************************************/ void ZDhwjsCX(void) zd_rkdz using 3

{

unsigned int a=TH0*256+TL0;

TL0=0;

TH0=0;

TR0=1; ///开启T0

if(a>shi_jian_*13000&&a

{

hwsj=0;

hwjmws=32;

yxjm=1;

}

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

{

if(a>shi_jian_*11000&&a

{

hwjmok=1;

}

else ///if2分支3。否则解码,取位

{

hwjmws--;

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

if (a>shi_jian_*2000&&a

{

hwsj>>=1;

hwsj|=0x80;

}

else if (a>shi_jian_*1000&&a

hwsj>>=1;

}

else

{

hwjmws=32;

yxjm=0; //清除允许解码标志

TR0=0; //关闭T0

}

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

}

switch(hwjmws)

{case 24:{

hwyhmh=hwsj;

hwsj=0;

}

break;

case 16:{hwyhml=hwsj;

hwsj=0;}

break;

case 8:{hwjz=hwsj;

hwsj=0;}

break;

case 0:{if(hwjz==~hwsj)

{hwjmok=1;

TL0=shi_jian_*12000%256;

TH0=shi_jian_*12000/256;

}

}

break;

default:;}

}

else;

}

中断加定时器---汇编版

;****************************************************** ;********六哥红外解码程序********************************

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

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

hwyhmh data 7fh

hwyhml data 7eh

hwjz data 7dh

hwsj data 7ch

DSQ_ZDCS data 7bh

ZDCS DATA 7AH

hwjmok bit 20h.0

yxjm bit 20h.1

hwjmwei bit 20h.2

hwjmkg BIT 20H.3

HWJST BIT P3.3

ORG 0000H

AJMP MAIN

ORG 0013H

LJMP WBZD1

ORG 000BH

LJMP DSQ_0

ORG 0050H

MAIN:

SETB EA

SETB IT1

SETB EX1

SETB ET0

MOV TMOD,#01H

CLR hwjmkg

CLR yxjm

CLR hwjmok

HHHH:

JB hwjmok,jm_cg ;JBC:为1跳转并把该位清零,为0则顺序执行 ;此部分可写其他程序,不会影响接收

LJMP HHHH

51单片机流水灯C语言源代码

#include #include #define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table2[]={ 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00}; uchar code table3[]={ 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff}; uchar code table4[]={ 0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xe7,0xff}; uchar code table5[]={ 0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0xff}; uchar code table6[]={ 0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1(); void lsd2(); void lsd3(); void lsd4(); void lsd5(); void lsd6(); void lsd7(); void lsd8(); void lsd9(); void lsd10(); void lsd11(); void lsd12(); main() { while(1) { lsd1(); lsd2(); lsd3(); lsd4();

单片机实验报告简易报警器

简易报警器 一、本次根据单片机课程设计题目与要求,我选择的是设计一个简易报警器。 二、课程设计要求:自制一个单片机最小系统,包括串口下载、复位电路,采用两路外部中断输入门禁和红外探测两路信号(采用两个小按键模拟),中断信号输入后能将报警信息在四位一体数码管上显示,并输出声光报警信号。 三、设计所需的硬件:的无极性电容五个;10uF的极性电容两个;发光二极管两个;三极管9013四个;千欧的排阻一个;100,1k,10k 的电阻若干;芯片插座若干;的晶振一个;单片机STC89C54RD芯片一块;MAX232串口芯片一块;导线若干; 四、课程设计要求是用按键红外探测和输入门禁。但是由于实验室设备的条件,我采用的是红绿两个二极管代替红外探测的发光显示和输入门禁的报警装置。 五、总体设计思想

六、晶振电路 振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。石英晶体振荡器的作用是产生时间标准信号。因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。 七、按键模块

鉴于使用中断电路会增加硬件电路的复杂度,本电路采用独立按键的方法,只需在程序中加入扫描程序即可。其中接按键光标移位,接按键时间加数,接按键时间减数,接按键模拟红外探测,接按键模拟输入门禁,。 九、SPEAKER电路 报警器装置的原理就是利用出来的高低电平交换使得扬声器发出声音。但是由于实验室的器材有限,所以我们改用了发光二极管来代替SPEAKER电路。

十、实验仿真程序如下: #include <> #include <> #define uchar unsigned char #define uint unsigned int uchar code table_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x00}; uchar code table_select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar table_buffer[]={0,0}; uchar count0,count1; sbit LEDREDCON=P0^0; sbit LEDGREENCON=P0^1; sbit spe=P0^2; sbit Kint0=P3^2;

(完整版)基于单片机的红外报警器的设计

微机原理与单片机系统课程设计 专 班 姓 名: 学 兰州交通大学自动化与电气工程学院 2014 年 12 月 31 日

基于51单片机的红外防盗报警器的设计 1设计说明 1.1设计目的 该设计以单片机AT89C51芯片为核心,加上必要的外围电路,构成了一个基于单片机的红外线防盗报警器。功能主要通过软件编程来实现,降低了硬件电路的复杂性和制作成本。此外,设计中所采用的红外线是不可见光,有很强的隐蔽性和保密性,以满足现代人们住宅防盗的需要。 1.2设计要求 该设计要求当热释电红外线传感器探测到人体辐射的红外线时,单片机控制电路启动声光报警并显示报警次数。此外,用户还可以设定报警时间并手动解除报警。 1.3设计方法 该设计以AT89C51单片机为核心,由时钟电路、复位电路、外部触发电路、报警时间选择电路、声光报警电路、报警次数显示电路和中断报警电路共同组成报警系统。系统具有显示报警次数,设定报警时间,手动解除报警的功能。 2设计方案及原理 2.1设计方案简述 该设计使用AT89C51单片机芯片控制电路,通过热释电红外传感器采集外部触发信号,采用7段LED数码管显示报警次数,采用蜂鸣器和红色发光二极管实现声光报警,手动解除报警功能由单片机外部中断实现,报警时间由单片机内部定时器实现。 2.2热释电红外传感器简单介绍 热释电红外线(PIR)传感器是80年代发展起来的一种新型高灵敏度探测元件。是一种能检测人体发射的红外线而输出电信号的传感器,它能组成防入侵报警器或各种自动化节能装置。它能以非接触形式检测出人体辐射的红外线能量的变化,并将其转换成电压信号输出。将这个电压信号加以放大,便可驱动各种控制电路。 2.3 PIR的原理特性 热释电红外线传感器主要是由一种高热电系数制成的探测元件,在每个探测器内装入一个或两个探测元件,并将两个探测元件以反极性串联,以抑制由于自

基于51单片机的红外遥控器设计

天津职业大学 二○一五~二○一六学年第1学期 电子信息工程学院 通信系统综合实训报告书 课程名称:通信系统综合实训 班级:通信技术(5)班 学号:1304045640 1304045641 1304045646姓名:韩美红季圆圆陈真真指导教师:崔雁松 2015年11月17日

一、任务要求 利用C51单片机设计开发一套红外线收发、显示系统。 具体要求: ●编写相关程序(汇编、C语言均可); ●用Proteus绘制电路图并仿真实现基本功能; ●制作出实物 二、需求分析(系统的应用场景、环境条件、参数等) 现在各种红外线技术已经源源不断进入我们的生活中,在很多场合发挥着作用。 机场、宾馆、商场等的自动门,会在人进出时自动地开启和关闭。原来,在自动门的一侧有一个红外线光源,发射的红外线照射到另一侧的光电管上,红外线是人体察觉不到的。当人走到大门口,身体挡住红外线,电管接收不到红外线了。根据设计好的指令,触发相应开关,就把门打开了。等人进去后,光电管又可以接到红外线,恢复原来的线路,门又会自动关闭。因此这种光电管被称为“电眼”,在许多自动控制设备中大显身手。 在家庭中,许多电子设备如彩色电视、空调、冰箱和音响等,都使用了各种“红外线遥控器”。利用它我们可以非常方便的转换电视频道或设定空调的温度档次。 三、概要设计(系统结构框图/系统工作说明流程图) 红外线收发、显示系统硬件由以下几部分组成:红外遥控器,51单片机最小系统,接收放大器一体集成红外接收头,LED灯显示电路。 红外线接收是把遥控器发送的数据(已调信号)转换成一定格式的控制指令脉冲(调制信号、基带信号),是完成红外线的接收、放大、解调,还原成发射格式(高、低电位刚好相反)的脉冲信号。这些工作通常由一体化的接收头来完成,输出TTL兼容电平。最后通过解码把脉冲信号转换成数据,从而实现数据的传输。 红外遥控系统电路框图

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在Keil安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void) { while(1) { P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效 } } 就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。 while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其 实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在 P1_1--P1_7上再接7个LED即可。例程如下: #include sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7; void Delay(unsigned char a) { unsigned char i; while( --a != 0) {

基于单片机控制的红外线防盗报警器的设计

目录 1 绪论 (3) 1.1 研究目的和意义 (3) 1.2 研究内容 (3) 1.3研究方法和技术路线 (3) 1.4 预期的研究目标 (4) 2 系统总体设计 (4) 2.1系统概述 (4) 2.2 主要器件介绍 (6) 2.2.1 热释电红外传感器概述 (6) 2.2.2 AT89C51 单片机概述 (9) 2.3 总体设计框图 (14) 3 系统硬件设计 (15) 3.1信号检测与放大模块 (15) 3.1.1电路实现功能 (15) 3.1.2电路图 (15) 3.1.3电子元件介绍 (15) 3.2 LED显示模块 (16) 3.2.1 电路实现功能 (16) 3.2.2电路图 (16) 3.2.3电子元件介绍 (16) 3.3 报警执行模块 (17) 3.3.1 电路实现功能 (17) 3.3.2电路图 (17) 3.3.3电子元件介绍 (17) 3.4 手工暂停模块 (18) 3.4.1 电路实现功能 (18)

3.4.2电路图 (18) 3.5 晶振与复位模块 (18) 3.5.1 电路实现功能 (18) 3.5.2电路图 (19) 3.5.3电子元件介绍 (19) 4 系统软件设计 (21) 4.1 软件设计介绍 (21) 4.2 主程序设计 (21) 4.2.1 实现功能 (21) 4.2.2 流程图 (21) 4.3 定时中断程序设计 (23) 4.3.1 实现功能 (23) 4.3.2 10s定时流程图 (23) 4.3.3 关键技术 (23) 4.3.4 关键代码: (25) 4.4 解除中断程序设计 (26) 4.4.1 实现功能 (26) 4.4.2 程序流程图 (26) 4.4.3 关键技术 (27) 4.4.4 关键代码 (28) 5 实验结论 (29) 结束语 (30) 附录一 (30) 附录二 (33) 附录三 (33) 参考文献 (34) 致谢 (35)

最简单详细的红外解码程序

#include //包含头文件名 sbit IRIN=P3^2; //定义红外接收头的外部接口,即外部中断0 sbit BEEP=P1^5; //定义蜂鸣器接口,我的在P1^5 unsigned char IRCOM[7]; //定义数组,用来存储红外接收到的数据 void delay(unsigned char x) { //延时子程序unsigned char i; //延时约x*0.14ms while(x--) //不同遥控器应设置不同的参数

{for(i=0;i<13;i++){}} //参数的选择咱们先不管,先看这个 } void beep() { unsigned char i; //蜂鸣器发声子程序 for(i=0;i<100;i++) { delay(4); //这个得看你的蜂鸣器内部是否有振荡源 BEEP=~BEEP; } //如果没有振荡源就应该输入脉冲信号 BEEP=1; }

void IR_IN() interrupt 0 using 0 //外部中断0程序 { unsigned char j,k,n=0; //先定义变量,记住n=0 EX0=0; //禁止中断,以免再次进入中断 delay(15); //延时0.14ms*15=2.1ms if(IRIN==1) //如果在这期间有高电平说明 { //信号不是来自遥控的,返回主程序 EX0=1; return; } while(!IRIN){delay(1);} //死循环,等待9ms前导低电平信号的结束for(j=0;j<4;j++) //一共有4组数据

最经典的51单片机经典流水灯汇编程序

单片机流水灯汇编程序设计 开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 程序A: ;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY;延时1秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY;延时1秒 MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒 AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: MOV R4,#2 L3: MOV R2 ,#250 L1: MOV R3 ,#250 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET END 程序B: ;用移位方式实现流水灯

ajmp main ;跳转到主程序 org 0030h ;主程序起始地址 main: mov a,#0feh ;给A赋值成11111110 loop: mov p1,a ;将A送到P1口,发光二极管低电平点亮 lcall delay ;调用延时子程序 rl a ;累加器A循环左移一位 ajmp loop ;重新送P1显示 delay: mov r3,#20 ;最外层循环二十次 d1: mov r4,#80 ;次外层循环八十次 d2: mov r5,#250 ;最内层循环250次 djnz r5,$ ;总共延时2us*250*80*20=0.8S djnz r4,d2 djnz r3,d1 ret end 51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。 ORG 0 ;程序从0地址开始 START: MOV A,#0FEH ;让ACC的内容为11111110 LOOP: MOV P2,A ;让P2口输出ACC的内容 RR A ;让ACC的内容左移 CALL DELAY ;调用延时子程序 LJMP LOOP ;跳到LOOP处执行 ;0.1秒延时子程序(12MHz晶振)=================== DELAY: MOV R7,#200 ;R7寄存器加载200次数 D1: MOV R6,#250 ;R6寄存器加载250次数 DJNZ R6,$ ;本行执行R6次 DJNZ R7,D1 ;D1循环执行R7次 RET ;返回主程序

基于单片机的报警系统

毕业设计 热释电人体感应红外报警器设计制作 学生学号:141101043 141101066 学生姓名:张飞鹏白堆兑 导师姓名:杜娟 班级机电一体化(2)班专业名称机电一体化 提交日期年月日答辩日期年月日 年月

摘要 热释电红外传感器,它的制作简单、成本低、安装比较方便,而且防盗性能比较稳定,抗干扰能力强、灵敏度高、安全可靠。这种防盗器安装隐蔽,不易被盗贼发现,便于多用户统一管理。本设计包括硬件和软件设计两个部分。硬件部分包括单片机控制模块、红外探头模块、驱动执行报警模块、LED控制模块等部分组成。处理器采用51系列单片机AT89C51,程序使用C语言编写。 关键字:热释电红外传感器、AT89C51、红外线.

目录 一、引言 (4) 二、设计任务分析 (4) 三、技术方案的详细设计(实施) (5) (一)本系统的设计方案 (5) 1.系统概述 (5) (二)硬件电路设计 (5) (三)单片机部分 (6) 1.AT89C51单片机简介 (10) 2.单片机最小系统 (11) 3.按键部分电路 (11) 4.报警电路 (12) 5.红外感应部分 (110) 6.主程序工作流程图 (13) 四、调试及调试中遇到的问题 (14) 五、总结评价 (15) 致谢 (16) 参考文献 (17) 附件一:总体原理图设计 (18) 附件二:实物图 (20) 附件三:程序源代码 (20)

一、引言 随着科技的提高,电子电器飞速发展,人民生活水平有了很大提高。各种高档家电和贵重物品为许多家庭所拥有。然而一些不法分子也越来越多。这点就是因为不法分子看到了大部分人防盗意识不够强所造成的结果。因此越来越多的居民家庭对财产安全问题十分担忧。报警系统这时为人们解决了大部分问题。但是市场上的报警系统大部分是适用于一些大公司的重要机构。其价格昂贵,使普通家庭难以承受。如果设计一种价格低廉,性能可靠、智能化的报警系统,必将在私人财产的防盗领域起到巨大作用。由于红外线是不可见光,隐蔽性能良好,因此在防盗、警戒等安保装置中被广泛应用。而本设计的电路包括硬件和软件两个部分。硬件部分包括红外感应部分与单片机控制部分,整个系统电路可划分为:电源部分、传感器模块部分、单片机控制电路,而单片机控制由最小系统和指示灯电路、报警电路等子模块组成。主要工作由热释电红外感应器完成信息采集、处理、数据传送经过单片机功能设定到达报警模块这一过程。就此设计的核心模块来说,单片机就是设计的中心单元。单片机应用系统也是由硬件和软件组成。硬件包括单片机、输入/输出设备、以及外围应用电路等组成的系统,软件是主要是工作的程序通过编写程序来控制输入的信号。 二、设计任务分析 1.该设计包括硬件和软件设计两个部分。模块划分为数据采集、按键设定、报警等。 2.本红外线防盗报警系统由热释电红外传感器、蜂鸣器、单片机控制电路、LED指示电路及软件组成。 3.系统可实现功能。当人员外出时,可把报警系统设置在外出布防状态,探测器工作起来,当有人闯入时,热释电红外传感器将探测到动作,设置在监测点上的红外探头将人体辐射的红外光谱变换成电信号,红外热释电模块送出TTL 电平至AT89C51单片机,经单片机处理运算后驱动执行报警电路使警号发声。

c51、c52单片机红外线遥控接收解码c程序(可直接使用)

/ 亲,此程序以经过测试,可直接使用!!!/ #include #define uchar unsigned char #define uint unsigned int void delay(uchar x); sbit IRIN = P3^2; uchar IRCOM[4]; void main() { IE = 0x81; TCON = 0x01; IRIN=1; /* 此处可以根据按键码自由编写程序 /以下为3*7遥控按键码/ /(也可以应用与其他类型遥控,本程序只以3*7遥控为例)/ / 0x45 0x46 0x47 / / 0x44 0x40 0x43 / / 0x07 0x15 0x09 / / 0x16 0x19 0x0d / / 0x0c 0x18 0x5e / / 0x08 0x1c 0x5a / / 0x42 0x52 0x4a / 例如: while(1) {switch(IRCOM[2]) {case 0x45: P2=0x7f; break; case 0x44: P2=0xbf; break; case 0x07: P2=0xdf; break; case 0x16: P2=0xef; break; case 0x0c: P2=0xf7; break; case 0x08: P2=0xfb; break; case 0x42: P2=0xfd; break; case 0x52: P2=0xfe; break; case 0x4a: P2=0xff; break; case 0x5a: P2=0x00; break;} } */ while(1); } //end main /**********************************************************/ void IR_IN(void) interrupt 0 //外部中断服务程序 {unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN==1) { EX0 =1;

红外遥控原理及解码程序

红外遥控系统原理及单片机 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成。应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图1 红外线遥控系统框图 2 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC 的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周

期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。 图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反)上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3示。 图3 遥控信号编码波形图 UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。

用单片机控制的LED流水灯设计(电路、程序全部给出)

1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。 2.硬件组成 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATM EL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz 工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。其具体硬件组成如图1所示。 图1 流水灯硬件原理图 从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要

基于51单片机的红外遥控

基于51单片机的红外遥控 红外遥控就是无线遥控的一种方式,本文讲述的红外遥控,采用STC89C52单片机,1838红外接收头与38k红外遥控器。 1838红外接收头: 红外遥控器: 原理: 红外接收的原理我不赘述,百度文库上不少,我推荐个网址,这篇文章写得比较清楚,也比较全面, 我主要讲下程序的具体意思,在了解原理的基础上,我们知道,当我们在遥控器上每按下一个键,遥控器上的红外发射头都会发出一个32位的编码(32位编码分成4组8位二进制编码,前16位为用户码与用户反码,后16位为数据码与数据反码,用户码表示遥控器类型,数据码表示按键编码),不同的键对应不同的编码,红外接收头接收到这个编码后,发送给单片机,再进行相关操作。 源程序1:(这个程序的功能就是将用户码与用户反码,数据码与数据反码显示在1602液晶上,因为遥控器买回来就是不会说明按键对应什么码值,所以先自己测试,确定每个按 键的码值) #include #include #include #define uint unsigned int #define uchar unsigned char #define _Nop() _nop_() #define TURE 1 #define FALSE 0

/*端口定义*/ sbit lcd_rs_port = P3^5; /*定义LCD控制端口*/ sbit lcd_rw_port = P3^6; sbit lcd_en_port = P3^4; #define lcd_data_port P0 /////////////////////////////////// void delay1 (void)//关闭数码管延时程序 { int k; for (k=0; k<1000; k++); } //////////////////////////////////// uchar code line0[16]={" user: "}; uchar code line1[16]={" data: "}; uchar code lcd_mun_to_char[16]={"0123456789ABCDEF"}; unsigned char irtime;//红外用全局变量 bit irpro_ok,irok; unsigned char IRcord[4];//用来存放用户码、用户反码、数据码、数据反码unsigned char irdata[33];//用来存放32位码值 void ShowString (unsigned char line,char *ptr); ////////////////////////////////////////////// void Delay(unsigned char mS); void Ir_work(void); void Ircordpro(void); void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数 { irtime++; } void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数 { static unsigned char i; static bit startflag; if(startflag){ if(irtime<63&&irtime>=33)//引导码TC9012的头码 i=0; irdata[i]=irtime; irtime=0; i++; if(i==33){ irok=1; i=0; }

红外解码程序详解

//此程序为网上下载后修改,要弄懂的话,可以去看看HT6221的时序图。当然也欢迎在这里留言。 ///C51的红外解码程序,可以根据需要自己修改: //11.0592Mhz #include //根据自己的接线来改 sbit IRIN = P3^2; //红外接收器数据线 sbit led = P3^7; //指示灯 //////////////////////////////////////////// //定义数组IRCOM,分别装解码后得到的数据 //IRCOM[0] 低8位地址码 //IRCOM[1] 高8位地址码 //IRCOM[2] 8位数据码 //IRCOM[3] 8位数据码的反码 ///////////////////////////////////////////// #define uchar unsigned char #define uint unsigned int uchar IRCOM[4]=0; bit flag=0; /********************/ void delay014ms(unsigned char x); //x*0.14MS void IR_init(void); void delay014ms(unsigned char x) //x*0.14MS STC10F04延时约0.15MS { unsigned char i; while(x--) { for (i = 0; i<125; i++) //13 {;} } } /////////////// //初始化 //////////// void IR_init(void) { EA=1; EX0=1; //允许总中断中断,使能 INT0 外部中断 IT0=1; //触发方式为脉冲负边沿触发 IRIN=1; //I/O口初始化

最新五种编程方式实现流水灯的单片机c程序讲课教案

五种编程方式实现流水灯的单片机C程序 //功能:采用顺序结构实现的流水灯控制程序 /*此方式中采用的是字操作(也称为总线操作)*/ #include void delay(unsigned char i); //延时函数声明 void main() //主函数 { while(1) { P1 = 0xfe; //点亮第1个发光二极管,0.000389s delay(200); //延时 P1 = 0xfd; //点亮第2个发光二极管,0.155403s,0.1558 delay(200); //延时 P1 = 0xfb; //点亮第3个发光二极管 delay(200); //延时 P1 = 0xf7; //点亮第4个发光二极管 delay(200); //延时 P1 = 0xef; //点亮第5个发光二极管 delay(200); //延时 P1 = 0xdf; //点亮第6个发光二极管 delay(200); //延时 P1 = 0xbf; //点亮第7个发光二极管 delay(200); //延时 P1 = 0x7f; //点亮第8个发光二极管 delay(200); //延时 } } //函数名:delay //函数功能:实现软件延时 //形式参数:unsigned char i; // i控制空循环的外循环次数,共循环i*255次 //返回值:无 void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{ unsigned char j, k; //定义无符号字符型变量j和k for(k = 0; k < i; k++) //双重for循环语句实现软件延时 for(j = 0; j < 255; j++); } //功能:采用循环结构实现的流水灯控制程序 //此方式中采用的移位,按位取反等操作是位操作 #include //包含头文件REG51.H void delay(unsigned char i); //延时函数声明 void main() //主函数

基于51单片机的家庭热释红外防盗报警系统..

齐齐哈尔大学 综合实践(论文) 题目基于51单片机的家庭热释红外防盗报警系统 学院通信与电子工程学院 专业班级电子121班 学生姓名车贵平 学生学号2012131076 指导教师题原

随着社会经济的飞速发展和人民生活水平的提高,人们对住宅的要求也越来越高,表现在不仅希望拥有舒适、安逸的住所,而且对安全性、智能性等方面也提出了要求。相反地,经济的快速增长也带来了相当大的负面社会效应,城乡、区域收入差距进一步拉大,流动人口也开始迅速增加,盗窃、入室抢劫等刑事案件也呈现出了增长趋势,人们也越来越渴望有一个安全的空间。人们迫切需要一种智能型的家庭防盗报警系统,能可靠的进行日常安全防范工作,即时发现各种险情并通知户主,以便将险情消灭在萌芽状态,这样人们便可安心工作,同时也保证了居民的生命财产不受损失。于是有关家庭、办公室和仓库等处的安全防范和自动报警系统的开发研制日益被科研单位和生产厂家所重视,现在市场上也出现了各种名目繁多的报警装置,但多由于可靠性较差、功能单一或造价高而难于普及。本文着重阐述热释红外防盗报警器的设计过程,了解防盗报警器的实际情况,最后提出了一些现阶段防盗报警器应用发展可采用的策略和应用前景。 关键词:传感器单片机防盗报警器

摘要 0 第1章绪论 (1) 1.1概述 (1) 1.2研究的目的与意义 (1) 1.3研究现状 (3) 第2章硬件介绍 (4) 2.1系统功能的要求 (4) 2.2总体的设计方案 (4) 2.3系统的传感器技术及单片机技术 (5) 第3章报警器硬件设计 (11) 3.1蜂鸣器电路 (11) 3.2电热释红外探测器电路设计 (11) 3.3清单及实物图 (12) 第4章报警器软件设计 (15) 4.1程序语言的分类 (15) 4.2单片机汇编语言程序设计的基本步骤 (15) 4.3汇编语言程序设计方法 (16) 总结 (17) 致谢 (17) 参考文献 (18) 附录1 电路原理图 (19) 附录2 源程序 (20)

红外遥控接收程序

#include "remote.h" UINT IrCode; //高8位为系统码,低八位为数据码 /*************************************************************************** *FUNCTION NAME: DelayIr *CREATE DATE: 2012/6/7 *CREATED BY: XS *FUNCTION: IR采样延时:0.14ms *MODIFY DATE: 2012/6/7 *INPUT: 无 * *RETURN: 无 ***************************************************************************/ void DelayIr(UCHAR timer) { UCHAR i; while(timer--) { for (i = 0; i<13; i++); } } /*************************************************************************** *FUNCTION NAME: RemoteDecode *CREATE DATE: 2012/6/7 *CREATED BY: XS *FUNCTION: IR遥控解码 *MODIFY DATE: 2012/6/7 *INPUT: 无 * *RETURN: 无 ***************************************************************************/ void RemoteDecode(void) { UCHAR i,j,n = 0; UCHAR irDat[4] = {0}; EX0 = 0;

单片机流水灯C语言源程序

单片机流水灯C语言源程序 标题:51单片机流水灯C语言源程序2008-12-06 08:43:05 ************************************************************** 文件名称:flash_led.c 文件说明:流水灯C程序 编写日期:2006年10月5日 程序说明:MCU采用AT89S51,外接12M晶振,P1口输出 *************************************************************/ #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0x01; for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1=~temp; delay(100); //调用延时函数 temp<<=1; } temp=0x80; for(i=0;i<8;i++) //8个流水灯反向逐个闪动 { P1=~temp; delay(100); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P1=temp; delay(100); //调用延时函数 temp<<=1; }

基于单片机的红外报警器设计

刘卉讲师

目录 绪论 (1) 1 无线报警器系统总体设计 (2) 系统概述 (2) 主要器件介绍 (3) 热释电红外传感器概述 (3) AT89S51 单片机概述 (7) 总体设计 (12) 2 无线报警器系统硬件设计 (12) 系统工作原理图 (12) 信号检测与放大电路 (13) 电路实现功能 (13) 电路图图2-1信号检测与放大电路 (13) LED显示电路 (14) 电路实现功能 (14) 电路图 (14) 电路实现原理 (15) 报警执行电路 (15) 电路实现功能 (15) 电路图 ........................................................... 电路实现原理 (16) 手工暂停 (16) 电路实现功能 (16)

电路图 (16) 电路工作原理 (17) 单片机控制晶振与复位电路 (17) 电路实现功能: (17) 电路图: (17) 电路工作原理 (17) 3 无线报警器系统软件设计................................................ 流程图............................................................... 主程序设计 (20) 4 系统调试 (30) 结论和展望 (31) 心得体会 (34) 参考文献 (34) 附录 (34) 绪论 随着社会的不断进步和科学技术、经济的不断发展,人们生活水平得到很大的 提高,对私有财产的保护意识在不断的增强,因而对防盗措施提出了新的要求。本设计就是为了满足现代住宅防盗的需要而设计的家庭式电子防盗系统。 就目前市面上装备主要有压力触发式防盗报警器、开关电子防盗报警器和压力遮光触发式防盗报警器等各种报警器,但这几种比较常见的报警器都存在一些缺点。而我所研究的防盗报警器采用了热释电红外传感器,它的制作简单、成本低,安装比较方便,而且防盗性能比较稳定,抗干扰能力强、灵敏度高、安全可靠。这种防盗器安装隐蔽,不易被盗贼发现,同时它的信号经过单片机系统处理后方便和PC机通信,便于多用户统一管理和用户操作。

51单片机实现红外线编码检测

51单片机实现红外编码检测 通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,设备显示。 红外传感基础知识: ?红外发光管:红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装。 产生的光波波长为940nm左右,为红外光 ?红外接收头:左图为一常用的红外接收模块。其内部含有高频的滤波电路,专门用来滤除红外线合成信号的载波信号(38KH),并送出接收到的信号。当红外线合成信号进入红外接收模块,在其输出端便可以得到原先发射器 发出的数字编码,只要经过单片机解码程序进行解码,便可以 得知按下了哪一个按键,而做出相应的控制处理,完成红外遥 控的动作。 ?红外发送协议:引导码+客户码1+客户码2+操作码 +操作反码 ***用户真正须要的只有操作码***

?调制:“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率(因红外接收头能接收的红外线为38KHz 左右),还可达到降低电源功耗的 目的。 主要内容: 通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,用设备显示,(lcd或数码管);这里管脚的对应P3.2接受红外对管信息,lcd接线:

主程序: #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include sbit IR=P3^2; //红外接口标志 /*------------------------------------------------ 全局变量声明 ------------------------------------------------*/ unsigned char irtime;//红外用全局变量 bit irpro_ok,irok; unsigned char IRcord[4]; unsigned char irdata[33]; /*------------------------------------------------ 函数声明 ------------------------------------------------*/ void Ircordpro(void); /*------------------------------------------------ 定时器0中断处理 ------------------------------------------------*/ void tim0_isr (void) interrupt 1 using 1 { irtime++; //用于计数2个下降沿之间的时间 } /*------------------------------------------------ 外部中断0中断处理 ------------------------------------------------*/ void EX0_ISR (void) interrupt 0 //外部中断0服务函数 { static unsigned char i; //接收红外信号处理 static bit startflag; //是否开始处理标志位 if(startflag) {

相关文档
相关文档 最新文档