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

第45节:主机的串口收发综合程序框架

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

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

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

网站地图

Top