找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机做的8位抢答器程序

[复制链接]
跳转到指定楼层
楼主
      1、利用各种器件设计一个八路智力竞赛抢答器

      2、并用PROTEL或EWB画原理图与印制板电路图。3、总结检验电路设计的结果2)设计要求

      1、抢答器同时供八名选手或八个代表队比赛,分别用八个按钮S0~S7表示。2、设置一个系统清除和抢答控制开关s,该开关由主持入控制。

      3、抢答器具有锁存于显示功能。即选手按动按钮,锁存相应的编号,并且优先抢答选手的编号一直保持到主持人讲系统清零为止。

      4、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定。当主持人启动开始键后,定时器进行减计时,同时扬声器发出知暂的声响,声响持续的时间在3秒左右,与此同时,指示灯会亮,提示抢答开始。

      5、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清零为止。

      6、如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。



单片机源程序:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define  max 20
  5. uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};
  6. sbit d1=P2^4;//**************段选
  7. sbit d2=P2^5;
  8. sbit x1=P2^6;
  9. sbit x2=P2^7;
  10. sbit k1=P1^0;//*********************八位选手开关
  11. sbit k2=P1^1;
  12. sbit k3=P1^2;
  13. sbit k4=P1^3;
  14. sbit k5=P1^4;
  15. sbit k6=P1^5;
  16. sbit k7=P1^6;
  17. sbit k8=P1^7;
  18. sbit zk1=P2^0;//*****************************主持人开关zk1              zk2
  19. sbit zk2=P2^1;
  20. sbit buz=P2^2;//*******************蜂鸣器
  21. uchar num,aa;
  22. uchar f,flag;
  23. void jianpan();
  24. void init(void)
  25. {
  26. TMOD=0X01;//***************T0,模式1,定时
  27. TL0=0XB0; //********************定时50ms
  28.    TH0=0X3C;
  29.    ET0=1;    //**************开中断
  30.    EA=1;
  31.    num=max;//置倒计时计数初值
  32. }

  33. void delay(uint xms)
  34. {
  35.    uint x,y;
  36.    for(x=xms;x>0;x--)
  37.     for(y=110;y>0;y--);

  38. }
  39. /**********************************************
  40. 倒计时  选手号显示函数
  41. **********************************************/
  42. void display()
  43. {d1=0;         //控制开始置数
  44. P0=tab[num/10];//倒计时控制取最高位
  45. delay(5);
  46. d1=1;          //停止置数操作

  47. d2=0;
  48. P0=tab[num%10];//倒计时取最低位
  49. delay(5);
  50. d2=1;

  51. x1=0;         //控制开始置数
  52. P0=tab[flag/10];//选手号控制
  53. delay(5);
  54. x1=1;         //停止置数操作
  55. x2=0;
  56. P0=tab[flag%10];
  57. delay(5);
  58. x2=1;
  59. }
  60. /**********************************************************主函数部分
  61. **********************************************************/void main()
  62. {            
  63. init();
  64. while(1)
  65. { jianpan();display();}              }

  66. /***************************************
  67. 中断控制倒计时
  68. *************************************/
  69. void timer0(void) interrupt 1
  70. {
  71.    TL0=0XB0; //******重装初值,定时50ms
  72.    TH0=0X3C;
  73.    aa++;
  74.    if(aa==20)//**********************************1秒到了
  75.     {
  76.      aa=0;//**************************************计数清零
  77. num--;
  78. if(num==0)//倒计时为0时迅速变为初值同时关中断停止倒计时
  79. {   num=max;
  80. TR0=0;   }

  81. buz=0;//***************要求蜂鸣器响
  82. delay(20);//**************************蜂鸣器响,特别注意时间为一秒buz=1;
  83.                
  84.      }  
  85. }
  86. /**************************************************
  87. 按键控制   程序的核心部分
  88. ****************************************************/
  89. void jianpan()
  90. {
  91. if(zk1==0&flag=0)
  92. {
  93. delay(5);//消除数码管抖动操作
  94. flag=0;//数码管显示0
  95. display();
  96. TR0=1;//ZK1键按下,开中断以此控制:只有当此键按下时才抢答
  97. }
  98. if(zk2==0&&TR0==0)//注意这里要求TR0=0;
  99. {
  100. delay(5);//消除抖动
  101. if(zk2==0&&TR0==0)
  102. if(flag==0)
  103. {num--;buz=0;delay(20);buz=1;}
  104. if(num==0)
  105. num=max;                           
  106. if(flag!=0)//ZK2键清零操作
  107. {
  108. flag=0;
  109. num=max;//倒计时显示最大值
  110. TR0=0;//注意此时关中断,不再进行倒计时
  111. buz=0;
  112. delay(20);
  113. buz=1;   
  114. }
  115. while(!zk2)//倒计时中ZK2 键不可影响
  116. display();
  117.                             }

  118. /**********************************************************TR0控制抢答先后顺序
  119. *********************************************************/

  120. if(k1==0&&TR0==1)//注意此时TR0=1才执行以下按键操作
  121. {            
  122. buz=0;
  123. delay(20);
  124. buz=1;
  125. delay(5);
  126. flag=1;
  127. TR0=0;//此键按下关中断,其他选手按键不再受影响                           
  128. display();
  129. }
  130. /*************************************
  131. 以下原理相同
  132. *************************************/
  133. if(k2==0&&TR0==1)
  134. {
  135. buz=0;delay(20);buz=1;
  136. delay(5);
  137. flag=2;
  138. TR0=0;            
  139. display();
  140. }

  141. if(k3==0&&TR0==1)
  142. {            
  143. buz=0;delay(20);buz=1;
  144. delay(5);
  145. flag=3;
  146. TR0=0;
  147. display();
  148. }
  149. if(k4==0&&TR0==1)
  150. {            
  151. buz=0;delay(20);buz=1;
  152. delay(5);
  153. flag=4;
  154. TR0=0;                           
  155. display();   }
  156. if(k5==0&&TR0==1)
  157. {
  158. delay(5);
  159. flag=5;                    
  160. TR0=0;
  161. display();                                                           
  162. }
  163. if(k6==0&&TR0==1)
  164. {            
  165. buz=0;delay(20);buz=1;
  166.                                 
  167. delay(5);
  168.                      
  169. flag=1;
  170.                      
  171. TR0=0;
  172. display();          }

  173.                            
  174. if(k7==0&&TR0==1)
  175. {
  176. buz=0;delay(20);
  177. buz=1;
  178. delay(5);
  179. flag=7;
  180. TR0=0;
  181. display();
  182. }

  183. if(k8==0&&TR0==1)
  184. {
  185. buz=0;delay(20);
  186. buz=1;
  187. delay(5);
  188. flag=8;
  189. TR0=0;                                                                                         
  190. display();  
  191. }
  192.             
  193. }
复制代码


代码.docx

15.23 KB, 下载次数: 10, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-9-3 17:24 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:451125 发表于 2018-12-20 21:25 | 只看该作者
你好兄弟能不能发下原理图啊
回复

使用道具 举报

地板
ID:653096 发表于 2019-11-30 17:01 | 只看该作者
有没有仿真图
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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