水流速测量

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

水流速测量仪原理图

PCB图

元器件清单

程序

#include

typedef unsigned char u8;

typedef unsigned int u16;

typedef unsigned long u32;

u8 d,flag,TOcount;

sbit TempIO = P3^7;

sbit LCD1602_RS = P2^0;

sbit LCD1602_RW = P2^1;

sbit LCD1602_EN = P2^2;

#define LCD1602_Data P0

void DelayNms(u8 n)//12MHz晶振,约延时n*1ms

{

unsigned int i;

while(n--)

{

for(i=0;i<82;i++);

}

}

u8 Ds18b20_Init(void)

{

u8 time;

TempIO = 0;

for(time=0;time<230;time++);//延时692us//Delay700us();

TempIO = 1;

for(time=0;time<30;time++);//92us// Delay92us();

if(TempIO == 0)

{

for(time=0;time<230;time++);//延时692us//Delay700us();

return 1;

}

else return 0;

}

void Ds18b20_Write(u8 dat)

{

u8 time,i;

for(i=0;i<8;i++)

{

if((dat&0x01)==0)

{

TempIO = 0;

for(time=0;time<30;time++);//92us// Delay90us();

TempIO = 1;

}

else

{

TempIO = 0;

TempIO = 0; //消耗1us

TempIO = 1;

for(time=0;time<30;time++);//92us// Delay90us();

}

dat = dat>>1;

}

}

u8 Ds18b20_Read(void)

{

u8 i,time,dat=0;//dat应初始化为0 for(i=0;i<8;i++)

{

TempIO = 0;

TempIO = 0; //消耗1us

TempIO = 1;

if(TempIO == 1)

{

dat = (dat|(1<

}

for(time=0;time<30;time++);//92us// Delay90us();

}

return dat;

}

u8 LCD1602_ReadStatus(void) //读状态

{

u8 dat;

LCD1602_EN = 0;LCD1602_EN = 0;LCD1602_EN = 0;LCD1602_EN = 0;//多个相同语句以实现延时效果,可增加程序稳定性

LCD1602_RS = 0;

LCD1602_RW = 1;LCD1602_RW = 1;LCD1602_RW = 1;LCD1602_RW = 1;

LCD1602_EN = 1;LCD1602_EN = 1;LCD1602_EN = 1;LCD1602_EN = 1;

dat = LCD1602_Data;

LCD1602_EN = 0;LCD1602_EN = 0;LCD1602_EN = 0;LCD1602_EN = 0; return dat;

}

void LCD1602_WriteCom(u8 dat)//给液晶送控制命令

{

while((LCD1602_ReadStatus()&0x80)!= 0);

LCD1602_EN = 0;//LCD1602_EN = 0;LCD1602_EN = 0;LCD1602_EN = 0;

LCD1602_RS = 0;

LCD1602_RW = 0;//LCD1602_RW = 0;LCD1602_RW = 0;LCD1602_RW = 0;

LCD1602_Data = dat;//LCD1602_Data = dat;LCD1602_Data = dat;

LCD1602_EN = 1;//LCD1602_EN = 1;LCD1602_EN = 1;LCD1602_EN = 1;

LCD1602_EN = 0;//LCD1602_EN = 0;LCD1602_EN = 0;LCD1602_EN = 0;

}

void LCD1602_WriteData(u8 dat) //给液晶送要显示的数据

{

while((LCD1602_ReadStatus()&0x80)!= 0);

LCD1602_EN = 0;//LCD1602_EN = 0;LCD1602_EN = 0;LCD1602_EN = 0;

LCD1602_RS = 1;

LCD1602_RW = 0;//LCD1602_RW = 0;LCD1602_RW = 0;LCD1602_RW = 0;

相关文档
最新文档