芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

芯片破解DS3231和AT24C64的Proteus仿真程序

芯片破解使用proteus7.8 SP2,keil4,AT89C51RD2
实现DS3231的时间设置和读取,AT24C64的写入和读取

芯片解密DS3231 源程序如下:

  1. #include "ds3231.h"
  2. #include "main.h"
  3. #include "I2C.h"

  4. //功能:BCD码转换为十进制
  5. //参数:BCD码
  6. //返回值:十进制数
  7. uchar BCDToDEC(uchar val)   
  8. {
  9.    return    ((val>>4)*10)+(val&0x0f);
  10. }


  11. //功能:十进制数转换为BCD码
  12. //参数:十进制数字
  13. //返回值:BCD码
  14. uchar DECToBCD(uchar val)   
  15. {
  16.    return  (((val%100)/10)<<4)|(val%10);
  17. }


  18. //功能:向DS3231的某个寄存器写入数据
  19. //参数:addr要写入的寄存器地址,write_data 要写入的数据
  20. //返回值: 成功返回1,失败返回0
  21. uchar write_byte(uchar addr, uchar write_data)
  22. {
  23.     I2CStart_I2C();                                  //1发送起始信号
  24.     I2CSendByte(DS3231_WriteAddress);   //2.发送写指令
  25.     if(I2CWaitACK()==NACK )                   //如果为非应答
  26.               return 0;
  27.    
  28.     I2CSendByte(addr);                            //3.发送寄存器地址
  29.     if(I2CWaitACK()==NACK)                    //如果为非应答
  30.               return 0;
  31.    
  32.     I2CSendByte(write_data);                    //4.发送数据
  33.     if(I2CWaitACK()==NACK)                     //如果为非应答
  34.               return 0;
  35.    
  36.     I2CStop_I2C();                                   //5.发送停止信号
  37.     delayus(4);  
  38.             
  39.     return 1;                                             //发送正确返回1
  40. }

  41. //功能:从DS3231某个寄存器中读取数据
  42. //参数:寄存器地址
  43. //返回值:读取的数据
  44. uchar read_random(uchar random_addr)
  45. {   
  46.     uchar idata read_data;

  47.     I2CStart_I2C();                                  //1.起始信号
  48.     I2CSendByte(DS3231_WriteAddress);   //2.发送伪写指令
  49.     if(I2CWaitACK()==NACK)                    //等待从机应答
  50.               return 0;
  51.    
  52.     I2CSendByte(random_addr);               //3.发送寄存器地址
  53.     if(I2CWaitACK()==NACK)                    //等待从机应答
  54.               return 0;
  55.            
  56.     I2CStart_I2C();                                  //4.再次发送起始信号
  57.     I2CSendByte(DS3231_ReadAddress);   //5.发送读指令
  58.     if(I2CWaitACK()==NACK)                    //等待从机应答
  59.               return 0;
  60.    
  61.     read_data = I2CReadByte();                //6.读取数据
  62.     I2C_NACK();                                      //7.给出NACK信号
  63.     I2CStop_I2C();                                   //8.发送停止信号

  64.     return read_data;
  65. }

  66. //功能:设置DS3231时间,包括年/月/日/ 时:分:秒  周几
  67. //参数:Time型  t    注意,这里t中的值都是十进制的      
  68. //返回值:void
  69. void ModifyTime(Time *t)
  70. {
  71.     uchar temp=0;
  72.    
  73.     temp=DECToBCD(t->year);
  74.     write_byte(DS3231_YEAR,temp);   //修改年         
  75.    
  76.     temp=DECToBCD(t->month);
  77.     write_byte(DS3231_MONTH,temp);  //修改月
  78.    
  79.     temp=DECToBCD(t->day);
  80.     write_byte(DS3231_DAY,temp);    //修改日
  81.    
  82.     temp=DECToBCD(t->hour);
  83.     write_byte(DS3231_HOUR,temp);   //修改时
  84.    
  85.     temp=DECToBCD(t->minute);
  86.     write_byte(DS3231_MINUTE,temp); //修改分
  87.    
  88.     temp=DECToBCD(t->second);
  89.     write_byte(DS3231_SECOND,temp); //修改秒

  90.     temp=DECToBCD(t->week);
  91.     write_byte(DS3231_WEEK,temp);   //修星期
  92. }

  93. //功能:从DS3231读取数据
  94. //参数:Time 型变量t,读出的结构成员都是十进制数
  95. //返回值:void
  96. void GetDS3231Time(Time *t)
  97. {
  98.     t->year=read_random(DS3231_YEAR);
  99.     t->month=read_random(DS3231_MONTH);
  100.     t->hour=read_random(DS3231_HOUR);
  101.     t->minute=read_random(DS3231_MINUTE);
  102.     t->second=read_random(DS3231_SECOND);

  103.     t->year=BCDToDEC(t->year);
  104.     t->month=BCDToDEC(t->month);
  105.     t->day=BCDToDEC(t->day);
  106.     t->hour=BCDToDEC(t->hour);
  107.     t->minute=BCDToDEC(t->minute);
  108.     t->second=BCDToDEC(t->second);
  109. }



联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信