找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9523|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机4路抢答器的原理及C语言源程序

[复制链接]
跳转到指定楼层
楼主
ID:51773 发表于 2013-7-19 02:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 单片机,当然不只是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. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:110278 发表于 2019-11-19 13:59 | 只看该作者
程序不齐。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表