单片机电子时钟制作:DS3231+MAX7219IC解密
- IC解密//读取温度
- void DS3231_ReadTemp(){
- uchar Temp8;
- uint Temp16;
- Temp8=DS3231_Read(DS3231_TEMPERATUREH);
- if((Temp8&0x80)==0) //判断首字节为1即为 零下温度
- {
- DS3231_TEMP[0]=0;
- DS3231_TEMP[1]=Temp8;
- Temp8=DS3231_Read(DS3231_TEMPERATUREL); //温度低字节—小数位
- Temp8=(Temp8>>6)*25; //由于分辨率为0.25 所以扩大25倍便于显示
- DS3231_TEMP[2]=Temp8;
- }else{ //零下温度转换—零下是以2的补码形式存储的
- DS3231_TEMP[0]=1;
- Temp16=Temp8; //单字节转换双字节
- Temp16=Temp16<<2; //移出两位放温度的低位
- Temp8=DS3231_Read(DS3231_TEMPERATUREL); //读温度低字节
- Temp8=Temp8>>6; //由于2位放在头两位上,移到低位
- Temp16=Temp16+Temp8; //组成10位的2进制的温度编码
- Temp16=(~Temp16)+1; //负数是以2的补码形式存储的,转为原码
- Temp16=Temp16&0x03ff;//10位的2进制的温度编码,截去无用位
- Temp8=Temp16&0x0003;//分离低两位,作为小数位
- Temp8=Temp8*25; //由于分辨率为0.25 所以扩大25倍便于显示
- DS3231_TEMP[2]=Temp8;
- Temp16=Temp16>>2; //IC解密整数位处理
- DS3231_TEMP[1]=Temp16;
- }
- }

芯片解密