第25页 共43页
if (EndBit) { }
//起始帧,低电平高位 //起始帧,低电平低位 //起始帧,高电平高位 //起始帧,高电平低位 //数据帧,低电平高位 //数据帧,低电平低位 //数据帧,'0'高电平高位 PW_data[6] = HZ_time;//高位 //数据帧,'0'高电平低位 PW_data[7] = LZ_time;//低位 //数据帧,'1'高电平高位 PW_data[8] = HO_time; //数据帧,'1'高电平低位 PW_data[9] = LO_time; //系统码 四个字节
if (EndBit)//系统码只有16位 { } else {
PW_data[10] = 0xff; PW_data[11] = 0;
PW_data[12] = (System_Code&0x0000ff00) >> 8; PW_data[13] = System_Code&0x000000ff; Funtion_Anti_Code = System_Code & 0x00000003; Funtion_Anti_Code <<= 6; Funtion_Code >>= 2;
Funtion_Anti_Code = Funtion_Anti_Code | Funtion_Code; System_Code >>= 2;
Funtion_Code = System_Code & 0x000000ff; System_Code >>= 8;
第26页 共43页
}
PW_data[10] = (System_Code&0x03000000) >> 8; PW_data[11] = (System_Code&0x00ff0000) >> 8; PW_data[12] = (System_Code&0x0000ff00) >> 8; PW_data[13] = System_Code&0x000000ff;
//功能码 1个字节 PW_data[14] = Funtion_Code; //功能反码 1个字节
PW_data[15] = Funtion_Anti_Code; //结束码高电平
//存储数据到特定的地址,下一步写到EEPROM中 PW_data2[0]= PW_data[12];//系统码高位 PW_data2[1]= PW_data[13];//系统码低位 PW_data2[2]= Funtion_Code;//功能码 PW_data2[3]= Funtion_Anti_Code;//功能反码 #ifdef Debug_Sdata tttable[0] = PW_data[12]; tttable[1] = PW_data[13]; tttable[2] = PW_data[14]; tttable[3] = PW_data[15]; #endif
write_com(0x80+0x40);//地址 write_date('F'); //write_date(':');
write_date(Funtion_Code/100+0x30); write_date(Funtion_Code0/10+0x30); write_date(Funtion_Code+0x30); write_date('A'); write_date(':');
write_date(Funtion_Anti_Code/100+0x30); write_date(Funtion_Anti_Code0/10+0x30); write_date(Funtion_Anti_Code+0x30);
第27页 共43页
}
5 智能红外遥控器的实现
在前面几章,我们详细的讨论了此课题的软硬件设计,而要使这以系统可以真正的运行起来,并达到预期的要求,调试这一步是必不可少的。 5.1 系统硬件调试
硬件是系统的躯体,硬件的好坏直接影响了结果,也影响了程序调试的进度。硬件调试在硬件电路装配,焊接完成后,上电后可能系统不能正常工作。 5.1.1 元件的使用
买回的原器件,会因为标记失误导致数值有误,因此在焊接前必须对电阻、电容的数值进行进一步的测量,对它们进行安装时,要注意有极性器件的安装是否正确:如二极管、极性电容等。也要注意芯片的选择,同一类芯片封装会有所差异,另外由于很多器件是贴片封装,因此在焊接时应该尤为注意,要防止因为焊接不当而造成的短路和长时间焊接使芯片烫坏。 5.1.2 整板测试
整板测试是在焊接结束后但未上电前的检查。需要对每个器件的引脚逐个检查,同时也要检查实验电路的焊接是否正确,用万用表的短路测试功能检查是否有短路和断路的地方,这可以缩短后续的排错时间有没有引脚虚焊或与其他信号线短路,另一方面也是检查设计上有没有问题,整板测试可以按照先电源后地,在器件引脚的顺序进行。 5.1.3 上电测试
上电测试是调试的关键,应该按照模块测试的思想,分模块测试系统。首先应该测试供电电源部分,看电源的提示灯是否点亮。然后测试系统的供电,上电后检测有无器件发热现象,若有应立即断电,若没有,再进行个元件的检测。之后再检查单片机的各部分功能是否正常,复位键能否使用,达到复位效果。同时用要检查晶振是否起振。测试晶振是否起振有两种方法:
(1)用示波器,如果出现有方波或正弦波就说明晶振能起振;
(2)用万用表估测。用万用表测量晶振两个引脚电压是否是芯片工作电压的一半。晶振的两脚电压差0.03V压差。如果两脚电位差太大,就有可能没有起振。另外如果用镊子碰晶体另外一个脚,这个电压有明显变化,证明是起振了。 5.2系统软件调试
软件的调试分模块来实现,首先调试按键与显示模块是否可以正常,然后调试接收模块,最后调试发射模块。。
第28页 共43页
5.2.1按键与显示模块调试
首先进行调试液晶显示程序,液晶能显示有助于后面的调试。写好液晶驱动程序时刚开始没有注意系统使用的是24MHz的晶振,没有适当的延时,是不能正常工作的。后来在适当位置加上延时函数就能显示了。 5.2.2接收模块调试
红外接收程序的调试。这个部分是最重要的程序之一,调试过程出现了很多问题。如红外接收头解调后的信号总是不能使单片机进入中断服务函数,而用示波器来测这个信号发现是正常的,只能是软件上的问题。然后仔细查看关于中断的设置之后,发现外部中断允许位没有设置,设置好之后,问题就迎刃而解了。 5.2.3发射模块调试
红外发射程序的调试。在发射时,原来的方案是使用定时器T0做38KHz的载波,用定时器T1作为计数器使用来控制高低电平的脉宽。而在调试过程中,却实现不了,总是不能产生调制信号。可能是定时器T0进入中断过于频繁,而定时器T1中断优先较低,使T1不能正常工作。随后只能改成延时函数来控制高低电平的脉宽,也能实现红外调制。 5.3调试小结
本系统的调试过程中,最主要的困难在于接收模块和发射模块软件的调试。经过了长时间的调试,也不断的吸取经验和教训,才能调试成功。
5.4 智能红外遥控器性能测试
5.41 测试所使用仪器
表6.1 测试使用仪器
序号 1 2 3
5.42 测试结果
一体化接收头HS0038解调出的遥控器电源信号波形:
名称、型号 微型计算机 万用表VC9806 示波器TDS2012 数量 1台 1块 1台 备注 进行调试以及程序的下载 对芯片管脚进行调试,测试 对输出波形进行检测 第29页 共43页
学习后发送的遥控器电源信号波形: