请大家帮我看一下这个程序

[复制链接]
2497|5
 楼主| dongjia 发表于 2007-2-26 14:30 | 显示全部楼层 |阅读模式
这是一个温度显示程序,用的是DS18B20测温度,有几个问题我想问问大家。<br />1、四个数组中的后三个数组都表示是什么意思?尤其是最后一个,怎么还有一样的数值。<br />2、小数位的值是怎么来的?<br />我是个菜鸟,想半天也没想明白。<br /><br />#include&nbsp;&quot;avr/io.h&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//头文件<br />#include&nbsp;&quot;avr/delay.h&quot;&nbsp;&nbsp;&nbsp;&nbsp;//头文件<br /><br />#define&nbsp;&nbsp;BEEP&nbsp;&nbsp;PD7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//蜂鸣器<br />#define&nbsp;&nbsp;DQ&nbsp;&nbsp;&nbsp;&nbsp;PD3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ds18b20的DQ<br />#define&nbsp;&nbsp;FREQ&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//芯片工作频率<br /><br />unsigned&nbsp;char&nbsp;presence,flash=0;<br /><br />unsigned&nbsp;char&nbsp;&nbsp;LEDData[&nbsp;]&nbsp;&nbsp;&nbsp;=&nbsp;{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,<br />0x80,0x90,0xff};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />unsigned&nbsp;char&nbsp;temp_data[2]&nbsp;=&nbsp;{0x00,0x00};<br /><br />unsigned&nbsp;char&nbsp;display[5]&nbsp;=&nbsp;{0x00,0x00,0x00,0x00,0x00};<br /><br />unsigned&nbsp;char&nbsp;ditab[16]&nbsp;=&nbsp;{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,<br />0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};<br /><br />void&nbsp;Disp_Temperature(void)<br />{<br />&nbsp;&nbsp;display[4]=temp_data[0]&0x0f;<br />&nbsp;&nbsp;display[0]=ditab[display[4]];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//查表得小数位的值<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;display[4]=((temp_data[0]&0xf0)&gt&gt4)|((temp_data[1]&0x0f)&lt&lt4);<br />&nbsp;&nbsp;display[3]=display[4]/100;<br />&nbsp;&nbsp;display[1]=display[4]%100;<br />&nbsp;&nbsp;display[2]=display[1]/10;<br />&nbsp;&nbsp;display[1]=display[1]%10;<br /><br />&nbsp;&nbsp;if(!display[3])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//高位为0,不显示<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;display[3]=0x0a;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(!display[2])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//次高位为0,不显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display[2]=0x0a;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;PORTA&nbsp;=&nbsp;0xc6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示&nbsp;C<br />&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0x7f;<br />&nbsp;&nbsp;&nbsp;delay_nms(1);<br /><br />&nbsp;&nbsp;&nbsp;PORTA&nbsp;=&nbsp;0x9c;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示&nbsp;°&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0xbf;<br />&nbsp;&nbsp;&nbsp;delay_nms(1);<br /><br />&nbsp;&nbsp;&nbsp;PORTA&nbsp;=LEDData[display[0]];&nbsp;&nbsp;&nbsp;//显示小数位<br />&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0xdf;<br />&nbsp;&nbsp;&nbsp;delay_nms(1);<br /><br />&nbsp;&nbsp;&nbsp;PORTA&nbsp;=LEDData[display[1]];&nbsp;&nbsp;&nbsp;//显示个位<br />&nbsp;&nbsp;&nbsp;PORTA&nbsp;&=~_BV(PA7);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示小数点<br />&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0xef;<br />&nbsp;&nbsp;&nbsp;delay_nms(1);<br /><br />&nbsp;&nbsp;&nbsp;PORTA&nbsp;=LEDData[display[2]];&nbsp;&nbsp;&nbsp;//显示十位<br />&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0xf7;<br />&nbsp;&nbsp;&nbsp;delay_nms(1);<br /><br />&nbsp;&nbsp;&nbsp;PORTA&nbsp;=LEDData[display[3]];&nbsp;&nbsp;//显示十位<br />&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0xfb;<br />&nbsp;&nbsp;&nbsp;delay_nms(1);<br /><br />&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0xff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭显示<br />}<br />
 楼主| dongjia 发表于 2007-2-26 14:57 | 显示全部楼层

好心人都哪去了?

  
 楼主| dongjia 发表于 2007-2-26 15:05 | 显示全部楼层

请来帮我分析一下!

第2、3个数组为什么元素是一样的?<br />第4个数组为什么还有同样数值的元素?<br />display[0]=ditab[display[4]];这个小数位是怎么得来的?
andrew.xu 发表于 2007-2-27 17:47 | 显示全部楼层

re

//&nbsp;LED显示码<br />unsigned&nbsp;char&nbsp;&nbsp;LEDData[&nbsp;]&nbsp;&nbsp;&nbsp;=&nbsp;{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,<br />0x80,0x90,0xff};<br />//&nbsp;要显示的数据&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />unsigned&nbsp;char&nbsp;temp_data[2]&nbsp;=&nbsp;{0x00,0x00};<br />//&nbsp;显示缓冲<br />unsigned&nbsp;char&nbsp;display[5]&nbsp;=&nbsp;{0x00,0x00,0x00,0x00,0x00};<br />//&nbsp;这个用来计算小数点后的那个数的,为了快点,直接查表了,就是0-15对应0-9<br />unsigned&nbsp;char&nbsp;ditab[16]&nbsp;=&nbsp;{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,<br />0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};<br />
andrew.xu 发表于 2007-2-27 17:49 | 显示全部楼层

2,3只是初始化成0而已,程序中会改的

display[0]=ditab[display[4]];这个小数位是怎么得来的<br />这个你自己试试看就知道了
原野之狼 发表于 2007-3-3 12:45 | 显示全部楼层

RE:

这程序风格很有有意思。。。。<br /><br />你还不如自己写一个。<br /><br />原始温度数据中分离处符号,整数,小数,然后分离出每一位的值。。。<br />查表输出显示即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部