找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3695|回复: 1
打印 上一主题 下一主题
收起左侧

STC12CXX单片机片内EEPROM开机次数显示

[复制链接]
跳转到指定楼层
楼主
ID:79544 发表于 2016-7-28 09:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC12C5A60S2单片机片内EEPROM应用
  1. /*************************************************
  2.         功能:用STC12C5A60S2内部EEPROM记开机次数
  3.                   数码管显示
  4.                         根据慧静电子改写
  5.         单片机:STC12C5A60S2
  6.         晶  振:11.0592M
  7.         作者 :苏义江
  8.         时间:2015-7-22
  9. *****************************************************/
  10. #include<reg52.h>
  11. #include"stc12ceeprom.h"
  12. //STC5Axx 系列 EEPROM 测试起始地址
  13. #define DATA_flash_START_address 0x0000


  14. sbit wei=P2^7;
  15. sbit duan=P2^6;
  16. uchar t,a=0,gewei,shiwei,bai;
  17. //uchar code table[]="0123456789";
  18. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  19.                                 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
  20.                                 0xa1,0x86,0x8e,0x89};//0到H共阳段码

  21. void delay(uint x)
  22. {
  23.         uint z,j;
  24.         for(z=x;z>0;z--)
  25.         for(j=800;j>0;j--);
  26. }

  27. void main()
  28. {
  29.         delay(10);
  30. //        sector_Erase(0x0000);//擦除扇区
  31.         a=Byte_read(0x0000);//读一个字节 从起始地址开始读
  32.         a++;//计数变量自加1

  33.         if(a>=999)//加到999
  34.         a=0;
  35.         sector_Erase(0x0000);//擦除扇区
  36.         Byte_write(0x0000,a);//字节编程
  37.         gewei=a%10;
  38.         shiwei=a%100/10;
  39.         bai=a/100;       
  40.         while(1)
  41.         {
  42.                 wei=1;
  43.                 P0=0xfe;
  44.                 wei=0;
  45.                 P0=0xFF;
  46.                 duan=1;
  47.                 P0=table[bai];
  48.                 duan=0;
  49.                 P0=0xFF;
  50.                 delay(10);

  51.                 wei=1;
  52.                 P0=0xfd;
  53.                 wei=0;
  54.                 P0=0xFF;
  55.                 duan=1;
  56.                 P0=table[shiwei];
  57.                 duan=0;
  58.                 P0=0xFF;
  59.                 delay(10);

  60.                 wei=1;
  61.                 P0=0xfb;
  62.                 wei=0;
  63.                 P0=0xFF;
  64.                 duan=1;
  65.                 P0=table[gewei];
  66.                 duan=0;
  67.                 P0=0xFF;
  68.                 delay(10);
  69.         }
  70. }
复制代码
  1. STC12CXX EEPROM.H文件
  2. #ifndef __STC12CEEPROM_H__
  3. #define __STC12CEEPROM_H__
  4. #include<intrins.h>
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. //用于STC12C2052
  8. //sfr  IAP_DATA   =0XE2;
  9. //sfr  IAP_ADDRH  =0XE3;
  10. //sfr  IAP_ADDRL  =0XE4;
  11. //sfr  IAP_CMD    =0XE5;
  12. //sfr  IAP_TRIG   =0XE6;
  13. //sfr  IAP_CONTR  =0XE7;
  14. //#define  WD1  0X46
  15. //#define  WD2  0XB9
  16. //用于STC12C5A60S2
  17. sfr  IAP_DATA   =0XC2;
  18. sfr  IAP_ADDRH  =0Xc3;
  19. sfr  IAP_ADDRL  =0Xc4;
  20. sfr  IAP_CMD    =0Xc5;
  21. sfr  IAP_TRIG   =0Xc6;
  22. sfr  IAP_CONTR  =0Xc7;
  23. #define  WD1  0X5A
  24. #define  WD2  0XA5
  25. //定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数
  26. //#define ENABLE_ISP 0X80//晶振小于30M
  27. //#define ENABLE_ISP 0X81//晶振小于24M
  28. #define ENABLE_ISP 0X82//晶振小于20M
  29. //#define ENABLE_ISP 0X83//晶振小于12M
  30. //#define ENABLE_ISP 0X84//晶振小于6M
  31. //#define ENABLE_ISP 0X85//晶振小于3M
  32. uchar Byte_read(uint add);//读一字节 调用前打开IAP
  33. void Byte_write(uint add,uchar ch);//字节编程调用前打开IAP
  34. void sector_Erase(uint add);//擦除扇区
  35. void IAP_Disable();//关闭IAP
  36. uchar Byte_read(uint add)//读一字节 调用前打开IAP
  37. {
  38.         IAP_DATA=0X00;
  39. ////打开 IAP 功能, 设置Flash 操作等待时间
  40.         IAP_CONTR=ENABLE_ISP;
  41.         IAP_CMD =0X01;
  42.         IAP_ADDRH=add/256;
  43.         IAP_ADDRL =add%256;
  44.         IAP_TRIG  =WD1;//先送 5Ah,再送A5h 到ISP/IAP 触发寄存器
  45.         IAP_TRIG  =WD2;//送完A5h 后,ISP/IAP 命令立即被触发起动
  46.         _nop_();_nop_();
  47.         IAP_Disable();//关闭IAP
  48.         return (IAP_DATA);
  49. }
  50. //字节编程调用前打开IAP  写
  51. void Byte_write(uint add,uchar ch)
  52. {
  53.         IAP_CONTR  =ENABLE_ISP;
  54.         IAP_CMD =0X02;//IAP/ISP/EEPROM 字节编程命令
  55.         IAP_ADDRH=add/256;//设置目标单元地址的高8 位地址
  56.         IAP_ADDRL =add%256;//设置目标单元地址的低8 位地址
  57.         IAP_DATA=ch;//要编程的数据先送进IAP_DATA 寄存器
  58.         IAP_TRIG  =WD1;
  59.         IAP_TRIG  =WD2;
  60.         _nop_();_nop_();
  61.         IAP_Disable();
  62. }
  63. //擦除扇区
  64. void sector_Erase(uint add)
  65. {
  66.         IAP_CONTR =ENABLE_ISP;
  67.         IAP_CMD =0X03;//IAP/ISP/EEPROM 扇区擦除命令
  68.         IAP_ADDRH=add/256;
  69.         IAP_ADDRL =add%256;
  70.         IAP_TRIG  =WD1;
  71.         IAP_TRIG  =WD2;
  72.         _nop_();_nop_();
  73.         IAP_Disable();
  74. }
  75. void IAP_Disable()
  76. {
  77.         IAP_CONTR =0;
  78.         IAP_CMD =0;
  79.         IAP_TRIG  =0;
  80.         IAP_ADDRH=0;
  81.         IAP_ADDRL =0;       
  82. }
  83. #endif
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:521117 发表于 2019-12-30 20:53 | 只看该作者
学习,学习,感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表