1、首先,我们将单片机和USB转TTL下载器用杜邦线正确地连接起来,并插入电脑的USB口,看到最小系统版的电源指示灯亮起,说明板子通电正常
2、接下来打开电脑上的keil,并新建一个工程,命名为“红外遥控解码测试”
3、工程建立好以后,为工程添加一个C文件,双击打开C文件,复制下面的代码粘贴上去拭貉强跳#include <REG52.H>#define uchar unsigned char //宏定义 #define uint unsigned int#define uchar unsigned charsbit IRIN=P3^2;//红外线接口sbit d=P2^0;//解码指示uchar IRCOM[7],a;bit Flag;void delay(uchar x);//红外线用延迟void fasong(){if(Flag==1) { ES=0;//关闭串口 Flag=0;//发送一次 SBUF=IRCOM[2];//把a发送给主机 while(!TI);//当TI为1的时候,也就是等待数据发送结束 TI=0;//软件清零 ES=1;//打开串口 }} void main (){SM0=0;//方式1SM1=1; REN = 1;//REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20;//定时器工作方式2 PCON|= 0x80;//波特率提高一倍 TH1=0xFA; TL1=0xFA;//9600波特率 ,按倍频算 TR1 = 1; ES = 1; //开串口中断 EA = 1; // 开总中断 EX0 =1;//外部中断0允许 IRIN=1;while(1) { fasong();} }/**************************************************** 串口中断程序******************************************************/void ser ()interrupt 4{//if(RI == 1) //RI接受中断标志// { RI = 0; //清除RI接受中断标志 a =SBUF; //SUBF接受/发送缓冲器 Flag=1; //}}void IR_IN(void) interrupt 0//红外中断服务程序 { unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN==1) { EX0 =1; return; } while (!IRIN) {delay(1);}for (j=0;j<4;j++) { for (k=0;k<8;k++) { while (IRIN) {delay(1);} while (!IRIN) {delay(1);} while (IRIN) { delay(1); N++; if (N>=30) { EX0=1; return;} } IRCOM[j]=IRCOM[j] >> 1; if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} N=0; }} if (IRCOM[2]!=~IRCOM[3]) { EX0=1; return; } IRCOM[5]=IRCOM[2] & 0x0F; IRCOM[6]=IRCOM[2] >> 4; if(IRCOM[5]>9) { IRCOM[5]=IRCOM[5]+0x37;} else IRCOM[5]=IRCOM[5]+0x30; if(IRCOM[6]>9) { IRCOM[6]=IRCOM[6]+0x37;} else IRCOM[6]=IRCOM[6]+0x30; d=~d; Flag=1; EX0 = 1;}void delay(unsigned char x) {unsigned char i; while(x--){ for (i = 0; i<14; i++) {}}}
4、重新编译程序,程序没有错误之后进行下一步,第二张图中“0错误,0警告”说明程序没问题
5、打开程序下载软件,下载程序进单片机,显示下载成功以后,进行下一步
6、打开电脑串口调试助手,按照图中的设置数据设置一下参数,注意端口跟下载的端口是一样的,选好自己的端口,我这里是COM4,你们的电脑不一定是
7、下面拿出红外遥控器,然后把串口助手中的端口打开,打开之后,按钮变成“关闭串口”,而前面的灯会变成红色,表示串口打开成功,进行下一步
8、按顺序对准单片机板子上的红外接收头分别按遥控器上的ON,OFF,2H,4H,8H。之后你会发现串口调试助手上显示了代码,1,2,3,4,5号按键分别对应的代码为12 ,1E ,04 ,06, 1B (当然你们用的遥控器不一样,代码也会不同),那么就可以进行下一步
9、在程序中修改想要控制的参数,配合单片机外部电路,就可以实现不同的功能啦在红外中断服务程序中加入下面这段控制代码,就可以实现了 switch(IRCOM[2]) {艘早祓胂 case 0x12: d=0; break; }其中case表示按键的值,这里表示用“ON”这个按键控制一个灯
10、今天就到这里,教程先告一段落了,我们下次再见