独立按键及红外遥控led灯移动.docx

上传人:b****5 文档编号:14486562 上传时间:2023-06-23 格式:DOCX 页数:14 大小:80.58KB
下载 相关 举报
独立按键及红外遥控led灯移动.docx_第1页
第1页 / 共14页
独立按键及红外遥控led灯移动.docx_第2页
第2页 / 共14页
独立按键及红外遥控led灯移动.docx_第3页
第3页 / 共14页
独立按键及红外遥控led灯移动.docx_第4页
第4页 / 共14页
独立按键及红外遥控led灯移动.docx_第5页
第5页 / 共14页
独立按键及红外遥控led灯移动.docx_第6页
第6页 / 共14页
独立按键及红外遥控led灯移动.docx_第7页
第7页 / 共14页
独立按键及红外遥控led灯移动.docx_第8页
第8页 / 共14页
独立按键及红外遥控led灯移动.docx_第9页
第9页 / 共14页
独立按键及红外遥控led灯移动.docx_第10页
第10页 / 共14页
独立按键及红外遥控led灯移动.docx_第11页
第11页 / 共14页
独立按键及红外遥控led灯移动.docx_第12页
第12页 / 共14页
独立按键及红外遥控led灯移动.docx_第13页
第13页 / 共14页
独立按键及红外遥控led灯移动.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

独立按键及红外遥控led灯移动.docx

《独立按键及红外遥控led灯移动.docx》由会员分享,可在线阅读,更多相关《独立按键及红外遥控led灯移动.docx(14页珍藏版)》请在冰点文库上搜索。

独立按键及红外遥控led灯移动.docx

独立按键及红外遥控led灯移动

 

电子工程学院课外学分设计报告

题目:

按键和遥控控制LED灯移动

 

班级:

电子A1032姓名:

陈仁州

学号:

15专业:

自动化

实验室:

开放实验室

设计时间:

2013年3月19日——2013年6月2日

审批意见:

指导教师:

李卫华

 

1.专业综合设计任务………………………………………………3

2.基本原理与论证……………………………………………………3

3.硬软件设计………………………………………………………3

4.实现与测试……………………………………………………3

5.分析与总结………………………………………………………3

1.专业综合设计任务

完成一款用独立按键以及红外遥控器控制led灯的移动的设计,led灯的移动由四个(上下左右)键以及遥控器上的2567键控制。

2.基本原理与论证

单片机最小系统以及9个led灯接在p2^0-p2^7和p3^0口,四个独立按键接在p1^4-p1^7口红外接收头1838接在p3^2口,其他为起振电路及复位电路。

电路原理图如下图所示

3.硬软件设计

元器件排布,并进行焊接。

4.实现与测试

给电路供电,按上下左右键看led灯是否移动,使用红外遥控器按2(上)5(左)6(下)7(右)9(复位)键,看电路是否正常工作。

5.分析与总结

对单片机的基本用法以及红外接收发射有了一点了解。

 

附录一

程序

#include//52单片机头文件

#include

#include

#defineN2//亮暗的速率

#defineT700//PWM的周期

#defineTURE1

#defineFALSE0

#defineuintunsignedint

#defineucharunsignedchar

sbitIR=P3^2;//红外接口标志

sbitD1=P2^7;

sbitD2=P2^6;

sbitD3=P2^5;

sbitD4=P2^4;

sbitD5=P2^3;

sbitD6=P2^2;

sbitD7=P2^1;

sbitD8=P2^0;

sbitD9=P1^6;

sbitkey1=P1^0;//上

sbitkey2=P1^4;//下

sbitkey3=P1^2;//左

sbitkey4=P1^1;//右

ucharirtime;//红外全局变量

bitirpro_ok,irok;

unsignedcharIRcord[4];

unsignedcharirdata[33];

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

voiddelay(intx)//

