微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第47节:操作AT24C02利用定时器延时改善数码管的闪烁

第47节:操作AT24C02利用定时器延时改善数码管的闪烁

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

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

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

网站地图

Top