钻石会员
主题
帖子
积分11296
阅读权限50
注册时间2013-9-14
最后登录1970-1-1
在线时间 小时
|
2019年新年第一帖!
16年发烧设计的大数字万年历送了好多朋友,近来才有人反馈低温时显示不正常,后来一想,max7219驱动这块确实没有考虑显示负号的问题。
重新查看了max7219和ds3231的资料,略改程序,测试OK。
把ShowTime函数增加几行:
- void ShowTime(bit b) //更新信息
- {
- WriteWord_2 (Digit4, DStime[0] / 10);
- WriteWord_2 (Digit5, DStime[0] % 10);
- if(gpscount)
- {
- WriteWord_3 (Digit4, BjTime.Sec / 10); //测试gps走时
- WriteWord_3 (Digit5, BjTime.Sec % 10);
- }
- if(DStime[7]<128)//正数时直接显示
- {
- WriteWord_3 (Digit6, DStime[7] / 10);
- WriteWord_3 (Digit7, DStime[7] % 10);
- }
- else
- {
- WriteWord_3 (Digit6, 0x0A);//负数显示 -
- WriteWord_3 (Digit7, DStime[7] % 10); //零下只显示一位
- }
- ...
- }
复制代码 现在深圳室温显示26度多:
代码中 -30,显示 -3度,OK:
- u8 read_temp() /* -------- read temperature -------- */
- {
- int itemp;
- float ftemp;
- //温度数据是以2 进制格式存储的并不需要数制转换
- write_byte(0x0e, 0x20); //0x0e寄存器的CONV位置1开启温度转换
- itemp = ( (int) read_random(0x11) << 5 );
- itemp += ( read_random(0x12) >> 3);
- Stop_I2C();
- if(itemp & 0x1000)
- itemp += 0xe000; /* if sign bit set, make 16 bit 2's comp */
- ftemp = 0.03125 * (float) itemp; /* convert to degrees C */
- /* ftemp = ftemp * 9 / 5 + 32; /* skip this if you don't want degrees F */
- ftemp -= 30; //调试用,模拟零下温度
- return (u8) ftemp;
- }
复制代码
刷机包:
https://www.yleee.com.cn/forum.php?mod=attachment&aid=NDA5NTU0fDc2YTczNTY5ODFhMWQ2ZDk4ODhjNzc0NWMzN2RiMmUxfDE3MTM0OTU3OTc%3D&request=yes&_f=.rar
|
评分
-
查看全部评分
|