智能仓库物流控制系统(2)

第二篇文章主要介绍的是温度传感器DS18B20温度传感器

在上一篇文章中没有写出来,在设计LCD1602显示模式的时候出现了一个难题,就是分屏显示数据的问题,因为要显示的东西比较多但是显示屏只支持16*2的显示,所以要设置多个界面显示。在这我设置了几个按键作为触发的条件,进行界面的切换。

void anjiank1()
{
			if(k1==0)
			{
				delay1ms(10);
				if(k1==0)
				{
					 lcd_init();
					 write_com(0x80);
					 display(table1);
					 
					 write_com(0x80+0x40);
					 display(table2);

					 write_com(0x80+0x0A);
					 display(table3);
					 
					 write_com(0x80+0x4A);
					 display(table4);
					 while(3)
				{
				xianshi1();
				jinchu();
				if(k2==0||k3==0)
				{
					break;
				}
				}
			}
			}
			
}


void anjiank3()
{
	if(k3==0)   
			{	
			delay1ms(10);
			if(k3==0)
			{
				lcd_init();
				while(2)
				{
				xianshi3();
				if(k1==0||k2==0)
				{
					break;
				}
				}
			}
			}
}


void anjiank2()
{
	if(k2==0)
			{
			  delay1ms(10);
				if(k2==0)
				{
				lcd_init();
				init_play();
				while(4)
				{
				xianshi2();						
		    ledss();
				temp();
				smoke();                                         
				if(k1==0||k3==0)
				{
				break;
				}
			}
		}
	}
}


再设计的过程中我只考虑了温度的检测,没有进行湿度的检测,所以在检测的过程中使用DS18B20温度传感器就可以,这个温度传感器不需要数模转换器就可以进行显示,现实的结果要在LCD1602上显示出来,所以需要设置一下LCD的另一个显示界面。

DS18B20温度传感器的两个模式就是读和写模式,具体的时序图可以查询其他的CSDN的大神!!

接下来的是DS18B20温度传感器的代码

 void delay_18B20(unsigned int i)		//延时1微秒
{
 	while(i--);
}

void ds1820rst()				//ds1820复位
 {  
	 unsigned char x=0;
	 DQ = 1;          		//DQ复位
	 delay_18B20(4);  		//延时
	 DQ = 0;          		//DQ拉低
	 delay_18B20(100);		 //精确延时大于480us
	 DQ = 1;          		//拉高
	 delay_18B20(40);	 
   }  
  
uchar ds1820rd()				//读数据
  { 
		 unsigned char i=0;
		 unsigned char dat = 0;
		 for (i=8;i>0;i--)
	 {   
	    DQ = 0; 			//给脉冲信号
		  dat>>=1;
		  DQ = 1; 				//给脉冲信号
		  if(DQ)
		  dat|=0x80;
		  delay_18B20(10);
	  }
 	return(dat);
  }

void ds1820wr(uchar wdata)    //写数据
  {
		unsigned char i=0;
    for (i=8; i>0; i--)
   { 
		 DQ = 0;
     DQ = wdata&0x01;
     delay_18B20(10);
     DQ = 1;
     wdata>>=1;
   }
 }
  

read_temp()     //读取温度值并转换
 {
		uchar a,b;
		ds1820rst();    
		ds1820wr(0xcc);			//跳过读序列号
		ds1820wr(0x44);		//启动温度转换
		ds1820rst();    
		ds1820wr(0xcc);		//跳过读序列号
		ds1820wr(0xbe);			//读取温度
		a=ds1820rd();
		b=ds1820rd();
		tvalue=b;
		tvalue<<=8;
		tvalue=tvalue|a;
		tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
		return(tvalue);
}


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值