main.lst 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 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 "drive_1602.h"
  8. 2 #include "string.h"
  9. 3 #include "stdio.h"
  10. 4
  11. 5
  12. 6 #define uint unsigned int
  13. 7 #define uchar unsigned char
  14. 8
  15. 9 /*
  16. 10 采用5V USB电路供电
  17. 11 可以实现语音停止和开启风扇
  18. 12 实现语音调速风扇
  19. 13 调速等级高低各3级
  20. 14
  21. 15 */
  22. 16 sbit SW1=P3^7;
  23. 17 sbit SW2=P3^6;
  24. 18 sbit SW3=P3^5;
  25. 19
  26. 20
  27. 21 sbit fun=P3^3;//风扇io
  28. 22
  29. 23 uchar temp,humi;
  30. 24 int JCount=0;
  31. 25
  32. 26 void delay_xms(int xms)
  33. 27 {
  34. 28 1 char ix=0;
  35. 29 1 for(;xms>0;xms--)
  36. 30 1 for(ix=110;ix>0;ix--);
  37. 31 1 }
  38. 32 uchar SET=0;
  39. 33 bit keyflag=0;
  40. 34
  41. 35 bit openflag=0;//开启标志位
  42. 36 uchar dw_val=3;//挡位值
  43. 37 int pwm_cnt=0;
  44. 38 #define pwm_max 1000
  45. 39 int set_pwm=pwm_max;
  46. 40
  47. 41 void KeyRead(void)
  48. 42 {
  49. 43 1 if(!SW1)
  50. 44 1 {
  51. 45 2 if(!SW1&&keyflag==0)
  52. 46 2 {
  53. 47 3 keyflag=1;
  54. 48 3 openflag^=1;
  55. 49 3 while(!SW1);
  56. 50 3 }
  57. 51 2 }
  58. 52 1 else if(!SW2)
  59. 53 1 {
  60. 54 2 if(!SW2&&keyflag==0)
  61. C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 PAGE 2
  62. 55 2 {
  63. 56 3 keyflag=1;
  64. 57 3 if(++dw_val>3)dw_val=1;
  65. 58 3 while(!SW2);
  66. 59 3 }
  67. 60 2 }
  68. 61 1
  69. 62 1 else if(!SW3)
  70. 63 1 {
  71. 64 2 if(!SW3&&keyflag==0)
  72. 65 2 {
  73. 66 3 keyflag=1;
  74. 67 3 if(dw_val>1)dw_val--;
  75. 68 3 }
  76. 69 2 }
  77. 70 1 else
  78. 71 1 {
  79. 72 2 keyflag=0;
  80. 73 2 }
  81. 74 1
  82. 75 1
  83. 76 1 }
  84. 77
  85. 78 void Timer0Init(void) //10毫秒@11.0592MHz
  86. 79 {
  87. 80 1
  88. 81 1 TMOD &= 0xF0; //设置定时器模式
  89. 82 1 TMOD |= 0x01; //设置定时器模式
  90. 83 1 TL0 = 0x00; //设置定时初值
  91. 84 1 TH0 = 0xDC; //设置定时初值
  92. 85 1 TF0 = 0; //清除TF0标志
  93. 86 1 ET0=1;
  94. 87 1 TR0 = 1; //定时器0开始计时
  95. 88 1 EA=1;
  96. 89 1
  97. 90 1 }
  98. 91
  99. 92 uchar get_key=0;
  100. 93 void TimeISR()interrupt 1
  101. 94 {
  102. 95 1 TL0 = 0x66; //设置定时初值
  103. 96 1 TH0 = 0xFC; //设置定时初值 1ms
  104. 97 1 if(++get_key>10)
  105. 98 1 {
  106. 99 2 get_key=0;
  107. 100 2 KeyRead();
  108. 101 2 }
  109. 102 1 pwm_cnt++;
  110. 103 1 if(pwm_cnt>=pwm_max)
  111. 104 1 {
  112. 105 2 pwm_cnt=0;
  113. 106 2
  114. 107 2 }
  115. 108 1 if(pwm_cnt>set_pwm)
  116. 109 1 {
  117. 110 2 fun=1;
  118. 111 2 }
  119. 112 1 else
  120. 113 1 {
  121. 114 2 fun=0;
  122. 115 2 }
  123. 116 1 JCount++;
  124. C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 PAGE 3
  125. 117 1 }
  126. 118
  127. 119 void UartInit(void) //9600bps@11.0592MHz
  128. 120 {
  129. 121 1 PCON &= 0x7F; //波特率不倍速
  130. 122 1 SCON = 0x50; //8位数据,可变波特率
  131. 123 1 TMOD &= 0x0F; //清除定时器1模式位
  132. 124 1 TMOD |= 0x20; //设定定时器1为8位自动重装方式
  133. 125 1 TL1 = 0xFD; //设定定时初值
  134. 126 1 TH1 = 0xFD; //设定定时器重装值
  135. 127 1 ET1 = 0; //禁止定时器1中断
  136. 128 1 TR1 = 1; //启动定时器1
  137. 129 1 EA=1;
  138. 130 1 ES=0;
  139. 131 1 }
  140. 132
  141. 133
  142. 134 void sendData(char *p,unsigned char n)
  143. 135 {
  144. 136 1 if( p == 0) return ;
  145. 137 1 ES = 0;
  146. 138 1 if(n > 0)
  147. 139 1 {
  148. 140 2 while(n --)
  149. 141 2 {
  150. 142 3 SBUF = *p++ ;
  151. 143 3 while(!TI) ;
  152. 144 3 TI = 0 ;
  153. 145 3 }
  154. 146 2 }
  155. 147 1 // ES = 1;
  156. 148 1 }
  157. 149
  158. 150
  159. 151
  160. 152 // 往串口发送字符串
  161. 153 void sendString(char *p)
  162. 154 {
  163. 155 1 if(p == 0) return ;
  164. 156 1 sendData(p,strlen(p));
  165. 157 1 }
  166. 158 uchar rxdat=0;
  167. 159 // 接收中断函数
  168. 160 void usart() interrupt 4
  169. 161 {
  170. 162 1 if(RI == 1)
  171. 163 1 {
  172. 164 2 rxdat=SBUF;
  173. 165 2 switch(rxdat)
  174. 166 2 {
  175. 167 3 case 0x5a:
  176. 168 3 openflag^=1;
  177. 169 3 break;
  178. 170 3
  179. 171 3 case 0x65:
  180. 172 3 if(++dw_val>3)dw_val=1;
  181. 173 3 break;
  182. 174 3
  183. 175 3 case 0x78:
  184. 176 3 if(dw_val>1)dw_val--;
  185. 177 3 break;
  186. 178 3 }
  187. C51 COMPILER V9.54 MAIN 03/04/2022 16:22:49 PAGE 4
  188. 179 2 // setUsartRxData(SBUF);
  189. 180 2 }
  190. 181 1 RI = 0;
  191. 182 1 TI = 0;
  192. 183 1 }
  193. 184
  194. 185
  195. 186
  196. 187 void main()
  197. 188 {
  198. 189 1 lcd1602_init();
  199. 190 1 UartInit();
  200. 191 1 delay_xms(200);
  201. 192 1 Timer0Init();
  202. 193 1 while(1)
  203. 194 1 {
  204. 195 2
  205. 196 2 if(JCount>500)//500ms采集一次
  206. 197 2 {
  207. 198 3 JCount=0;
  208. 199 3 if(openflag)
  209. 200 3 {
  210. 201 4 L1602_printf(0,0,"FUN:ON");
  211. 202 4 switch(dw_val)
  212. 203 4 {
  213. 204 5 case 1:
  214. 205 5 set_pwm=300;
  215. 206 5 break;
  216. 207 5
  217. 208 5 case 2:
  218. 209 5 set_pwm=700;
  219. 210 5 break;
  220. 211 5
  221. 212 5 case 3:
  222. 213 5 set_pwm=pwm_max;
  223. 214 5 break;
  224. 215 5 }
  225. 216 4
  226. 217 4
  227. 218 4 }else
  228. 219 3 {
  229. 220 4 L1602_printf(0,0,"FUN:OFF");
  230. 221 4 }
  231. 222 3 L1602_printf(0,1,"Gears:%d",dw_val);
  232. 223 3 }
  233. 224 2 }
  234. 225 1
  235. 226 1
  236. 227 1
  237. 228 1 }
  238. MODULE INFORMATION: STATIC OVERLAYABLE
  239. CODE SIZE = 499 ----
  240. CONSTANT SIZE = 24 ----
  241. XDATA SIZE = ---- ----
  242. PDATA SIZE = ---- ----
  243. DATA SIZE = 12 6
  244. IDATA SIZE = ---- ----
  245. BIT SIZE = 2 ----
  246. END OF MODULE INFORMATION.
  247. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)