微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第44节:从机的串口收发综合程序框架

第44节:从机的串口收发综合程序框架

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

  1. 时要及时清零一些标志位
  2. {
  3. ucKeyLock3=0; //按键自锁标志清零
  4. uiKeyTimeCnt3=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
  5. }
  6. else if(ucKeyLock3==0)//有按键按下,且是第一次被按下
  7. {
  8. uiKeyTimeCnt3++; //累加定时中断次数
  9. if(uiKeyTimeCnt3>const_key_time3)
  10. {
  11. uiKeyTimeCnt3=0;
  12. ucKeyLock3=1;//自锁按键置位,避免一直触发
  13. ucKeySec=3; //触发3号键
  14. }
  15. }
  16. if(key_sr4==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
  17. {
  18. ucKeyLock4=0; //按键自锁标志清零
  19. uiKeyTimeCnt4=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
  20. }
  21. else if(ucKeyLock4==0)//有按键按下,且是第一次被按下
  22. {
  23. uiKeyTimeCnt4++; //累加定时中断次数
  24. if(uiKeyTimeCnt4>const_key_time4)
  25. {
  26. uiKeyTimeCnt4=0;
  27. ucKeyLock4=1;//自锁按键置位,避免一直触发
  28. ucKeySec=4; //触发4号键
  29. }
  30. }
  31. }
  32. void key_service(void) //按键服务的应用程序
  33. {
  34. switch(ucKeySec) //按键服务状态切换
  35. {
  36. case 1:// 加按键 对应朱兆祺学习板的S1键
  37. switch(ucWd)//在不同的窗口下,设置不同的参数
  38. {
  39. case 1:
  40. uiSetData1++;
  41. if(uiSetData1>9999) //最大值是9999
  42. {
  43. uiSetData1=9999;
  44. }
  45. ucWd1Update=1;//窗口1更新显示
  46. break;
  47. case 2:
  48. uiSetData2++;
  49. if(uiSetData2>9999) //最大值是9999
  50. {
  51. uiSetData2=9999;
  52. }
  53. ucWd2Update=1;//窗口2更新显示
  54. break;
  55. case 3:
  56. uiSetData3++;
  57. if(uiSetData3>9999) //最大值是9999
  58. {
  59. uiSetData3=9999;
  60. }
  61. ucWd3Update=1;//窗口3更新显示
  62. break;
  63. case 4:
  64. uiSetData4++;
  65. if(uiSetData4>9999) //最大值是9999
  66. {
  67. uiSetData4=9999;
  68. }
  69. ucWd4Update=1;//窗口4更新显示
  70. break;
  71. }
  72. ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
  73. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  74. ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
  75. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  76. break;
  77. case 2:// 减按键 对应朱兆祺学习板的S5键
  78. switch(ucWd)//在不同的窗口下,设置不同的参数
  79. {
  80. case 1:
  81. uiSetData1--;
  82. if(uiSetData1>9999)
  83. {
  84. uiSetData1=0;//最小值是0
  85. }
  86. ucWd1Update=1;//窗口1更新显示
  87. break;
  88. case 2:
  89. uiSetData2--;
  90. if(uiSetData2>9999)
  91. {
  92. uiSetData2=0;//最小值是0
  93. }
  94. ucWd2Update=1;//窗口2更新显示
  95. break;
  96. case 3:
  97. uiSetData3--;
  98. if(uiSetData3>9999)
  99. {
  100. uiSetData3=0;//最小值是0
  101. }
  102. ucWd3Update=1;//窗口3更新显示
  103. break;
  104. case 4:
  105. uiSetData4--;
  106. if(uiSetData4>9999)
  107. {
  108. uiSetData4=0;//最小值是0
  109. }
  110. ucWd4Update=1;//窗口4更新显示
  111. break;
  112. }
  113. ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
  114. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  115. ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
  116. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  117. break;
  118. case 3:// 切换窗口按键 对应朱兆祺学习板的S9键
  119. ucWd++;//切换窗口
  120. if(ucWd>4)
  121. {
  122. ucWd=1;
  123. }
  124. switch(ucWd)//在不同的窗口下,在不同的窗口下,更新显示不同的窗口
  125. {
  126. case 1:
  127. ucWd1Update=1;//窗口1更新显示
  128. break;
  129. case 2:
  130. ucWd2Update=1;//窗口2更新显示
  131. break;
  132. case 3:
  133. ucWd3Update=1;//窗口3更新显示
  134. break;
  135. case 4:
  136. ucWd4Update=1;//窗口4更新显示
  137. break;
  138. }
  139. ucVoiceLock=1;//原子锁加锁,保护主函

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

网站地图

Top