找回密码
 立即注册

QQ登录

只需一步,快速开始

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

自己做的8位竞赛抢答器仿真与代码

  [复制链接]
跳转到指定楼层
楼主
可能有些小毛病仿真没毛病,就是自己的那个开发版出不来,大家拿去研究研究

仿真原理图如下 需要用8.0以上的版本(proteus仿真工程文件可到本帖附件中下载)


单片机源代码如下:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char       
  4. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//变量定义
  5. sbit BEEP=P3^1;
  6. sbit start_stop=P3^2;
  7. sbit reset=P3^3;
  8. sbit key1=P1^0;
  9. sbit key2=P1^1;
  10. sbit key3=P1^2;
  11. sbit key4=P1^3;
  12. sbit key5=P1^4;
  13. sbit key6=P1^5;
  14. sbit key7=P1^6;
  15. sbit key8=P1^7;
  16. sbit state=P3^0;
  17. bit start_stop_flag=0;
  18. bit key1_flag=0;
  19. bit key2_flag=0;
  20. bit key3_flag=0;
  21. bit key4_flag=0;
  22. bit key5_flag=0;
  23. bit key6_flag=0;
  24. bit key7_flag=0;
  25. bit key8_flag=0;
  26. bit reset_flag=0;
  27. bit action=0;
  28. uchar second=20;
  29. uchar timer0_count=0;
  30. uchar number=0;
  31. uchar number_display=0;
  32. uint flag=1;                                  //延时函数
  33. void delay(uint z)
  34. {
  35.       uint x,y;
  36. for(x=z;x>0;x--)
  37.       for(y=120;y>0;y--);
  38. }                                              //蜂鸣器发声延时
  39. void DelayMS(uint x)
  40. {
  41. uchar t;  
  42. while(x--)   
  43. for(t=0;t<100;t++);
  44.   }                                       //数码管显示驱动函数   
  45. void display(uchar number,uchar second)  
  46. {        
  47. uchar second_first,second_second;        
  48. second_first = second /  10;        
  49. second_second = second %  10;      
  50. P0 =0x00;         
  51. P2 = 0xfe;         
  52. P0 = table[number];        
  53. delay(2);  
  54. P0 =0x00;      
  55. P2 = 0xfd;        
  56. P0 = 0x40;        
  57. delay(2);      
  58. P0 =0x00;         
  59. P2 = 0xfb;         
  60. P0 = table[second_first];        
  61. delay(2);      
  62. P0 =0x00;         
  63. P2 = 0xf7;
  64. P0 = table[second_second];        
  65. delay(2);      
  66. P0 =0x00;  }                                       //蜂鸣器响应按周期t发音
  67. void Play(uchar t)
  68. {  uchar i;  for(i=0;i<1;i++)  
  69.    {   BEEP=~BEEP;   
  70.        DelayMS(t);  }  BEEP=0;  
  71. }                                                  //开始键扫描函数   
  72. void start_stop_keyscan()  
  73. {         
  74. if(start_stop == 0)        
  75. {              
  76. delay(8);              
  77. if((start_stop == 0)&&(!start_stop_flag))        
  78. {                    
  79. start_stop_flag =  1;                  
  80. action       =  1;                  
  81. TR0 =  1;                  
  82. state = 0;            
  83. }      
  84. }
  85. else        
  86. {              
  87. start_stop_flag = 0;
  88.   }
  89.     }                                                 //八位抢答键扫描函数  
  90. uchar key_scan8()  
  91. {         
  92. if(key1 == 0)        
  93. {              
  94. delay(8);              
  95. if((key1 == 0)&&(!key1_flag))            
  96. {         
  97. key1_flag =  1;                    
  98. number                =  1;                  
  99. number_display = number;            
  100. }      
  101. }   
  102. else   
  103. {            
  104. key1_flag = 0;            
  105. number                 = 0;   
  106. }    if(key2 == 0)   
  107. {            
  108. delay(8);            
  109. if((key2 == 0)&&(!key2_flag))           
  110. {                     
  111. key2_flag =  1;
  112. number                = 2;
  113. number_display = number;         
  114. }   
  115. }   
  116. else   
  117. {            
  118. key2_flag = 0;            
  119. number                 = 0;
  120.    }   
  121. if(key3 == 0)   
  122. {            
  123. delay(8);            
  124. if((key3 == 0)&&(!key3_flag))           
  125. {                     
  126. key3_flag =  1;                     
  127. number                = 3;                    
  128. number_display = number;                    
  129. }   
  130. }   
  131. else   
  132. {            
  133. key3_flag = 0;            
  134. number                 = 0;   
  135. }   
  136. if(key4 == 0)   
  137. {            
  138. delay(8);            
  139. if((key4 == 0)&&(!key4_flag))
  140. {                     
  141. key4_flag =  1;                     
  142. number                = 4;                    
  143. number_display = number;           
  144. }   
  145. }   
  146. else   
  147. {            
  148. key4_flag = 0;            
  149. number                 = 0;   
  150. }   
  151. if(key5 == 0)   
  152. {            
  153. delay(8);            
  154. if((key5 == 0)&&(!key5_flag))           
  155. {                     
  156. key5_flag =  1;                     
  157. number                = 5;     
  158. number_display = number;           
  159. }      
  160. }   
  161. else   
  162. {            
  163. key5_flag = 0;            
  164. number                 = 0;   
  165. }   
  166. if(key6 == 0)   
  167. {            
  168. delay(8);
  169. if((key6 == 0)&&(!key6_flag))           
  170. {                     
  171. key6_flag =  1;                     
  172. number                = 6;                    
  173. number_display = number;         
  174. }   
  175. }   
  176. else   
  177. {            
  178. key6_flag = 0;     
  179. number                 = 0;   
  180. }   
  181. if(key7 == 0)   
  182. {            
  183. delay(8);            
  184. if((key7 == 0)&&(!key7_flag))           
  185. {                     
  186. key7_flag =  1;                     
  187. number                = 7;                    
  188. number_display = number;           
  189. }   
  190. }   
  191. else   
  192. {            
  193. key7_flag = 0;            
  194. number                 = 0;   
  195. }   
  196. if(key8 == 0)   
  197. {
  198. delay(8);
  199.        if((key8 == 0)&&(!key8_flag))            
  200. {                  
  201. key8_flag =  1;                  
  202. number                = 8;                  
  203. number_display = number;         
  204. }   
  205. }   else      
  206. {            
  207. key8_flag = 0;         
  208. number                 = 0;      
  209. }   if(number_display  != 0)  
  210. {         
  211. return  1;  
  212. }  
  213. else  
  214. {           
  215. return 0;  
  216. }  
  217. }  //复位键扫描函数  
  218. void reset_keyscan()  
  219. {        
  220. if(reset == 0)        
  221. {              
  222. delay(8);
  223. if((reset==0)&&(!reset_flag))
  224.              {                    
  225. reset_flag =  1;                  
  226. number_display = 0;                  
  227. state =  1;            
  228. }        
  229. }        
  230. else        
  231. {              
  232. reset_flag = 0;        
  233. }  
  234. }  //主函数  
  235. void main()  
  236. {      
  237. TMOD=0x01;         
  238. TH0=(65536-50000)/256;        
  239. TL0=(65536-50000)%256;        
  240. EA= 1;        
  241. ET0= 1;        
  242. TR0=0;        
  243. while( 1)        
  244. {         
  245. if(number_display!=0)              
  246. Play(number_display/2);                                 //蜂鸣器发声               
  247. start_stop_keyscan();            
  248. reset_keyscan();
  249. while(action)            
  250. {                 
  251. while(!key_scan8())                    
  252. {                        
  253. display(number_display,second);                     
  254. if(second == 0)                        
  255. ……………………

  256. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
8位竞赛抢答器课程设计.zip (56.9 KB, 下载次数: 137)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:359337 发表于 2018-6-27 11:11 | 只看该作者
很好很好
回复

使用道具 举报

板凳
ID:364880 发表于 2018-7-6 12:16 | 只看该作者
没流程图啊
回复

使用道具 举报

地板
ID:138664 发表于 2018-7-12 23:58 | 只看该作者
用8.6报错
回复

使用道具 举报

5#
ID:413212 发表于 2018-10-21 18:43 | 只看该作者
流程图有吗?
回复

使用道具 举报

6#
ID:575686 发表于 2019-7-1 19:25 | 只看该作者
请问这个要怎么复位啊
回复

使用道具 举报

7#
ID:577047 发表于 2019-7-3 12:18 | 只看该作者
好东西
回复

使用道具 举报

8#
ID:682860 发表于 2020-1-7 14:03 | 只看该作者
这个有流程图吗
回复

使用道具 举报

9#
ID:682004 发表于 2020-1-7 15:09 | 只看该作者
自己在protues上走了一遍程序,还可以,不错
回复

使用道具 举报

10#
ID:682955 发表于 2020-1-7 15:22 | 只看该作者
可以的,正要做这个
回复

使用道具 举报

11#
ID:66199 发表于 2020-1-7 19:03 | 只看该作者
好东西
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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