main.lst 6.3 KB

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