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

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

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

  1. 2^7; //蜂鸣器的驱动IO口
  2. sbit eeprom_scl_dr=P3^7; //时钟线
  3. sbit eeprom_sda_dr_sr=P3^6; //数据的输出线和输入线
  4. sbit dig_hc595_sh_dr=P2^0; //数码管的74HC595程序
  5. sbit dig_hc595_st_dr=P2^1;
  6. sbit dig_hc595_ds_dr=P2^2;
  7. sbit hc595_sh_dr=P2^3; //LED灯的74HC595程序
  8. sbit hc595_st_dr=P2^4;
  9. sbit hc595_ds_dr=P2^5;
  10. unsigned char ucKeySec=0; //被触发的按键编号
  11. unsigned intuiKeyTimeCnt1=0; //按键去抖动延时计数器
  12. unsigned char ucKeyLock1=0; //按键触发后自锁的变量标志
  13. unsigned intuiKeyTimeCnt2=0; //按键去抖动延时计数器
  14. unsigned char ucKeyLock2=0; //按键触发后自锁的变量标志
  15. unsigned intuiKeyTimeCnt3=0; //按键去抖动延时计数器
  16. unsigned char ucKeyLock3=0; //按键触发后自锁的变量标志
  17. unsigned intuiVoiceCnt=0;//蜂鸣器鸣叫的持续时间计数器
  18. unsigned charucVoiceLock=0;//蜂鸣器鸣叫的原子锁
  19. unsigned char ucDigShow8;//第8位数码管要显示的内容
  20. unsigned char ucDigShow7;//第7位数码管要显示的内容
  21. unsigned char ucDigShow6;//第6位数码管要显示的内容
  22. unsigned char ucDigShow5;//第5位数码管要显示的内容
  23. unsigned char ucDigShow4;//第4位数码管要显示的内容
  24. unsigned char ucDigShow3;//第3位数码管要显示的内容
  25. unsigned char ucDigShow2;//第2位数码管要显示的内容
  26. unsigned char ucDigShow1;//第1位数码管要显示的内容
  27. unsigned char ucDigDot8;//数码管8的小数点是否显示的标志
  28. unsigned char ucDigDot7;//数码管7的小数点是否显示的标志
  29. unsigned char ucDigDot6;//数码管6的小数点是否显示的标志
  30. unsigned char ucDigDot5;//数码管5的小数点是否显示的标志
  31. unsigned char ucDigDot4;//数码管4的小数点是否显示的标志
  32. unsigned char ucDigDot3;//数码管3的小数点是否显示的标志
  33. unsigned char ucDigDot2;//数码管2的小数点是否显示的标志
  34. unsigned char ucDigDot1;//数码管1的小数点是否显示的标志
  35. unsigned char ucDigShowTemp=0; //临时中间变量
  36. unsigned char ucDisplayDriveStep=1;//动态扫描数码管的步骤变量
  37. unsigned char ucWd1Update=1; //窗口1更新显示标志
  38. unsigned char ucWd2Update=0; //窗口2更新显示标志
  39. unsigned char ucWd3Update=0; //窗口3更新显示标志
  40. unsigned char ucWd4Update=0; //窗口4更新显示标志
  41. unsigned char ucWd=1;//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
  42. unsigned intuiSetData1=0;//本程序中需要被设置的参数1
  43. unsigned intuiSetData2=0;//本程序中需要被设置的参数2
  44. unsigned intuiSetData3=0;//本程序中需要被设置的参数3
  45. unsigned intuiSetData4=0;//本程序中需要被设置的参数4
  46. unsigned char ucTemp1=0;//中间过渡变量
  47. unsigned char ucTemp2=0;//中间过渡变量
  48. unsigned char ucTemp3=0;//中间过渡变量
  49. unsigned char ucTemp4=0;//中间过渡变量
  50. //根据原理图得出的共阴数码管字模表
  51. code unsigned char dig_table[]=
  52. {
  53. 0x3f,//0 序号0
  54. 0x06,//1 序号1
  55. 0x5b,//2 序号2
  56. 0x4f,//3 序号3
  57. 0x66,//4 序号4
  58. 0x6d,//5 序号5
  59. 0x7d,//6 序号6
  60. 0x07,//7 序号7
  61. 0x7f,//8 序号8
  62. 0x6f,//9 序号9
  63. 0x00,//无 序号10
  64. 0x40,//- 序号11
  65. 0x73,//P 序号12
  66. };
  67. void main()
  68. {
  69. initial_myself();
  70. delay_long(100);
  71. initial_peripheral();
  72. while(1)
  73. {
  74. key_service(); //按键服务的应用程序
  75. display_service(); //显示的窗口菜单服务程序
  76. }
  77. }
  78. //AT24C02驱动程序
  79. void start24(void)//开始位
  80. {
  81. eeprom_sda_dr_sr=1;
  82. eeprom_scl_dr=1;
  83. delay_short(15);
  84. eeprom_sda_dr_sr=0;
  85. delay_short(15);
  86. eeprom_scl_dr=0;
  87. }
  88. void ack24(void)//确认位时序
  89. {
  90. eeprom_sda_dr_sr=1; //51单片机在读取数据之前要先置一,表示数据输入
  91. eeprom_scl_dr=1;
  92. delay_short(15);
  93. eeprom_scl_dr=0;
  94. delay_short(15);
  95. //在本驱动程序中,我没有对ACK信号进行出错判断,因为我这么多年一直都是这样用也没出现过什么问题。
  96. //有兴趣的朋友可以自己增加出错判断,不一定非要按我的方式去做。
  97. }
  98. void stop24(void)//停止位
  99. {
  100. eeprom_sda_dr_sr=0;
  101. eeprom_scl_dr=1;
  102. delay_short(15);
  103. eeprom_sda_dr_sr=1;
  104. }
  105. unsigned char read24(void)//读取一个字节的时序
  106. {
  107. unsigned char outdata,tempdata;
  108. outdata=0;
  109. eeprom_sda_dr_sr=1; //51单片机的IO口在读取数据之前要先置一,表示数据输入
  110. delay_short(2);
  111. for(tempda

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

网站地图

Top