温控系统所有专业(编辑修改稿)内容摘要:

wela=0。 P0=0x7d。 wela=1。 wela=0。 delay(1)。 P0=table[A3]。 //显示个位 dula=1。 dula=0。 P0=0x7b。 wela=1。 wela=0。 delay(1)。 } void xianshi(uint temp1) { uint A5,A6。 A5=temp1/10。 A6=temp1%10。 P0=table[A5]。 dula=1。 dula=0。 P0=0xef。 wela=1。 wela=0。 delay(1)。 P0=table[A6]。 dula=1。 dula=0。 P0=0xdf。 wela=1。 wela=0。 delay(1)。 } void keyscan() { if(up==0) { delay(10)。 if(up==0) { aa++。 if(aa==50) { 7 aa=0。 } } } if(down==0) { delay(10)。 if(down==0) { if(aa==0) { aa=50。 } aa。 } } 、计时器程序以及串口通讯程序等 void main() uchar a。 while(1) { keyscan()。 tmpchange()。 bb=tmp()。 bb=bb/10。 cc=aa1。 dd=aa+1。 if(bbccamp。 amp。 bbdd) { for(a=10。 a0。 a) { xianshi(aa)。 display(tmp())。 P1=0x00。 li=1。 wai=1。 hot=1。 } else if(bbdd) { for(a=10。 a0。 a) { 8 xianshi(aa)。 display(tmp())。 P1=0xff。 li=0。 wai=1。 hot=1。 } } else if(bbcc) { for(a=10。 a0。 a) { xianshi(aa)。 display(tmp())。 P1=0xff。 li=0。 wai=1。 hot=0。 } } 3 DS18B20温度传感器简介 DS18B20的工作原理 DS18B20 工作时序 根据 DS18B20 的通讯协议,主机控制 DS18B20 完成温度转换必须经过三个步骤: 1. 每一次读写之前都 必须 要对 DS18B20 进行复位 ; 2. 复位成功后发送一条 ROM 指令 ; 3. 最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。 复位要求主 CPU 将数据线下拉 500 微秒,然后释放, DS18B20 收到信号后等待 15~ 60 微秒左右后发出 60~ 240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功。 其工作时序包括初始化时序、写时序和读时序,具体工作方法如图 , , 所示。 (1) 初始化时序 响应脉冲60 ~2 40等待1 5 60主机 最小4 80主机复位脉冲最小4 80 US 9 图 3- 1 初始化时序 总线上的所有传输过程都是以初始化开始的,主机响应应答脉冲。 应答脉冲使主机知道,总线上有从机设备,且准备就绪。 主机输出低电平,保持低电平时间至少 480us,以产生复位脉冲。 接着主机释放总线, ,延时 15~ 60us,并进入接受模式,以产生低电平应答脉冲,若为低电平,再延时 480us[12]。 (2) 写时序 采样15~45采样15~4511主机写1 时序主机写0 时序 图 3- 2 写时序 写时序包括写 0 时序和写 1 时序。 所有写时序至少需要 60us,且在 2 次独立的写时序之间至少需要 1us 的恢复时间,都是以总线拉低开始。 写 1 时序,主机输出低电平,延时2us,然后释放总线,延时 60us。 写 0 时序,主机输出低电平,延时 60us,然后释放总线,延时 2us[8]。 (3) 读时序 主机采样主机采样454511主机写1时 序主机写0时 序 图 3- 3 读时序 总线器件仅在主机发出读时序是,才向主 机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。 所有读时序至少需要 60us,且在 2 次独立的读时序之间至少需要 1us 的恢复时间。 每个读时序都由主机发起,至少拉低总线 1us。 主机在读时序期间必须释放总线,并且在时序起始后的 15us 之内采样总线状态。 主机输出低电平延时 2us,然后主机转入输入模式延时 12us,然后读取总线当前电平,然后延时 50us[4] ROM 操作命令 当主机收到 DSl8B20 的响应信号后,便可以发出 ROM 操作命令之一,这些命令如表 :ROM 操作命令。 10 DS18B20的驱动程序 unsigned char ReadOneChar(void) { unsigned char i=0。 unsigned char dat。 //储存读出的一个字节数据 for (i=0。 i8。 i++) {DQ =1。 // 先将数据线拉高 _nop_()。 //等待一个机器周期 DQ = 0。 //单片机从 DS18B20 读书据时 ,将数据线从高拉低即启动读时序 _nop_()。 //等待一个机器周期 DQ = 1。 //将数据线 人为 拉高 ,为单片机检测 DS18B20 的输出电平作准备 for(time=0。 time2。 time++)。 //延时约 6us,使主机在 15us 内采样 dat=1。 if(DQ==1) dat|=0x80。 //如果读到的数据是 1,则将 1 存入 dat else dat|=0x00。 //如果读到的数据是 0,则将 0 存入 dat for(time=0。 time8。 time++)。 //延时 3us,两个读时序之间必须有大于 1us 的恢复期 } return(dat)。 //返回读出的十六进制数据 } WriteOneChar(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。