#include "reg52.h" #include "string.h" #include "stdio.h" #define uint unsigned int #define uchar unsigned char /* 通过hc-sr501人体感应正确感应人体。 (2)实现指定语音播放功能。 (3)通过电机实现正反转来实现迎宾机器人。 研究方法、步骤及措施: */ /* ? 采用5V USB电路供电 ? 可以实现语音停止和开启风扇 ? 实现语音调速风扇 ? 调速等级高低各3级 */ sbit SW1=P2^0; sbit SW2=P2^1; sbit YINPIN1=P2^2; sbit YINPIN2=P2^3; sbit buzz=P3^3; void delay_xms(int xms) { char ix=0; for(;xms>0;xms--) for(ix=110;ix>0;ix--); } uchar SET=0; void Timer0Init(void) //10毫秒@11.0592MHz { TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0x00; //设置定时初值 TH0 = 0xDC; //设置定时初值 TF0 = 0; //清除TF0标志 ET0=1; TR0 = 1; //定时器0开始计时 EA=1; } void TimeISR()interrupt 1 { TL0 = 0x00; //设置定时初值 TH0 = 0xDC; //设置定时初值 } void UartInit(void) //9600bps@11.0592MHz { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xFD; //设定定时初值 TH1 = 0xFD; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 EA=1; ES=0; } void sendData(char *p,unsigned char n) { if( p == 0) return ; ES = 0; if(n > 0) { while(n --) { SBUF = *p++ ; while(!TI) ; TI = 0 ; } } // ES = 1; } // 往串口发送字符串 void sendString(char *p) { if(p == 0) return ; sendData(p,strlen(p)); } // 接收中断函数 void usart() interrupt 4 { if(RI == 1) { // setUsartRxData(SBUF); } RI = 0; TI = 0; } //char xdata showbuff[16]={0}; char data send_buff[17]={0}; uchar fz[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};//正转编码 uchar zz[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};//反转编码 void zhengzhuan(void)//电机正转 { char i; int j; for(j=8*64;j>0;j--) { for(i=0;i<8;i++) { P1=zz[i]; delay_xms(5); } } P1=0x00; } void fanzhuan(void)//电机反转函数 { int b;char a; for(b=8*64;b>0;b--) { for(a=0;a<8;a++) { P1=fz[a]; delay_xms(5); } } P1=0x00; } bit input_flag=0; bit output_flag=0; bit lock_flag=0; void main() { UartInit(); Timer0Init(); while(1) { if(SW1==0||SW2==0) { delay_xms(5); if(lock_flag==0) { if(SW1==0) { input_flag=1; lock_flag=1; }else if(SW2==0) { lock_flag=1; output_flag=0; } } }else { lock_flag=0; } if(input_flag) { input_flag=0; YINPIN1=0; YINPIN2=1; //播放欢迎光临 zhengzhuan(); } else if(output_flag) { output_flag=0; YINPIN1=1; YINPIN2=0; //播放欢迎再次光临 fanzhuan(); } } }