制作出来的实物图如下:



单片机源程序如下:
//AT89C52#include <reg52.h> #include "PAJ7620.h" #include "i2c.h" sbit shui = P1^3;//空气加湿器 sbit key1 = P1^4;//通讯接口1 sbit key2 = P1^5;//通讯接口2 sbit feng = P1^6; //风扇正转 sbit fanfeng = P1^7;//风扇反转 unsigned char PAJ7620_Value=0; //从PAJ7620获取的数据 unsigned char result_Code; //返回结果 void Get_7620_Value(void); void work(void); void delay_ms(unsigned int n_ms); void main (void) { shui=1;//加湿关 feng=0;//风扇开 key1=0;key2=0;//舵机关 PAJ7620_init();//7620初始化 while(1) { Get_7620_Value(); //获取7620数据 } } //获取7620数据 void Get_7620_Value(void) { PAJ7620_Value=Read_One_Reg(PAJ7620_wAdd,PAJ7620_ADDR_GES_PS_DET_FLAG_0); if(PAJ7620_Value!=0xFF) { switch (PAJ7620_Value) { case RIGHT://左 result_Code=0x01; delay_ms(PAJ7620_QUIT_TIME); break; case LEFT://右 result_Code=0x02; delay_ms(PAJ7620_QUIT_TIME); break; case UP://上 result_Code=0x04; delay_ms(PAJ7620_QUIT_TIME); break; case DOWN://下 result_Code=0x08; delay_ms(PAJ7620_QUIT_TIME); break; case FORWARD://向前 result_Code=0x10; delay_ms(PAJ7620_QUIT_TIME); break; case BACKWARD://向后 result_Code=0x20; delay_ms(PAJ7620_QUIT_TIME); break; case CLOCKWISE://顺时针 result_Code=0x40; delay_ms(PAJ7620_QUIT_TIME); break; case UNCLOCKWISE: result_Code=0x80;//逆时针 delay_ms(PAJ7620_QUIT_TIME); break; default: delay_ms(PAJ7620_REACTION_TIME); //延时 PAJ7620_Value=Read_One_Reg(PAJ7620_wAdd,PAJ7620_ADDR_GES_PS_DET_FLAG_1); if (PAJ7620_Value==WAVE)//左右晃 { result_Code=0x55; } else result_Code=0; delay_ms(PAJ7620_QUIT_TIME); break; } work(); } } void work(void) { static unsigned char mode=1; switch(result_Code) { case 0x01: shui=0; break;//上 case 0x02: shui=1; break;//下 case 0x04: mode--; if(mode<1)mode=1;break;//左 case 0x08: mode++; if(mode>4)mode=4;break;//右 case 0x10: feng=0;fanfeng=0;break;//接近 case 0x20: feng=0;fanfeng=1; break;//远离 case 0x40: feng=0;fanfeng=1;break;//顺时针 case 0x80: feng=1;fanfeng=0;break;//逆时针 case 0x55: break;//摇摆 default: break; } switch(mode) { case 1: key1=0;key2=0; break; case 2: key1=0;key2=1; break; case 3: key1=1;key2=0; break; case 4: key1=1;key2=1; break; default:key1=0;key2=0; break; } } //延时函数 void delay_ms(unsigned int n_ms) { int j,k; for(j=0;j<n_ms;j++) for(k=0;k<1002;k++); }
复制代码