123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- 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)
|