测品娱乐
您的当前位置:首页基于51单片机的红外线控制系统 2

基于51单片机的红外线控制系统 2

来源:测品娱乐


单片机原理结课项目

项目题目 基于51单片机的红外线控制系统

一、概述:

基于51单片机的红外线控制系统

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。

由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以在设计红外线遥控器时,不必要像无线电遥控器那样,每套( 发射器和接收器) 要有不同的遥控频率或编码( 否则,就会隔墙控制或干扰邻居的家用电器) ,所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。

基于51单片机的红外线控制系统。要求通过单片机发送和接红外信号程序,根据接收的信号,执行有关动作的系统,能够实现近距离的无线通。

二、硬件设计

1. 系统框图

红外遥控器 红外接收头 STC12C5410AD单片机

2. 电路原理图

时钟振荡电路 复位电路 数码光显示 电路由五个模块构成(最小系统模块、红外接收模块、数码管显示模块、编程下载模块、电源模块)

1) 最小系统

最小系统由stc12c5410ad单片机,按键复位电路,时钟振荡电路构成。

a. 电源

电源采用5V直流电供电。

b. 时钟、复位电路

本电路选用12MHz晶振。

2) 红外接收模块

3) 显示模块

三、软件设计

1. 红外编解码原理

红外线发射编码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制‘0’; 以脉宽为0.565ms、间隔1.658ms、周期为2.25ms的组合表示二进制‘1’;

红外接收头接收的信号和发射编码相反;

4.5ms的地电位组成。

一组编码由一个引导码,四个字节数据组成;引导码由9ms的高电位和

2. 程序框图

开始 初始化 红外解码

N

四、程序代码

解码程序源代码:

显示接收到的编码 解码完成? Y 处理接收到的编码 #include

unsigned char code

table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};// 显示数值表0-f unsigned char s,g;

unsigned char ircord[4];

unsigned char irtime;//红外用全局变量 bit irok,jiemaok;

sbit ge=P3^3; sbit shi=P3^2; sbit ir=P3^7;

void init(void);

void delayms(unsigned int t); //函数声明 void display(void); void jiema(void); void process(void);

/*------------------------------------------------ 主函数

------------------------------------------------*/ void main (void) {

init();

while (1) //主循环 {

jiema(); if(jiemaok) {

process(); jiemaok=0; }

display(); }

}

void init(void)

{

// P3M0=0X00; // P3M1=0X0c;

TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值 TH0=0x9C; //重载值 TL0=0x9C; //初始化值 EA = 1;

ET0=1; //开中断 TR0=0; }

void jiema(void) {

unsigned char i,j,value; if(!ir) {

while(!ir); TR0=1;

while(ir); TR0=0; // P1=0;

if(irtime<48&&irtime>=42) {

irok=1; // P1=0; } else {

irok=0; }

irtime=0; if(irok) {

irok=0;

for(i=0;i<4;i++) {

for(j=0;j<8;j++) {

value>>=1;

while(!ir);//等待低电平结束

TR0=1;

while(ir);// 等待高电平的结束 TR0=0;

if(irtime>10) //如果收到的高电平时间大雨1ms 说明收到数据是1

{

value|=0x80; }

irtime=0; }

ircord[i]=value; value=0; }

jiemaok=1; // P1=0; } } }

void process(void) {

s=ircord[2]/16; g=ircord[2]%16; }

void display(void) {

ge=1;

P2=table[s]; delayms(1); ge=0; P2=0x00; shi=1;

P2=table[g]; delayms(1); shi=0;

P2=0x00;

}

void delayms(unsigned int xms) {

unsigned i,j;

for(i=xms;i>0;i--)

for(j=120;j>0;j--); }

void tim0_isr (void) interrupt 1 using 1 {

irtime++; //用于计数时间

五、参考文献

1、《8051单片机课程设计实训教材》,陈明荧,清华大学出版社 2、《数字电子技术》,阎石,高等教育出版社 3、《模拟电子技术》,童诗白,高等教育出版社

4、《单片机课程设计指导》,谭浩强,清华大学出版社 5、 《MCS-51单片机应用设计》,张毅刚,哈工大出版社

因篇幅问题不能全部显示,请点此查看更多更全内容