找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机四路抢答器程序,按键没有反应? 求帮助

[复制链接]
跳转到指定楼层
楼主
仿真的图


为什么按照程序只能实现按下开始键就倒计时,按K1,K2,K3,K4没反应的,?
下面是程序:
  1. #include<reg51.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;
  4. sbit K0=P3^2;//?????
  5. sbit beep=P3^7;//??????
  6. sbit D0=P3^3;//????
  7. sbit K1=P1^0;//1???????????      
  8. sbit K2=P1^1;//2???????????
  9. sbit K3=P1^2;//3???????????
  10. sbit K4=P1^3;//4???????????
  11. sbit D1=P1^4;//1??????
  12. sbit D2=P1^5;//2??????
  13. sbit D3=P1^6;//3??????
  14. sbit D4=P1^7;//4??????
  15. sbit S1=P3^4;//?????????
  16. sbit S2=P3^5;//????1
  17. sbit S3=P3^6;//????1
  18. char s;
  19. uchar num=0;
  20. char time1;//???????
  21. char time2;//??????????
  22. uint m,n;//T0,T1???????????
  23. bit flag1,flag2,flag3,flag4;    //???λ
  24. bit aa,bb;//?????????λ
  25. //????????
  26. void delay(uint z)
  27. {
  28. uint x,y;
  29. for(x=z;x>0;x--)
  30. for(y=120;y>0;y--);
  31. }
  32. uchar code table1[]={   
  33. //?????????????
  34. 0x3f,0x06,0x5b,0x4f,
  35. 0x66,0x6d,0x7d,0x07,
  36. 0x7f,0x6f,0x77,0x7c,
  37. 0x39,0x5e,0x79,0x71
  38. };
  39. uchar code table2[]={   
  40. //?????????λ???
  41. 0xfe,0xfd,
  42. 0xfb,0xf7
  43. };
  44. //??????????
  45. void init()
  46. {
  47. TMOD=0x11;
  48. TH0=(65536-2000)/256;
  49. TL0=(65536-2000)%256;
  50. TH1=(65536-2000)/256;
  51. TL1=(65536-2000)%256;
  52. ET0=1;
  53. ET1=1;
  54. EA=1;
  55. P0=0x00;
  56. time1=8;
  57. time2=8;
  58. flag2=1;
  59. }
  60. //?????????????
  61. void key1()      
  62. {
  63. uchar i=100;
  64. if(K0==0)
  65. {
  66. delay(8);
  67. if(K0==0)
  68. {
  69. while(K0==0&&i)
  70. {
  71. i--;
  72. delay(8);
  73. }
  74. TR0=1;
  75. s=time1;
  76. m=0;
  77. flag1=1;
  78. flag2=1;
  79. flag3=1;
  80. num=0;
  81. beep=1;
  82. flag4=0;    //???Υ????λ
  83. aa=0;
  84. bb=0;
  85. }
  86. }
  87. }
  88. //?????????????????
  89. void key()      
  90. {
  91. uchar i=100;
  92. if(K1==0)
  93. {
  94. delay(8);
  95. if(K1==0)
  96. {
  97. while(K1==0&&i)
  98. {
  99. i--;
  100. delay(8);
  101. }
  102. num=1;
  103. P2=0x01;
  104. D1=0;       //????????1??"1"
  105. TR0=0;        //???????0,?????
  106. TR1=1;        //???????1,????????????
  107. flag2=0;    //??????????λ,????????????????????
  108. }
  109. }
  110. if(K2==0)            //?????????????????
  111. {
  112. delay(8);
  113. if(K2==0)
  114. {
  115. while(K2==0&&i)
  116. {
  117. i--;
  118. delay(8);
  119. }
  120. num=2;
  121. D2=0;        
  122. TR0=0;
  123. TR1=1;
  124. flag2=0;    //???
  125. }
  126. }
  127. if(K3==0)
  128. {
  129. delay(8);
  130. if(K3==0)
  131. {
  132. while(K3==0&&i)
  133. {
  134. i--;
  135. delay(8);
  136. }
  137. num=3;
  138. D3=0;
  139. TR0=0;
  140. TR1=1;
  141. flag2=0;
  142. }
  143. }
  144. if(K4==0)
  145. {
  146. delay(10);
  147. if(K4==0)
  148. {
  149. while(K4==0&&i)
  150. {
  151. i--;
  152. delay(8);
  153. }
  154. num=4;
  155. D4=0;
  156. TR0=0;
  157. TR1=1;
  158. flag2=0;
  159. }
  160. }
  161. }
  162. //?????????????
  163. void display()
  164. {
  165. if(flag1==1)        //?????????,??????????
  166. {
  167. if(num!=0)    //???????????,?????????????
  168. {
  169. P0=table1[num];    //?????????????
  170. P2=table2[0];
  171. delay(2);
  172. }
  173. else        //???????????,????治???????
  174. {
  175. P0=0x00;      
  176. P2=table2[0];
  177. }
  178. P0=table1[s/10];        //???????????????
  179. P2=table2[2];
  180. delay(2);
  181. P0=table1[num];
  182. P2=table2[0];
  183.    
  184. P0=table1[s%10];
  185. P2=table2[3];
  186. delay(2);
  187. P0=0;
  188. P2=table2[0];
  189. P2=table2[1];
  190. P2=table2[2];
  191. P2=table2[3];

  192. }
  193. else        //??????????а???,?????F FF(????Υ????,?????Υ????? FF)????????
  194. {
  195. if(flag4==1)    //Υ?????
  196. {
  197. if(num!=0)
  198. {
  199. P0=table1[num];    //???????Υ????
  200. P2=table2[1];
  201. D0=1;
  202. delay(2);
  203. P0=0x00;
  204. P2=0xff;
  205. P0=table1[15];        //??????? FF,???Υ????
  206. P2=table2[2];
  207. delay(2);
  208. P0=0x00;        //????
  209. P2=0xff;
  210. P0=table1[15];
  211. P2=table2[3];
  212. delay(2);
  213. P0=0x00;
  214. P2=0xff;
  215. P0=table1[15];
  216. P2=table2[0];
  217. delay(2);
  218. P0=0x00;
  219. P2=0xff;
  220. }
  221. else      
  222. {
  223. P0=0x00;      
  224. P2=0xff;
  225. }
  226. }
  227. else    //?????Υ?????????????
  228. {
  229. if(aa==1)
  230. {
  231. P0=0x76;        //???λ????????"5(S)"(?????????????)
  232. P2=table2[0];
  233. delay(2);
  234. P0=0x00;
  235. P2=0xff;
  236. P0=table1[time1/10];    //????????????????????
  237. P2=table2[2];
  238. delay(2);
  239. P0=0x00;
  240. P2=0xff;
  241. P0=table1[time1%10];
  242. P2=table2[3];
  243. delay(2);
  244. P0=0x00;
  245. P2=0xff;
  246. }
  247. else if(bb==1)
  248. {
  249. P0=0x38;        //???λ????λ?????????????"T",?????????????
  250. P2=table2[0];
  251. delay(2);
  252. P0=0x00;
  253. P2=0xff;
  254. P0=table1[time2/10];
  255. P2=table2[2];
  256. delay(2);
  257. P0=0x00;
  258. P2=0xff;
  259. P0=table1[time2%10];
  260. P2=table2[3];
  261. delay(2);
  262. P0=0x00;
  263. P2=0xff;
  264. }
  265. else        //???????F FF
  266. {
  267. P0=table1[15];
  268. P2=table2[0];
  269. delay(2);
  270. P0=0x00;
  271. P0=table1[15];
  272. P2=table2[2];
  273. delay(2);
  274. P0=0x00;        //????
  275. P2=0xff;
  276. P0=table1[15];
  277. P2=table2[3];
  278. delay(2);
  279. P0=0x00;
  280. P2=0xff;
  281. }   
  282. }   
  283. }
  284. }
  285. //????????????????
  286. void key2()      
  287. {
  288. uchar i=100;
  289. if(S2==0)        //??????????
  290. {
  291. delay(8);
  292. if(S2==0)   
  293. {
  294. while(S2==0&&i)
  295. {
  296. i--;
  297. delay(80);
  298. }
  299. time1++;           
  300. if(time1==61)
  301. {
  302. time1=8;
  303. }
  304. aa=1;    //???????????λ??1
  305. bb=0;    //?????????????λ
  306. }
  307. }
  308. if(S3==0)        //??????????
  309. {
  310. delay(8);
  311. if(S3==0)
  312. {
  313. while(S3==0&&i)
  314. {
  315. i--;
  316. delay(8);
  317. }
  318. time2++;
  319. if(time2==61)
  320. {
  321. time2=8;
  322. }
  323. bb=1;
  324. aa=0;
  325. }
  326. }
  327. }
  328. //??????
  329. void main()
  330. {
  331. uchar i=100;
  332. init();//???ó?????????
  333. while(1)
  334. {
  335. key1();//????????????????
  336. if((flag1==0)&(flag2==1))    //??????????????????Υ???????????????
  337. {
  338. key2();
  339. }
  340. if((flag1==1)&(flag2==0))    //???????????????????????п????????????
  341. {
  342. if(S1==0)
  343. {
  344. delay(8);
  345. if(S1==0)
  346. {
  347. while(S1==0&&i)
  348. {
  349. i--;
  350. delay(8);
  351. }
  352. s=time2;
  353. TR0=1;
  354. m=0;
  355. TR1=1;
  356. }
  357. }
  358. }   
  359. if((flag1==0)&(flag2==1))    //Υ??
  360. {
  361. key();
  362. if(num!=0)        //???????а????,???????????????,????Υ????λ
  363. {
  364. flag4=1;
  365. D0=0;
  366. }
  367. }
  368. if((flag1==1)&(flag2==1))    //???????????????????????????,????а?·????????
  369. {
  370. key();
  371. }   
  372. display();//????????????
  373. }
  374. }
  375. //?????0?ж??????
  376. void t0() interrupt 1
  377. {
  378. TH0=(65536-2000)/256;    //2ms
  379. TL0=(65536-2000)%256;
  380. if(flag3)    //???(START)??????,????(??1??),??????????
  381. {
  382. beep=~beep;
  383. }
  384. else
  385. beep=1;
  386. if(s<5)    //????????????,??1??????????????,??????
  387. {
  388. if(s%2==0)
  389. {
  390. flag3=1;
  391. D0=0;   
  392. }
  393. else
  394. {
  395. flag3=0;
  396. D0=1;
  397. }
  398. }
  399. m++;   
  400. if(m==500)        //1??
  401. {
  402. m=0;
  403. s--;
  404. flag3=0;    //????????????????????
  405. if(s==-1)
  406. {
  407. s=20;   
  408. TR0=0;
  409. flag1=0;    //???F FF
  410. flag2=1;
  411. num=0;
  412. D0=1;
  413. }
  414. }
  415. }
  416. //?????1?ж??????
  417. void t1() interrupt 3    //?????1?????????????????????(??1??)
  418. {
  419. TH1=(65536-2000)/256;
  420. TL1=(65536-2000)%256;
  421. beep=~beep;
  422. n++;
  423. if(n==500)
  424. {
  425. n=0;
  426. TR1=0;
  427. }
  428. }
复制代码


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

使用道具 举报

沙发
ID:332444 发表于 2019-6-28 20:50 | 只看该作者
回复

使用道具 举报

板凳
ID:558309 发表于 2019-6-29 10:59 | 只看该作者
你这LED灯接错了吧,共阳极一端不应该是VCC吗,你怎么接地了
回复

使用道具 举报

地板
ID:558309 发表于 2019-6-29 11:00 | 只看该作者
电路有问题,程序你再查查吧
回复

使用道具 举报

5#
ID:96682 发表于 2019-6-29 23:20 | 只看该作者
没反应复位电路是罪魁祸首, LED 电路也有问题,实物上蜂鸣器少拿 SPEAER 代替
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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