微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第46节:利用AT24C02进行掉电后的数据保存

第46节:利用AT24C02进行掉电后的数据保存

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

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

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

网站地图

Top