红外编码与解码解码北软课程设计模板.docx
《红外编码与解码解码北软课程设计模板.docx》由会员分享,可在线阅读,更多相关《红外编码与解码解码北软课程设计模板.docx(15页珍藏版)》请在冰点文库上搜索。
红外编码与解码解码北软课程设计模板
课程设计报告
课程名称:
红外编码与解码无线控制
班级:
学号:
姓名:
完成日期:
沈阳航空航天大学
北方软件学院
课设任务书
专业名称:
计算机应用(嵌入式)
设计题目:
红外编码与解码无线控制
起止时间:
年月日至月日
题目要求:
要求使用51单片机控制,有发送端,有接收端,接收端接收后要求相应的现实,以便证明设计的电路正常,在电路供电方面要求有供电指示灯,要求提供可移动电源。
学生姓名:
学号:
指导教师(签字):
年月日
红外编码与解码无线控制
1.概要设计:
a.本程序主要模块有接收模块、解码模块、显示模块、延时模块、清屏模块。
b.接收模块主要是等待接收信号出现的功能,接收到信号后以便下一步的操作。
c.解码模块主要是将接收到的信号进行解码操作。
d.显示模块主要是将解码后的结果显示到7段数码管上的具体数字。
e.延时模块起到延时的作用。
f.清屏主要起到初始化的功能防止影响到下一步的操作。
2.详细设计:
设计思路:
磁石验将一体化的红外线接收器与单片机相连,当收到红外线控制信号时,接收器将信号传递给单片机;通用红外线遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,所以解码部分是核心部分。
红外线遥控器的原理是将编好的代表2进制的代码以调制的形式加载到红外
波上,然后通过发射和接收装置来实现对电器的遥控。
红外遥控码在此实验中有着重要的作用,它电平组成。
接收到引导码时表示一祯数据的开始,利用红外一体接收头接收遥控器发是采用脉宽调制的串行码,引导码由9ms的低电平和4.5ms的低出的信号,输入单片机,通因为红外一体接收头输出的信号已经是解调过后的高低电平信号,可直接过单片机对接收到的信号进行解码并利用解好的红外遥控器代码来实现对时钟调整的控制。
译码部分:
根据芯片介绍可知,红外接收头接收到的编码,每一桢完整的串行数据有12位,而每一位的BIT0、BIT1是占空比不同的矩形方波,要完成以后的功能,就需要一个编码将其编成逻辑器件能识别的普通逻辑电平0和1。
红外接收头接收38K载波的红外光,解调得到脉冲,输出至译码电路
主要代码如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharLED[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管
sbitdua=P2^6;//段选控制端
sbitDS=P3^2;//一体化转换模块引脚
unsignedcharxinhao=0;//是否受到遥控器发来的信号
unsignedcharnum[]={0,0,0,0,0};//定义并初始化用于存储解码后的6121变量
ucharpower=1;//电源标志位
intm;//存储数码管要显示的数字是多少
下面的函数是延时函数和清屏函数,并带有开关功能
voiddelay(unsignedcharx)
{
unsignedchari;
while(x--)
{
for(i=0;i<13;i++)
{}
}
}
voiddelay2()
{
unsignedchari;
for(i=0;i<180;i++)
{
delay(5);
}
}
voidDisplay(ucharn)//单个数码管显示函数传过来的参数是0~99的一个数
{
if(m==98)//当n==98是清屏并清0n==99是关闭显示管
{
P0=0xbf;//清屏部分
m=0;
}
elseif(m==99&&power==1)
{//关闭显示管
P0=0xff;
power=0;
}
elseif(m==99&&power==0)
{
P0=LED[0];//打开显示管
power=1;
}
else{
if(m<0)
m=10;
P0=LED[m%10];
}
delay2();
}
下面的函数是译码部分,能将数字显示在七段数码管上
voidYima(unsignedintn)
{//译码函数
if(num[4]==0x00)//关闭按键
m=99;
elseif(num[4]==0x01)//清零按键
m=98;
elseif(num[4]==0x10)//按键‘1’
m=1;
elseif(num[4]==0x11)//按键‘2’
m=2;
elseif(num[4]==0x12)
m=3;
elseif(num[4]==0x14)
m=4;
elseif(num[4]==0x15)
m=5;
elseif(num[4]==0x16)
m=6;
elseif(num[4]==0x18)
m=7;
elseif(num[4]==0x19)
m=8;
elseif(num[4]==0x1a)
m=9;
elseif(num[4]==0x05||num[4]==0x0a)//上方向键或右方向键
m+=1;
elseif(num[4]==0x08||num[4]==0x0d)//下方向键或左方向键
m-=1;
else
return;
}
voidprintf(unsignedintn)//将num[4]中的二进制数变成想要的功能
{
Yima(num[4]);
Display(0);
}
下面的函数包括中断函数和计数器函数,是此实验的核心部分
voidINT(void)interrupt0
{
uinti,j;
uintdate;
intsum;//存储定时器中的时间
delay
(1);
EA=0;//关闭中断
if(DS==1)
{EA=1;return;}
while(DS==0)//跳过低电平等待高电平到来
{
delay
(1);
}
while(DS==1)//跳过高电平等待第一个数据到来
{
delay
(1);
}
for(i=0;i<4;i++)
{
date=0;
for(j=0;j<8;j++)
{
while(DS==0)//跳过低电平区
{
delay
(1);
}
if(DS==1)//高电平到来
{
TR0=1;//打开计时器0,开始记录高电平持续的时间
}
while(DS==1)//等待高电平结束
{
delay
(1);
}
TR0=0;//关闭计时器
sum=TH0*256+TL0;//保存计时器的时间
date=date>>1;
if(sum>1000)
{
date=date|0x80;
}
TH0=0;//重新清零计时器
TL0=0;
}
num[i]=date;
}
if(num[2]!
=~num[3])//验证接收是否正确
{
EA=1;
return;
}
num[4]=num[2];//将接收的第三个字节放入显示位置
delay2();//延时防干扰
IE0=0;
EA=1;
xinhao=1;//将标志位置‘1’
}
voidmain()
{
EA=1;//初始化中断控制变量
EX0=1;//打开外部中断0
IT0=1;//设置外部中断1为边沿触发方式
TMOD=0x01;//设置定时器0的工作方式
while
(1)
{
if(xinhao==1)//遥控器有信号发过来
{
printf(num[4]);//显示发过来的遥控器信号
xinhao=0;//重新将标志位置‘0’
}
}
}
3.电路的实现:
由于仿真电路中没有符合条件的红外线接收器等零件所以电路图用PCB原理图代替电路图:
4.主要器件和功能:
1.红外线接收器:
用于接受红外信号的装置;
2.51单片机或52单片机:
把发送端信号解码成2进制数
5
3.发光2极管:
起到降压和提示的作用;
4.7段数码管:
显示数字以便证明设计电路正确;
5.电阻电容若干:
用于完善电路,使电路更安全;
6.晶振:
起到控制频率的作用;
7.3极管:
起到放大电量和信号的作用使信号接收更清楚;
8.简易遥控器:
实现发送端功能;
9.外接电源:
实现供电功能;(4个1.5v电池)
测试结果:
经过硬件实现如图所示:
通过硬件实现的电路图如图所示:
心得体会:
这次课程设计我学会了不轻言放弃,不怕困难,不怕麻烦,在做实验过程中会反复遇到一些相同的问题,特别是程序和电路的调试时,往往要经过很多的反复检查,测试才能找到问题所在,要仔细研究才可以。
这次课程设计又让我学会了从更多角度分析问题,解决问题,设计过程中也积攒了一些相关的项目经验,我想对我以后的实验操作肯定有很大的帮助,课程设计给予了我们一个发挥自己学到的理论知识的平台,锻炼了我们动手能力,巩固了我们所学的知识,为我们以后步入社会做了准备,使大学生学习相当重要、不可或缺的一部分。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
从这次的课程设计中,我意识到在以后的学习中要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
成绩:
预习报告分,系统分,课设报告分,总分分,
总评:
。
评语:
批阅教师签字:
年月日