- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于51单片机的红外线控制系统 2
单片机原理结课项目
项目题目 基于51单片机的红外线控制系统
基于51单片机的红外线控制系统
概述:
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。
由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以在设计红外线遥控器时,不必要像无线电遥控器那样,每套( 发射器和接收器) 要有不同的遥控频率或编码( 否则,就会隔墙控制或干扰邻居的家用电器) ,所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。
基于51单片机的红外线控制系统。要求通过单片机发送和接红外信号程序,根据接收的信号,执行有关动作的系统,能够实现近距离的无线通。
二、硬件设计
系统框图
电路原理图
电路由五个模块构成(最小系统模块、红外接收模块、数码管显示模块、编程下载模块、电源模块)
最小系统
最小系统由stc12c5410ad单片机,按键复位电路,时钟振荡电路构成。
电源
电源采用5V直流电供电。
时钟、复位电路
本电路选用12MHz晶振。
红外接收模块
显示模块
三、软件设计
红外编解码原理
红外线发射编码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制‘0’; 以脉宽为0.565ms、间隔1.658ms、周期为2.25ms的组合表示二进制‘1’;
红外接收头接收的信号和发射编码相反;
一组编码由一个引导码,四个字节数据组成;引导码由9ms的高电位和4.5ms的地电位组成。
程序框图
N
Y
四、程序代码
解码程序源代码:
#include STC12C5X.h
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(irtime48irtime=42)
{
irok=1;
// P1=0;
}
else
{
irok=0;
}
irtime=0;
if(irok)
{
irok=0;
for(i=0;i4;i++)
{
for(j=0;j8;
文档评论(0)