C51 COMPILER V9.54 MAIN 03/04/2022 15:57:35 PAGE 1 C51 COMPILER V9.54, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\Objects\main.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main -.lst) TABS(2) OBJECT(.\Objects\main.obj) line level source 1 #include "reg52.h" 2 #include "string.h" 3 #include "stdio.h" 4 #define uint unsigned int 5 #define uchar unsigned char 6 /* 7 通过hc-sr501人体感应正确感应人体。 8 (2)实现指定语音播放功能。 9 (3)通过电机实现正反转来实现迎宾机器人。 10 研究方法、步骤及措施: 11 */ 12 sbit SW1=P2^0; 13 sbit SW2=P2^1; 14 15 16 sbit YINPIN1=P2^2; 17 sbit YINPIN2=P2^3; 18 19 sbit buzz=P3^3; 20 21 22 void delay_xms(int xms) 23 { 24 1 char ix=0; 25 1 for(;xms>0;xms--) 26 1 for(ix=110;ix>0;ix--); 27 1 } 28 uchar SET=0; 29 30 31 void Timer0Init(void) //10毫秒@11.0592MHz 32 { 33 1 34 1 TMOD &= 0xF0; //设置定时器模式 35 1 TMOD |= 0x01; //设置定时器模式 36 1 TL0 = 0x00; //设置定时初值 37 1 TH0 = 0xDC; //设置定时初值 38 1 TF0 = 0; //清除TF0标志 39 1 ET0=1; 40 1 TR0 = 1; //定时器0开始计时 41 1 EA=1; 42 1 43 1 } 44 45 void TimeISR()interrupt 1 46 { 47 1 TL0 = 0x00; //设置定时初值 48 1 TH0 = 0xDC; //设置定时初值 49 1 50 1 } 51 52 void UartInit(void) //9600bps@11.0592MHz 53 { 54 1 PCON &= 0x7F; //波特率不倍速 C51 COMPILER V9.54 MAIN 03/04/2022 15:57:35 PAGE 2 55 1 SCON = 0x50; //8位数据,可变波特率 56 1 TMOD &= 0x0F; //清除定时器1模式位 57 1 TMOD |= 0x20; //设定定时器1为8位自动重装方式 58 1 TL1 = 0xFD; //设定定时初值 59 1 TH1 = 0xFD; //设定定时器重装值 60 1 ET1 = 0; //禁止定时器1中断 61 1 TR1 = 1; //启动定时器1 62 1 EA=1; 63 1 ES=0; 64 1 } 65 66 void sendData(char *p,unsigned char n) 67 { 68 1 if( p == 0) return ; 69 1 ES = 0; 70 1 if(n > 0) 71 1 { 72 2 while(n --) 73 2 { 74 3 SBUF = *p++ ; 75 3 while(!TI) ; 76 3 TI = 0 ; 77 3 } 78 2 } 79 1 // ES = 1; 80 1 } 81 82 83 84 // 往串口发送字符串 85 void sendString(char *p) 86 { 87 1 if(p == 0) return ; 88 1 sendData(p,strlen(p)); 89 1 } 90 // 接收中断函数 91 void usart() interrupt 4 92 { 93 1 if(RI == 1) 94 1 { 95 2 // setUsartRxData(SBUF); 96 2 } 97 1 RI = 0; 98 1 TI = 0; 99 1 } 100 //char xdata showbuff[16]={0}; 101 char data send_buff[17]={0}; 102 uchar fz[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};//正转编码 103 uchar zz[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};//反转编码 104 105 void zhengzhuan(void)//电机正转 106 { 107 1 char i; 108 1 int j; 109 1 for(j=8*64;j>0;j--) 110 1 { 111 2 for(i=0;i<8;i++) 112 2 { 113 3 P1=zz[i]; 114 3 delay_xms(5); 115 3 } 116 2 } C51 COMPILER V9.54 MAIN 03/04/2022 15:57:35 PAGE 3 117 1 P1=0x00; 118 1 } 119 120 void fanzhuan(void)//电机反转函数 121 { 122 1 int b;char a; 123 1 for(b=8*64;b>0;b--) 124 1 { 125 2 for(a=0;a<8;a++) 126 2 { 127 3 P1=fz[a]; 128 3 delay_xms(5); 129 3 } 130 2 } 131 1 P1=0x00; 132 1 133 1 } 134 135 bit input_flag=0; 136 bit output_flag=0; 137 bit lock_flag=0; 138 139 void main() 140 { 141 1 UartInit(); 142 1 Timer0Init(); 143 1 while(1) 144 1 { 145 2 if(SW1==0||SW2==0) 146 2 { 147 3 delay_xms(5); 148 3 if(lock_flag==0) 149 3 { 150 4 if(SW1==0) 151 4 { 152 5 input_flag=1; 153 5 lock_flag=1; 154 5 }else if(SW2==0) 155 4 { 156 5 lock_flag=1; 157 5 output_flag=0; 158 5 } 159 4 } 160 3 }else 161 2 { 162 3 lock_flag=0; 163 3 } 164 2 165 2 if(input_flag) 166 2 { 167 3 input_flag=0; 168 3 YINPIN1=0; 169 3 YINPIN2=1; //播放欢迎光临 170 3 zhengzhuan(); 171 3 } 172 2 else if(output_flag) 173 2 { 174 3 output_flag=0; 175 3 YINPIN1=1; 176 3 YINPIN2=0; //播放欢迎再次光临 177 3 fanzhuan(); 178 3 } C51 COMPILER V9.54 MAIN 03/04/2022 15:57:35 PAGE 4 179 2 } 180 1 181 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 298 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 34 6 IDATA SIZE = ---- ---- BIT SIZE = 3 ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)