标题: 51单片机4路抢答器的原理及C语言源程序 [打印本页]

作者: xueren    时间: 2013-7-19 02:22
标题: 51单片机4路抢答器的原理及C语言源程序
 单片机,当然不只是51,51单片机是一种稍通用型的单片机,通过I/O口的定义,可以实现多种控制功能。
抢答器,原理:如果为四路,当其中任一路控下后,其他几路即失效,结果为第一次按下的,可以用数码管或是LED灯来显示,当然这里只是讲原理与编程,具体可以根据抢答器路数及显示方式更改程序即可。
源程序如下:
  1. <div class="blockcode"><blockquote>/*用的是AT89S52开发板,独立按键接口如下,就用这四路。先按下的用LED灯来显示,对应第一个到第四个LED灯,其他再按无效,如果想再次实现,可手动复位单片机*/
  2. #include <reg52.h>
  3. sbit key1=P3^0;     //定义按键,根据需要连接线路,如独立按键(4路)
  4. sbit key2=P3^1;
  5. sbit key3=P3^2;
  6. sbit key4=P3^3;
  7. /*void delay(unsigned int cnt)       //如果有抖动或是干扰,可以用个小延时去抖
  8. {
  9. while(--cnt);
  10. }*/
  11. void main()
  12. {
  13. bit Flag;
  14. while(!Flag)
  15. {
  16. if(!key1)
  17. {
  18. P1=0xFE;
  19. Flag=1;
  20. }               
  21. /*LED灯来显示按下的键,第一个灯,我这里是8位LED灯,即:0111 1111,反过来读数为:1111 1110      即:0xFE *,P1口对应LED灯,给P1赋值*/
  22.    else if(!key2)
  23. {
  24. P1=0xFD;
  25. Flag=1;
  26. }         
  27. //第二个灯亮   
  28. else if(!key3)
  29. {P1=0xFB;Flag=1;}        
  30. //第三个灯亮   
  31. else if(!key4)
  32. {
  33. P1=0xF7;
  34. Flag=1;
  35. }      
  36. //第四个灯亮,意味着第四路首先按下
  37. }
  38. while(Flag);         //可以再加个I/O,控制Flag,这样初始化,继续抢答,还可以设计按下时的声音
  39. }
复制代码

作者: linnyshow    时间: 2019-11-19 13:59
程序不齐。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1