{

chara,b;

for(a=0;a

for(b=500;b>0;b--);

}

voiddelay2()//延时0.5秒

{

uinta,b;

for(a=300;a>0;a--)

for(b=200;b>0;b--);

}

voiddelay1()//延时0.1秒

{

uintx,y;

for(x=100;x>0;x--)

for(y=100;y>0;y--);

}

voidpwm(intx)

{

while(x--);

}

voidsoft_reset(void)//复位

{

((void(code*)(void))0x0000)();

}

voidpwmled()

{

intt=0;

uintres=1400;

charf=0;//亮暗标志,0为亮

while(res--)

{

P2=0x00;D9=0;

pwm(t);//Toff,亮的时间

P2=0xff;D9=1;

pwm(T-t);//Ton,暗的时间

if(!

f)t+=N+1;//亮速率较快,模拟呼吸

elset-=N;//暗速率较慢

if(t>T){f=1;t=T;}

//超过最大值时,返回最大值,标志为暗

if(t<0){f=0;t=0;}//超过最小值时,返回最小值,标志为亮

}

}

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

voidzhuan()

{

D1=0;delay1();

D2=0;delay1();

D3=0;delay1();

D6=0;D1=1;delay1();

D9=0;D2=1;delay1();

D8=0;D3=1;delay1();

D7=0;D6=1;delay1();

D4=0;D9=1;delay1();

D5=0;D8=1;delay1();

D7=1;delay1();

D4=1;delay1();

}

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

voidorigin()

{

P2=0x55;D9=0;delay2();//红亮

P2=0xaa;D9=1;delay2();//绿亮

P2=0x6d;D9=1;delay2();//左到右再到左

P2=0xb6;D9=1;delay2();//

P2=0xdb;D9=0;delay2();//

P2=0xb6;D9=1;delay2();//

P2=0x6d;D9=1;delay2();//

P2=0xd5;D9=1;delay2();//斜着

P2=0xfc;D9=0;delay2();//下到上再到下

P2=0xe3;D9=1;delay2();//

P2=0x1f;D9=1;delay2();//

P2=0xe3;D9=1;delay2();//

P2=0xfc;D9=0;delay2();//

P2=0xff;D9=1;delay2();//全暗

P2=0x00;D9=0;delay2();//全亮

P2=0xff;D9=1;delay2();//全暗

//P2=0x00;D9=0;delay2();全亮

P2=0x08;D9=0;delay2();//除5外亮

P2=0xf7;D9=1;//5亮/**/

}

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

voidtim0_isr(void)interrupt1using1//定时器0中断服务函数

{

irtime++;

}

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

voidex0_isr(void)interrupt0using0//外部中断0服务函数

{

staticunsignedchari;

staticbitstartflag;

if(startflag)

{

if(irtime<42&&irtime>=33)//引导码TC9012的头码

i=0;

irdata[i]=irtime;//一次存储32位电平宽度

irtime=0;

i++;

if(i==33)

{

irok=1;

i=0;

}

}

else

{irtime=0;startflag=1;

}

}

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

voidTIM0init(void)//定时器0初始化

{

TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值

TH0=0x00;//reloadvalue

TL0=0x00;//initialvalue

ET0=1;//开中断

TR0=1;

}

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

voidEX0init(void)

{

IT0=1;//Configureinterrupt0forfallingedgeon/INT0(P3.2)

EX0=1;//EnableEX0Interrupt

EA=1;

}

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

voidIr_work(void)//红外键值散转程序

{

switch(IRcord[2])//判断第三个数码值

{

case0:

xie();break;//1显示相应的按键值ledcrol()

case1:

ledup();break;//2上

case2:

D3=0;break;//3

case3:

pwmled();break;//4

case4:

ledleft();break;//5

case5:

leddown();break;//6左

case6:

ledright();break;//7下

case7:

origin();break;//8右

case8:

soft_reset();break;//9

}irpro_ok=0;//处理完成标志

}

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

voidIrcordpro(void)//红外码值处理函数

{

unsignedchari,j,k;

unsignedcharcord,value;

k=1;

for(i=0;i<4;i++)//处理4个字节

{

for(j=1;j<=8;j++)//处理1个字节8位

{

cord=irdata[k];

if(cord>7)//大于某值为1

{

value=value|0x80;

}

else

{

value=value;

}

if(j<8)

{

value=value>>1;

}

k++;

}

IRcord[i]=value;

value=0;

}irpro_ok=1;//处理完毕标志位置1

}

///////上/////////

ledup()

{

if(D4==0){D4=1;D1=0;}

if(D5==0){D5=1;D2=0;}

if(D6==0){D6=1;D3=0;}

if(D7==0){D7=1;D4=0;return;}

if(D8==0){D8=1;D5=0;return;}

if(D9==0){D9=1;D6=0;return;}

}

/////////下///////

leddown()

{

if(D1==0){D1=1;D4=0;return;}

if(D2==0){D2=1;D5=0;return;}

if(D3==0){D3=1;D6=0;return;}

if(D4==0){D4=1;D7=0;}

if(D5==0){D5=1;D8=0;}

if(D6==0){D6=1;D9=0;}

}

/////////////左//////////////

ledleft()

{

if(D2==0){D2=1;D1=0;}

if(D5==0){D5=1;D4=0;}

if(D8==0){D8=1;D7=0;}

if(D3==0){D3=1;D2=0;return;}

if(D6==0){D6=1;D5=0;return;}

if(D9==0){D9=1;D8=0;return;}

}

/////////右////////

ledright()

{if(D2==0){D2=1;D3=0;}

if(D5==0){D5=1;D6=0;}

if(D8==0){D8=1;D9=0;}

if(D1==0){D1=1;D2=0;return;}

if(D4==0){D4=1;D5=0;return;}

if(D7==0){D7=1;D8=0;return;}

}

voidmain()

{P1=0xff;//按键高电平

zhuan();

EX0init();//EnableGlobalInterruptFlag

TIM0init();//初始化定时器0

while

(1)

{if(irok)

{

Ircordpro();//码值处理

irok=0;

}

if(irpro_ok)//steppresskey

{

Ir_work();//码值识别散转

}

if(key2==0)//下

{delay1();

if(key2==0)

{

leddown();

}while(!

key2);delay1();while(!

key2);

}

if(key1==0)//上

{delay1();

if(key1==0)

{

ledup();

}while(!

key1);delay1();while(!

key1);

}

if(key3==0)//左

{delay1();

if(key3==0)

{

ledleft();

}while(!

key3);delay1();while(!

key3);

}

if(key4==0)//右

{delay1();

if(key4==0)

{

ledright();

}while(!

key4);delay1();while(!

key4);

}

}

}

 

参考文献:

[1]高吉数字电子技术(第二版)电子工业出版社,2004。

[2]高吉祥全国大学生电子设计竞赛电子工业出版社,2007。

[3]阎石数字电子技术基础(第四版)北京:

高等教育出版社,2000。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2