数字温度表设计内容摘要:

数器 1的计数剩余值 Cs 和每度计数值 CD。 考虑到 DS1820 测量温度的整数部分以 ℃、 ℃为进位界限的关系,实际温度 Ts 可用下式计算: )/(℃)(  TzTs 温度传感器接口电路 图 温度传感器接口电路 三 系统的软件设计 主程序 void main() { uchar temp, temp1。 while(1) { scandisp()。 readtemp()。 temp1 = temper[0]。 temp = temper[1]。 dispbuf[4] = ditab[temp1]。 dispbuf[1] = temp/100。 dispbuf[3] = temp%10。 temp = temp/10。 dispbuf[2] = temp%10。 dispbuf[0] = flag。 dispbuf[5] = 11。 } } 温度测量 DS18B20 复位函数 void reset(void) { uchar x = 0。 DQ = 1。 delay(8)。 DQ = 0。 delay(80)。 DQ = 1。 delay(14)。 x = DQ。 delay(20)。 } 从 DS18B20 中读一个字节 uchar readbyte(void) { uchar i = 0。 uchar dat = 0。 for(i = 8。 i 0。 i) { DQ = 0。 dat = 1。 DQ = 1。 if(DQ) dat |= 0x80。 delay(4)。 } return dat。 } 向 DS18B20 写一个字节 void writebyte(unsigned char dat) { uchar i = 0。 for(i = 8。 i 0。 i) { DQ = 0。 DQ = dat amp。 0x01。 delay(5)。 DQ = 1。 dat = 1。 } delay(4)。 } 从 DS18B20 读取数据 void readtemp(void) { uchar a = 0, b = 0。 reset()。 writebyte(0xCC)。 //跳过序列号 writebyte(0x44)。 //启动温度转换 reset()。 writebyte(0xCC)。 writebyte(0xBE)。 //读 9 个寄存器,前两个位温度 a = readbyte()。 //低位 b = readbyte()。 //高位 if(b 0x0f) //判断是否为负值 { a = ~a + 1。 if(a == 0) b = ~b + 1。 else b= ~b。 flag = 10。 } else flag = 12。 temper[0] = a amp。 0x0f。 a = a 4。 temper[1] = b 4。 temper[1] = temper[1]|a。 } 数码管显示 void scandisp() { unsigned char i ,value。 for(i = 0。 i 8。 i++) { P3 = 0xff。 value = table[dispbu。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。