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

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

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

  1. her=ulSource;//第二个运算数默认等于原始数
  2. ucDisplayUpdate=1;//刷新显示窗口
  3. break;
  4. case 2: //在第二个参与运算数据的窗口下
  5. ulResult=ulSource+ulOther;//连加
  6. ulSource=ulResult; //下一次运算的原始数据默认为当前运算结果,方便连加功能
  7. ucWd=1; //切换到第一个窗口
  8. ucDisplayUpdate=1;//刷新显示窗口
  9. break;
  10. }
  11. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  12. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  13. break;
  14. case 14:// 14号键 等于号按键对应朱兆祺学习板的S14键
  15. switch(ucWd)
  16. {
  17. case 1: //在原始数据和运算结果的窗口下
  18. switch(ucOperator)//根据不同的运算符号进行不同的操作
  19. {
  20. case 0://无运算符号
  21. break;
  22. case 1://加法
  23. ulResult=ulSource+ulOther;//连加
  24. ulSource=ulResult; //下一次运算的原始数据默认为当前运算结果,方便连加功能
  25. ucDisplayUpdate=1;//刷新显示窗口
  26. break;
  27. case 2://减法本程序没有减法功能,如果读者想增加减法程序,可以按键这个框架添加下去
  28. break;
  29. }
  30. break;
  31. case 2: //在第二个参与运算数据的窗口下
  32. switch(ucOperator)//根据不同的运算符号进行不同的操作
  33. {
  34. case 1://加法
  35. ulResult=ulSource+ulOther;//连加
  36. ulSource=ulResult; //下一次运算的原始数据默认为当前运算结果,方便连加功能
  37. ucWd=1; //切换到第一个窗口
  38. ucDisplayUpdate=1;//刷新显示窗口
  39. break;
  40. case 2://减法本程序没有减法功能,如果读者想增加减法程序,可以按键这个框架添加下去
  41. break;
  42. }
  43. break;
  44. }
  45. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  46. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  47. break;
  48. case 15:// 15号键 对应朱兆祺学习板的S15键
  49. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  50. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  51. break;
  52. case 16:// 16号键 清除按键 相当于复位的功能。重新输入数据对应朱兆祺学习板的S16键
  53. ulSource=0;
  54. ulOther=0;
  55. ulResult=0;
  56. ucOperator=0;
  57. ucWd=1; //切换到第一个窗口
  58. ucDisplayUpdate=1;//刷新显示窗口
  59. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  60. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  61. break;
  62. }
  63. }
  64. /* 注释四:
  65. * 此处参与运算的输入数字ucWhichKey记得用最大变量类型unsigned long,可以避免数据溢出等错误
  66. */
  67. void number_key_input(unsigned long ucWhichKey)//由于数字按键的代码相似度高,因此封装在这个函数里
  68. {
  69. switch(ucWd)
  70. {
  71. case 1: //在原始数据和运算结果的窗口下
  72. switch(ucOperator)//根据不同的运算符号进行不同的操作
  73. {
  74. case 0://无运算符号按键输入原始数据,比如被加输
  75. if(ulSource<=9999999) //最大只能输入8位数
  76. {
  77. ulSource=ulSource*10+ucWhichKey;//十进制的数值移位方法。
  78. }
  79. break;
  80. default://在已经按下了运算符号的情况下
  81. ulOther=0;//第二个运算数先清零,再输入新的数据,然后马上切换到第2个窗口下
  82. ulOther=ucWhichKey;
  83. ucWd=2; //马上切换到第二个窗口下
  84. break;
  85. }
  86. ucDisplayUpdate=1;//刷新显示窗口
  87. break;
  88. case 2: //在第二个参与运算数据的窗口下 按键输入第二个参与运算的数据
  89. if(ulOther<=9999999) //最大只能输入8位数
  90. {
  91. ulOther=ulOther*10+ucWhichKey;//十进制的数值移位方法。
  92. }
  93. ucDisplayUpdate=1;//刷新显示窗口
  94. break;
  95. }
  96. }
  97. void T0_time() interrupt 1
  98. {
  99. TF0=0;//清除中断标志
  100. TR0=0; //关中断
  101. key_scan(); //放在定时中断里的按键扫描函数
  102. if(uiVoiceCnt!=0)
  103. {
  104. uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停

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

网站地图

Top