while(1) { if ((char_can_read()>=1)) { cmd=get_char(); if (cmd==0x0a) //pc发送不同的命令字,可以执行不同的操作 { //其他功能可以用else添加。 //0x0a要求扫描一周,所有把数据上传。 for(i=0;i<IR_NUM;i++) { RCLK=0; //移位操作 if (i==0) D_OUT=1; //红外发送,只有一个1(点亮) else D_OUT=0; //其他红外管要关闭 RCLK=1; //srclk和rclk管脚相连,上升沿送入数据,并移位 //nop();nop(); delay1ms(); //延时2ms,手册说明,红外接收要求100个脉冲,这确实影响相应时间 delay1ms(); //但是,有的接收管不需要这么多,是否可以更少的脉冲有效需要测试 //如果需要更快的相应时间,可以找10个脉冲有效的接收元件。 MCU_PL=1; nop();nop(); MCU_PL=0; //使能端为低电平时8位数据进入寄存器 nop();nop(); MCU_PL=1; //高电平数据锁存,同时165数据自动移1位 if (D_IN) //已经有1bit移出 ch=0x80; else ch=0; for(j=1;j<IR_NUM;j++) //读取红外接收管的值,通过串口发送出去 { MCU_CLK=0; nop();nop(); MCU_CLK=1; ch=ch>>1; if (D_IN) //又有1bit移出 ch|=0x80; if (j%8==7) send_char(ch); } } } else { } } } |