基于51单片机的红外线解码器

  • 格式:docx
  • 大小:238.71 KB
  • 文档页数:10

中南林业科技大学计算机与信息工程学院
1
单片机课程设计
红外线解码显示电路

姓 名:
专 业:
班 级:
学 号:
指导老师:
中南林业科技大学计算机与信息工程学院

2
一、 设计目的

1.由51单片机构成最小系统;
2.完成红外接受解码;
3.完成解码显示。
二、 硬件设计
1. 系统框图

2. 电路原理图
电路由五个模块构成(最小系统模块、红外接收模块、数码管显示
模块、编程下载模块、电源模块)

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

复位电路 时钟振荡电路 数码光显示
中南林业科技大学计算机与信息工程学院

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

a. 电源
电源采用5V直流电供电。
中南林业科技大学计算机与信息工程学院

4
b. 时钟、复位电路
本电路选用12MHz晶振。

2) 红外接收模块
中南林业科技大学计算机与信息工程学院

5
3) 显示模块

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

红外接收头接收的信号和发射编码相反;
一组编码由一个引导码,四个字节数据组成;引导码由9ms
中南林业科技大学计算机与信息工程学院

6
的高电位和4.5ms的地电位组成。

2. 程序框图

N
Y

3. 解码程序

开始
初始化
红外解码

处理接收到的编码
显示接收到的编码

解码完成?
中南林业科技大学计算机与信息工程学院

7
源代码:

#include

unsigned char code
table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x7
1,};// 显示数值表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)
中南林业科技大学计算机与信息工程学院
8
{
// 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;
中南林业科技大学计算机与信息工程学院
9
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)
{
中南林业科技大学计算机与信息工程学院
10
unsigned i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}

void tim0_isr (void) interrupt 1 using 1
{
irtime++; //用于计数时间
}

四、 总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解
决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力
的具体训练和考察过程。
感谢任嘉老师的指导,感谢同学的帮助。