微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第36节:带数码管显示的加法简易计算器

第36节:带数码管显示的加法简易计算器

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

  1. /4 序号4
  2. 0x6d,//5 序号5
  3. 0x7d,//6 序号6
  4. 0x07,//7 序号7
  5. 0x7f,//8 序号8
  6. 0x6f,//9 序号9
  7. 0x00,//不显示序号10
  8. };
  9. void main()
  10. {
  11. initial_myself();
  12. delay_long(100);
  13. initial_peripheral();
  14. while(1)
  15. {
  16. key_service();
  17. display_service();
  18. }
  19. }
  20. void display_service()//放在定时中断里的显示应用程序
  21. {
  22. if(ucDisplayUpdate==1)//有数据更新显示
  23. {
  24. ucDisplayUpdate=0;
  25. switch(ucWd) //本程序最核心的变量ucWd
  26. {
  27. case 1://窗口1原始数据和运算结果窗口
  28. if(ulSource>=10000000)
  29. {
  30. ucDigShow8=ulSource/10000000;
  31. }
  32. else
  33. {
  34. ucDigShow8=10;//数据显示空
  35. }
  36. if(ulSource>=1000000)
  37. {
  38. ucDigShow7=ulSource%10000000/1000000;
  39. }
  40. else
  41. {
  42. ucDigShow7=10;//数据显示空
  43. }
  44. if(ulSource>=100000)
  45. {
  46. ucDigShow6=ulSource%1000000/100000;
  47. }
  48. else
  49. {
  50. ucDigShow6=10;//数据显示空
  51. }
  52. if(ulSource>=10000)
  53. {
  54. ucDigShow5=ulSource%100000/10000;
  55. }
  56. else
  57. {
  58. ucDigShow5=10;//数据显示空
  59. }
  60. if(ulSource>=1000)
  61. {
  62. ucDigShow4=ulSource%10000/1000;
  63. }
  64. else
  65. {
  66. ucDigShow4=10;//数据显示空
  67. }
  68. if(ulSource>=100)
  69. {
  70. ucDigShow3=ulSource%1000/100;
  71. }
  72. else
  73. {
  74. ucDigShow3=10;//数据显示空
  75. }
  76. if(ulSource>=10)
  77. {
  78. ucDigShow2=ulSource%100/10;
  79. }
  80. else
  81. {
  82. ucDigShow2=10;//数据显示空
  83. }
  84. ucDigShow1=ulSource%10;
  85. break;
  86. case 2://窗口2第二个参与运算数据的窗口比如加法运算中的加数
  87. if(ulOther>=10000000)
  88. {
  89. ucDigShow8=ulOther/10000000;
  90. }
  91. else
  92. {
  93. ucDigShow8=10;//数据显示空
  94. }
  95. if(ulOther>=1000000)
  96. {
  97. ucDigShow7=ulOther%10000000/1000000;
  98. }
  99. else
  100. {
  101. ucDigShow7=10;//数据显示空
  102. }
  103. if(ulOther>=100000)
  104. {
  105. ucDigShow6=ulOther%1000000/100000;
  106. }
  107. else
  108. {
  109. ucDigShow6=10;//数据显示空
  110. }
  111. if(ulOther>=10000)
  112. {
  113. ucDigShow5=ulOther%100000/10000;
  114. }
  115. else
  116. {
  117. ucDigShow5=10;//数据显示空
  118. }
  119. if(ulOther>=1000)
  120. {
  121. ucDigShow4=ulOther%10000/1000;
  122. }
  123. else
  124. {
  125. ucDigShow4=10;//数据显示空
  126. }
  127. if(ulOther>=100)
  128. {
  129. ucDigShow3=ulOther%1000/100;
  130. }
  131. else
  132. {
  133. ucDigShow3=10;//数据显示空
  134. }
  135. if(ulOther>=10)
  136. {
  137. ucDigShow2=ulOther%100/10;
  138. }
  139. else
  140. {
  141. ucDigShow2=10;//数据显示空
  142. }
  143. ucDigShow1=ulOther%10;
  144. break;
  145. }
  146. }
  147. }
  148. void display_drive()//放在定时中断里的数码管驱动函数
  149. {
  150. //以下程序,如果加一些数组和移位的元素,还可以压缩容量。但是鸿哥追求的不是容量,而是清晰的讲解思路
  151. switch(ucDisplayDriveStep)
  152. {
  153. case 1://显示第1位
  154. ucD

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

网站地图

Top