微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第35节:带数码管显示的象棋比赛专用计时器

第35节:带数码管显示的象棋比赛专用计时器

时间:11-22 来源:互联网 点击:

  1. if(ucRowRecord==1)//第一列输出低电平
  2. {
  3. ucKeySec=5;//触发5号键 对应朱兆祺学习板的S5键
  4. }
  5. else if(ucRowRecord==2)//第二列输出低电平
  6. {
  7. ucKeySec=6;//触发6号键 对应朱兆祺学习板的S6键
  8. }
  9. else if(ucRowRecord==3)//第三列输出低电平
  10. {
  11. ucKeySec=7;//触发7号键 对应朱兆祺学习板的S7键
  12. }
  13. else //第四列输出低电平
  14. {
  15. ucKeySec=8;//触发8号键 对应朱兆祺学习板的S8键
  16. }
  17. }
  18. }
  19. else if(key_sr1==1&&key_sr2==1&&key_sr3==0&&key_sr4==1)
  20. {
  21. uiKeyTimeCnt++;//去抖动延时计数器
  22. if(uiKeyTimeCnt>const_key_time)
  23. {
  24. uiKeyTimeCnt=0;
  25. ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
  26. if(ucRowRecord==1)//第一列输出低电平
  27. {
  28. ucKeySec=9;//触发9号键 对应朱兆祺学习板的S9键
  29. }
  30. else if(ucRowRecord==2)//第二列输出低电平
  31. {
  32. ucKeySec=10;//触发10号键 对应朱兆祺学习板的S10键
  33. }
  34. else if(ucRowRecord==3)//第三列输出低电平
  35. {
  36. ucKeySec=11;//触发11号键 对应朱兆祺学习板的S11键
  37. }
  38. else //第四列输出低电平
  39. {
  40. ucKeySec=12;//触发12号键 对应朱兆祺学习板的S12键
  41. }
  42. }
  43. }
  44. else if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==0)
  45. {
  46. uiKeyTimeCnt++;//去抖动延时计数器
  47. if(uiKeyTimeCnt>const_key_time)
  48. {
  49. uiKeyTimeCnt=0;
  50. ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
  51. if(ucRowRecord==1)//第一列输出低电平
  52. {
  53. ucKeySec=13;//触发13号键 对应朱兆祺学习板的S13键
  54. }
  55. else if(ucRowRecord==2)//第二列输出低电平
  56. {
  57. ucKeySec=14;//触发14号键 对应朱兆祺学习板的S14键
  58. }
  59. else if(ucRowRecord==3)//第三列输出低电平
  60. {
  61. ucKeySec=15;//触发15号键 对应朱兆祺学习板的S15键
  62. }
  63. else //第四列输出低电平
  64. {
  65. ucKeySec=16;//触发16号键 对应朱兆祺学习板的S16键
  66. }
  67. }
  68. }
  69. }
  70. break;
  71. }
  72. }
  73. /* 注释三:
  74. *按键服务程序操作的精髓在于根据当前系统处于什么窗口下就执行什么操作。
  75. *紧紧围绕着不同的窗口ucWd来执行不同的操作。
  76. */
  77. void key_service() //第三区 放在定时中断里的按键服务应用程序
  78. {
  79. switch(ucKeySec) //按键服务状态切换
  80. {
  81. case 1:// 1号键 对应朱兆祺学习板的S1键红棋加分 按键
  82. switch(ucWd)//本程序最核心的变量ucWd
  83. {
  84. case 1://窗口1,代表刚上电,完成或者复位后的状态
  85. uiRedTotal=uiRedTotal+60;//加红棋分的时间,此处60秒代表一分
  86. if(uiRedTotal>5940)
  87. {
  88. uiRedTotal=5940;
  89. }
  90. uiRedTotal=uiRedTotal-(uiRedTotal%60);//去秒取整分
  91. ucDisplayUpdate=1;//更新显示
  92. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  93. break;
  94. case 2://窗口2,代表黑棋正在运行中的状态
  95. break;
  96. case 3://窗口3,代表黑棋在中途暂停的状态
  97. break;
  98. case 4://窗口4,代表红棋正在运行中的状态
  99. break;
  100. case 5://窗口5,代表红棋在中途暂停的状态
  101. break;
  102. }
  103. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  104. break;
  105. case 2:// 2号键 对应朱兆祺学习板的S2键红棋减分 按键
  106. switch(ucWd)//本程序最核心的变量ucWd
  107. {
  108. case 1://窗口1,代表刚上电,完成或者复位后的状态
  109. if(uiRedTotal>=60)
  110. {
  111. uiRedTotal=uiRedTotal-60;//减红棋分的时间,此处60秒代表一分
  112. }
  113. uiRedTotal=uiRedTotal-(uiRedTotal%60);//去秒取整分
  114. ucDisplayUpdate=1;//更新显示
  115. uiV

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top