电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

基于51单片机的红外遥控VIP免费

基于51单片机的红外遥控_第1页
1/7
基于51单片机的红外遥控_第2页
2/7
基于51单片机的红外遥控_第3页
3/7
基于51单片机的红外遥控红外遥控是无线遥控的一种方式,本文讲述的红外遥控,采用STC89C52单片机,1838红外接收头和38k红外遥控器。1838红外接收头:红外遥控器:原理:红外接收的原理我不赘述,百度文库上不少,我推荐个网址,这篇文章写得比较清楚,也比较全面,http://wenku.baidu.com/view/c353e8360b4c2e3f57276349.html我主要讲下程序的具体意思,在了解原理的基础上,我们知道,当我们在遥控器上每按下一个键,遥控器上的红外发射头都会发出一个32位的编码(32位编码分成4组8位二进制编码,前16位为用户码和用户反码,后16位为数据码和数据反码,用户码表示遥控器类型,数据码表示按键编码),不同的键对应不同的编码,红外接收头接收到这个编码后,发送给单片机,再进行相关操作。源程序1:(这个程序的功能是将用户码和用户反码,数据码和数据反码显示在1602液晶上,因为遥控器买回来是不会说明按键对应什么码值,所以先自己测试,确定每个按键的码值)#include#include#include#defineuintunsignedint#defineucharunsignedchar#define_Nop()_nop_()#defineTURE1#defineFALSE0/*端口定义*/sbitlcd_rs_port=P3^5;/*定义LCD控制端口*/sbitlcd_rw_port=P3^6;sbitlcd_en_port=P3^4;#definelcd_data_portP0///////////////////////////////////voiddelay1(void)//关闭数码管延时程序{intk;for(k=0;k<1000;k++);}////////////////////////////////////ucharcodeline0[16]={"user:"};ucharcodeline1[16]={"data:"};ucharcodelcd_mun_to_char[16]={"0123456789ABCDEF"};unsignedcharirtime;//红外用全局变量bitirpro_ok,irok;unsignedcharIRcord[4];//用来存放用户码、用户反码、数据码、数据反码unsignedcharirdata[33];//用来存放32位码值voidShowString(unsignedcharline,char*ptr);//////////////////////////////////////////////voidDelay(unsignedcharmS);voidIr_work(void);voidIrcordpro(void);voidtim0_isr(void)interrupt1using1//定时器0中断服务函数{irtime++;}voidex0_isr(void)interrupt0using0//外部中断0服务函数{staticunsignedchari;staticbitstartflag;if(startflag){if(irtime<63&&irtime>=33)//引导码TC9012的头码i=0;irdata[i]=irtime;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;//reloadvalueTL0=0x00;//initialvalueET0=1;//开中断TR0=1;}voidEX0init(void){IT0=1;//Configureinterrupt0forfallingedgeon/INT0(P3.2)EX0=1;//EnableEX0InterruptEA=1;}voidIrcordpro(void)//红外码值处理函数(关键函数){unsignedchari,j,k=1;unsignedcharcord,value;for(i=0;i<4;i++){//处理4个字节for(j=1;j<=8;j++){//处理1个字节8位cord=irdata[k];value=value>>1;if(cord>7)value=value|0x80;//大于某值为1k++;}IRcord[i]=value;value=0;}irpro_ok=1;//处理完毕标志位置1}///////////////////////////////////////////voidlcd_delay(ucharms)/*LCD1602延时*/{ucharj;while(ms--){for(j=0;j<250;j++){;}}}//////////////////////////////////////////////voidlcd_busy_wait()/*LCD1602忙等待*/{lcd_rs_port=0;lcd_rw_port=1;lcd_en_port=1;lcd_data_port=0xff;_Nop();_Nop();_Nop();_Nop();while(lcd_data_port&0x80);lcd_en_port=0;}///////////////////////////////////////////////voidlcd_command_write(ucharcommand)/*LCD1602命令字写入*/{lcd_busy_wait();lcd_rs_port=0;lcd_rw_port=0;lcd_en_port=0;lcd_data_port=command;_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();lcd_en_port=1;_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();lcd_en_port=0;}/////////////////////////////////////////voidlcd_system_reset()/*LCD1602初始化*/{lcd_delay(20);lcd_command_write(0x38);lcd_delay(100);lcd_command_write(0x38);lcd_delay(50);lcd_command_write(0x38);lcd_delay(10);lcd_command_write(0x08);lcd...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

基于51单片机的红外遥控

您可能关注的文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部