微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第88节:单片机靠关键字快速截取有效数据串

第88节:单片机靠关键字快速截取有效数据串

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

  1. ceiveFlag=0;//清零完成标志
  2. ES = 1; // 允许接收中断
  3. }
  4. }
  5. void display_service() //显示的窗口菜单服务程序
  6. {
  7. //加了static关键字后,此局部变量不会每次进来函数都初始化一次,这样有可能减少了一点指令消耗的时间。
  8. static unsigned char ucTemp5; //中间过渡变量
  9. static unsigned char ucTemp4; //中间过渡变量
  10. static unsigned char ucTemp3; //中间过渡变量
  11. static unsigned char ucTemp2; //中间过渡变量
  12. static unsigned char ucTemp1; //中间过渡变量
  13. if(ucWd1Part1Update==1)//更新显示
  14. {
  15. ucWd1Part1Update=0;//及时清零标志,避免一直进来扫描
  16. //先分解数据用来显示每一位
  17. ucTemp5=ulWeightCurrent%100000/10000;
  18. ucTemp4=ulWeightCurrent%10000/1000;
  19. ucTemp3=ulWeightCurrent%1000/100;
  20. ucTemp2=ulWeightCurrent%100/10;
  21. ucTemp1=ulWeightCurrent%10;
  22. ucDigDot3=1;//显示第3位数码管的小数点,实际数据带2位小数点。
  23. ucDigShow8=10;//没有用到第8位数码管,因此显示无。10代表显示空。
  24. ucDigShow7=10;//没有用到第7位数码管,因此显示无。10代表显示空。
  25. ucDigShow6=10;//没有用到第6位数码管,因此显示无。10代表显示空。
  26. if(ulWeightCurrent<10000)
  27. {
  28. ucDigShow5=10;//如果小于1000,千位显示无
  29. }
  30. else
  31. {
  32. ucDigShow5=ucTemp5;//第5位数码管要显示的内容
  33. }
  34. if(ulWeightCurrent<1000)
  35. {
  36. ucDigShow4=10;//如果小于1000,千位显示无
  37. }
  38. else
  39. {
  40. ucDigShow4=ucTemp4;//第4位数码管要显示的内容
  41. }
  42. //因为带2位小数点,因此最前面3位数据都是有效数,必然要显示,不要判断去0的空显示处理。
  43. ucDigShow3=ucTemp3;//第3位数码管要显示的内容
  44. ucDigShow2=ucTemp2;//第2位数码管要显示的内容
  45. ucDigShow1=ucTemp1;//第1位数码管要显示的内容
  46. }
  47. }
  48. void display_drive()
  49. {
  50. //以下程序,如果加一些数组和移位的元素,还可以压缩容量。但是鸿哥追求的不是容量,而是清晰的讲解思路
  51. switch(ucDisplayDriveStep)
  52. {
  53. case 1://显示第1位
  54. ucDigShowTemp=dig_table[ucDigShow1];
  55. if(ucDigDot1==1)
  56. {
  57. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  58. }
  59. dig_hc595_drive(ucDigShowTemp,0xfe);
  60. break;
  61. case 2://显示第2位
  62. ucDigShowTemp=dig_table[ucDigShow2];
  63. if(ucDigDot2==1)
  64. {
  65. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  66. }
  67. dig_hc595_drive(ucDigShowTemp,0xfd);
  68. break;
  69. case 3://显示第3位
  70. ucDigShowTemp=dig_table[ucDigShow3];
  71. if(ucDigDot3==1)
  72. {
  73. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  74. }
  75. dig_hc595_drive(ucDigShowTemp,0xfb);
  76. break;
  77. case 4://显示第4位
  78. ucDigShowTemp=dig_table[ucDigShow4];
  79. if(ucDigDot4==1)
  80. {
  81. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  82. }
  83. dig_hc595_drive(ucDigShowTemp,0xf7);
  84. break;
  85. case 5://显示第5位
  86. ucDigShowTemp=dig_table[ucDigShow5];
  87. if(ucDigDot5==1)
  88. {
  89. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  90. }
  91. dig_hc595_drive(ucDigShowTemp,0xef);
  92. break;
  93. case 6://显示第6位
  94. ucDigShowTemp=dig_table[ucDigShow6];
  95. if(ucDigDot6==1)
  96. {
  97. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  98. }
  99. dig_hc595_drive(ucDigShowTemp,0xdf);
  100. break;
  101. case 7://显示第7位
  102. ucDigShowTemp=dig_table[ucDigShow7];
  103. if(ucDigDot7==1)
  104. {
  105. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  106. }
  107. dig_hc595_drive(ucDigShowTemp,0xbf);
  108. break;
  109. case 8://显示第8位
  110. ucDigShowTemp=dig_table[ucDigShow8];
  111. if(ucDigDot8==1)
  112. {
  113. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  114. }
  115. dig_hc595_drive(ucDigShowTemp,0x7f);
  116. break;
  117. }
  118. ucDisplayDriveStep++;
  119. if(ucDisplayDriveStep>8)//扫描完8个数码管后,重新从第一个开始扫描
  120. {
  121. ucDisplayDriveStep=1;
  122. }
  123. }
  124. //数码管的74HC595驱动函数
  125. void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01)
  126. {
  127. unsigned char i;
  128. unsi

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

网站地图

Top