水流速测量
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;