智能仓库物流控制系统(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);
}


 

上一篇:STM32F103五分钟入门系列(八)SysTick滴答定时器+SysTick中断实现跑马灯


下一篇:stm32f429系统时钟的配置学习。systick定时器的应用。典型的延时函数的编写。