📄 main.lst
字号:
228 1 display(0xc0,count,7); //第二行
229 1 // Print_Number(0xc7,12);
230 1
231 1 while(1)
232 1 {
233 2 //Printf_Number(0xc8,Alarm_Number);
234 2
235 2 Key_Scan();
236 2
237 2 if(Alarm_bit==1)
238 2 {
239 3 delay_count++;
240 3 delay_ms(10); //延迟10MS
241 3 if(delay_count>100) //当延迟100次10毫秒=1S
C51 COMPILER V7.50 MAIN 12/11/2007 16:22:43 PAGE 5
242 3 {
243 4 delay_count=0;
244 4 Relay_Control=~Relay_Control; //开灯 或 关灯 ---------达到让报警时灯闪烁的效果
245 4 }
246 3 }
247 2
248 2
249 2
250 2 switch(Style_bit)
251 2 {
252 3 case 0: if(Alarm_bit==0) //光栅模式
253 3 {
254 4 Test();
255 4 if(Count_number>Alarm_Number) //当超过设定的门限值,就报警
256 4 {
257 5 Count_number=0;
258 5 Alarm_OPEN();
259 5 Alarm_bit=1;
260 5 }
261 4 }
262 3
263 3 break;
264 3 case 1: if(human==1&&Alarm_bit==0) //人体识别模式
265 3 {
266 4 if(Red_recognize_bit1==1) //每一个跳变数一次,为了防止一次多数问题
267 4 {
268 5 Red_recognize_bit1=0;
269 5 LED_Green=1;
270 5 Count_number++;
271 5 display(0xc7,Clear9,7); //清屏
272 5 display(0xc0,count,7);
273 5 Printf_Number(0xc8,Count_number);
274 5 Red_recognize_bit1=0;
275 5 if(Count_number>Alarm_Number) //当超过设定的门限值,就报警
276 5 {
277 6 Count_number=0;
278 6 Alarm_OPEN();
279 6 Alarm_bit=1;
280 6 }
281 5 }
282 4
283 4
284 4
285 4
286 4 }
287 3 else
288 3 {
289 4 LED_Green=0;
290 4 Red_recognize_bit1=1;
291 4 }
292 3
293 3 break;
294 3 default:break;
295 3
296 3 }
297 2
298 2
299 2 }
300 1
301 1 }
302
303
C51 COMPILER V7.50 MAIN 12/11/2007 16:22:43 PAGE 6
304 //------------------------------------------
305 //按键扫描子程序
306 //------------------------------------------
307 void Key_Scan(void)
308 {
309 1 unsigned char temp;
310 1
311 1 P2_0=1;
312 1 P2_1=1;
313 1 P2_2=1;
314 1 P2_3=1;
315 1 temp=P2;
316 1 temp=temp&0x0f;
317 1 if(temp!=0x0f) //改变
318 1 {
319 2 P2|=0x0f;
320 2 delay_ms(10);
321 2
322 2
323 2 temp=P2;
324 2 temp=temp&0x0F;
325 2 if(temp!=0x0F)
326 2 {
327 3 switch(temp)
328 3 {
329 4 case 0x0E: Style_bit++;
330 4 if(Style_bit==2)Style_bit=0;
331 4 switch(Style_bit) //做界面
332 4 {
333 5 case 0: Count_number=0;
334 5 display(0x87,Clear9,9); //清屏
335 5 display(0xc0,Clear16,16); //清屏
336 5 display(0xc0,count,7); //
337 5 display(0x88,raster,6);break; //光栅模式
338 5
339 5 case 1: Count_number=0;
340 5 display(0x87,Clear9,9); //清屏
341 5 display(0xc0,Clear16,16); //清屏
342 5 display(0xc0,count,7); //
343 5 display(0x88,identify,8); break; //人体识别模式
344 5
345 5 default:break;
346 5 }
347 4
348 4 break; //改变类型 Test_bit=-Test_bit 调试模式
349 4 case 0x0D: Alarm_bit=~Alarm_bit;
350 4 if(Alarm_bit==1)
351 4 {
352 5 Alarm_OPEN();
353 5 }
354 4 else
355 4 {
356 5 Alarm_CLOSE();
357 5 display(0xc0,Clear16,16); //清屏
358 5 display(0xc0,count,7); //第二行
359 5 }
360 4 break; //强制开报警 1101
361 4 case 0x0B: Count_number=0;
362 4 Alarm_Number++;
363 4 display(0xc0,change,9);
364 4 display(0xca,Clear9,5); //清屏
365 4 Printf_Number(0xca,Alarm_Number); break; //加加 1011
C51 COMPILER V7.50 MAIN 12/11/2007 16:22:43 PAGE 7
366 4 case 0x07: Count_number=0;
367 4 Alarm_Number--;
368 4 display(0xc0,change,9);
369 4 display(0xca,Clear9,5); //清屏
370 4 Printf_Number(0xca,Alarm_Number); break; //减减 // 0111
371 4 default:break;
372 4 }
373 3
374 3 while(temp!=0x0f)
375 3 {
376 4 P2|=0x0f;
377 4
378 4 temp=P2;
379 4 temp=temp&0x0f;
380 4 }
381 3
382 3 }
383 2 }
384 1
385 1 }
386
387
388 //开关警报
389 void Alarm_OPEN(void)
390 {
391 1
392 1 Alarm_sound=0; //开蜂鸣器
393 1 Relay_Control=0; //开灯
394 1
395 1 display(0xc0,Warning,16);
396 1 }
397
398 void Alarm_CLOSE(void)
399 {
400 1 Alarm_sound=1; //关蜂鸣器
401 1 Relay_Control=1; //关灯
402 1 display(0xc0,count,7);
403 1 Alarm_bit=0; //关了报警的标志
404 1 Count_number=0;
405 1 }
406
407
408 void Test(void)
409 {
410 1
411 1 P3_2=1;
412 1 delay_ms(30);
413 1
414 1
415 1 if(((Red_LED1==0)&&(Red_LED2==0))||((Red_LED2==0)&&(Red_LED3==0))||((Red_LED1==0)&&(Red_LED3==0)))
416 1 {
417 2 LED_Test=1;
418 2 Red_recognize_bit1=1;
419 2 }
420 1
421 1 else
422 1 {
423 2 LED_Test=0;
424 2 if(Red_recognize_bit1==1)
425 2 {
426 3 Count_number++;
427 3 display(0xc7,Clear9,7); //清屏
C51 COMPILER V7.50 MAIN 12/11/2007 16:22:43 PAGE 8
428 3 display(0xc0,count,7);
429 3 Printf_Number(0xc8,Count_number);
430 3 Red_recognize_bit1=0;
431 3 }
432 2
433 2
434 2 }
435 1 P3_2=0;
436 1 delay_ms(30);
437 1
438 1 //
439 1
440 1 }
441
442 //void Identify_Model(void)
443 //{
444
445 //}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 993 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 92 24
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -