浙江工业职业技术学院电气工程分院毕业设计
附录一 从机电路图
17
浙江工业职业技术学院电气工程分院毕业设计
附录二 从机电路图
18
浙江工业职业技术学院电气工程分院毕业设计
附录三 程序代码
#include
#include \#include \#include \#include\
#define uchar unsigned char #define uint unsigned int
#define c(x) (x*120000/120000)
/////////////////////////////////////////////////////////// sbit Ir_Pin=P2^4;//定义红外接收管脚
unsigned char Ir_Buf[4]; //用于保存解码结果
/////////////////////////////////////////////////////////// sbit P3_4=P3^4;//定义红发射管脚
static bit OP; //红外发射管的亮灭 static unsigned int count; //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned char flag; //红外发送标志 uchar iraddr1; //十六位地址的第一个字节 uchar iraddr2; //十六位地址的第二个字节
////////////////////////////////////////////////////////// unsigned char table[]={\ 5 \
unsigned char num[]={\///////////////////////////////////////////////////////////
/*主从机红外通信协议:一次传送共4个字节数据
第1字节:#/16,高4位为系统码,#,低4位为地址信息 第2字节:温度值的整数值,如0x41,代表温度65度 第3字节:湿度值的整数值,如0x42,代表湿度66% 第4字节:高4位为温度的小数值,低4位代表湿度的小数值 */ unsigned long guide_high; //储存引导码高电平 unsigned int guide_low; //储存引导码高电平
unsigned int temp; //储存信息收集中的电平时间,用于判断 char i,j; //用于循环储存接收数据的变量
///////////////////////////////////////////////////////////////////////////////////////////////////////////// uchar call_master_flag=0; //当主机呼叫从机,从机接受数据,判断系统码和本系统正确时,标识符置1 uchar sys_code=0; //此变量( a )为本系统的识别码,通信协议第一个字节的高4位必须包含此码( a ) uchar call_addr=0; //用来储存主机发来的询问的地址信息
19
浙江工业职业技术学院电气工程分院毕业设计
uchar T_RH[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//用于储存时间变量
//-------------------------------------------------------------------------------- //发送模块程序 //数据发送函数
void SendIRdata(uchar A,uchar B,uchar C,uchar D) {
int i;
//char irdata=p_irdata; uchar irdata;
//发送9ms的起始码 TR0 = 1;
endcount=223; flag=1; count=0;
do{}while(count do{}while(count for(i=0;i<8;i++) { //先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平) endcount=10; flag=1; count=0; do{}while(count //停止发送红外信号(即编码中的高电平) if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0 { endcount=41; //1为宽的高电平 } else { endcount=15; //0为窄的高电平 } flag=0; count=0; 20 浙江工业职业技术学院电气工程分院毕业设计 do{}while(count //发送十六位地址的后八位 irdata=B; for(i=0;i<8;i++) { endcount=10; flag=1; count=0; do{}while(count endcount=41; } else { endcount=15; } flag=0; count=0; do{}while(count //发送八位数据 irdata=C; for(i=0;i<8;i++) { endcount=10; flag=1; count=0; do{}while(count endcount=41; } else { endcount=15; } flag=0; count=0; do{}while(count 21