超聲波流量計的主程序研究與設計 十七
//5.主單片機流速流量計算子程序
js()
{
double v,q;
uint v1,q1
v=(C*C*tc)/(4*d*tane);//將tc帶入計算流速
q=pi*d*d*v/4;//計算流量
v1=v*100;//將##。##格式的流速和流量乘上100,方便賦值
q1=q*100;
data_v[0]=v1/1000;//將得到的值分別賦給對應的位:2個整數,2個小數;第一個數字為十位數
data_v[1]=(v1%1000)/100;//第2個顯示個位數字
data_v[2]=(v1%100)/10;//第3個顯示十分位
data_v[3]=v1%10; //第4個顯示百分位
data_q[0]=q1/1000;//
data_q[1]=(q1%1000)/100;
data_q[2]=(q1%100)/10;
data_q[3]=q1%10;
}
//6.主程序:完成參數的設置,流量和流速的計算和顯示
void main()
{
p0=0xff;//第一部分:初始化
p2=0xff;
//P1^1=1//不向從單片機發送測量命令
IT0=0;//外部中斷INTO,為低電平觸發方式
EX0=1;//允許外部中斷INTO申請中斷
EA=1;//打開總的中斷開關
ES=1;//打開串口中斷開關
TMOD=0x20;//定時器1工作在方式三,作為波特率發生器
TR1=1;//開定時器
TH1=0xf3H;//根據波特率設置初值
TL1=0xf3H;
RI=1;//串口中斷接收申請標志位
SCON=0x50;//串口工作在方式一
PCON=0x80;//速率加倍,波特率為4.8K
while(1)
{
key_num();//調用鍵盤掃描子程序,獲取鍵值
key_do();//調用鍵值處理函數:設置管道直徑和安裝角度
lcd_disp();//將設置的參數顯示出來
js();//調用數據處理子程序:計算流速和流量
lcd_disp();//調用顯示子程序,顯示流量和流速
}
//串口中斷程序:將時間差讀出
void serial() interrupt 4 using 1
{
RI=0;//軟件清除串口中斷標志位
tc=SBUF;//讀出數據
delay(10);
}
附件三:從單片機程序
#include<reg51.h>
#include<math.h>
#include<absacc.h>
#include<stdio.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int
bit flag1=0;//順流結束標志位
bit flag2=0;//逆流結束標志位
bit send_flag=0;//從向主單片機發送數據標志位
double tc;//全局變量,時間差
//1.延時函數
//--------------------------------------------------------------
void delay(int ms)
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
超聲波流量計