代碼實現(xiàn)功能
通過液晶LCD1602液晶實時顯示瞬時流量和累計流量、實時溫度、設(shè)置的累計流量。
通過按鍵設(shè)置累計流量閾值,如果累計流量超過設(shè)置閾值,蜂鳴器報警、繼電器斷開,否則不報警繼電器閉合。
unsigned long PluNum=0;//檢測速度轉(zhuǎn)化來的脈沖量
unsigned long time_ms; //定時器計數(shù)
float ShunShi=0; //瞬時流量
float LeiJi=0; //累計流量
float setNum=1.5; //設(shè)置流量值
char dis0[16]; //顯示更新暫存
char dis1[16]; //顯示更新暫存
unsigned char dealFlag=0; //處理速度標志
bit rekey =0; //防止重復
unsigned char ReadTempFlag=0;//定義讀時間標志
int temp1;//溫度讀取值
float temperature; //實際溫度
void Init_Timer0(void); //函數(shù)聲明
/*------------------------------------------------
主函數(shù)
------------------------------------------------*/
void main (void)
{
Init_Timer0(); //定時器0初始化
EX0=1; //外部中斷0開
IT0=1; //邊沿觸發(fā)
EA=1; //全局中斷開
LCD_Init(); //初始化液晶
DelayMs(20); //延時有助于穩(wěn)定
LCD_Clear(); //清屏
buzzer=0;relay = 0;DelayMs(200);buzzer=1;relay = 1;//蜂鳴器繼電器 上電動作下方便檢測硬件
while (1) //主循環(huán)
{
if(dealFlag==1) //定時處理流速
{
dealFlag=0;
ShunShi=(float)PluNum*0.00223*2;//計算瞬時流量 一個脈沖代表0.00223ml 3s處理一次
LeiJi=LeiJi+(float)PluNum*0.00223; //累計計算累計流量
ReadTempFlag++;
if(ReadTempFlag>=2)//讀取溫度標志
{
ReadTempFlag=0;
temp1=ReadTemperature();//讀取溫度
temperature=(float)temp1*0.0625; //溫度值轉(zhuǎn)換
}
sprintf(dis0,"S:%4.2fL/s %4.1f C",ShunShi,temperature); //打印
LCD_Write_String(0,0,dis0); //顯示 瞬時流量
LCD_Write_Char(14,0,0xdf); //顯示溫度符號
sprintf(dis1,"L:%4.1fL %4.1f ",LeiJi,setNum); //打印
LCD_Write_String(0,1,dis1); //顯示累計流量
PluNum=0;//清空計數(shù)
if(LeiJi>setNum) //對比設(shè)置和實際值
{buzzer=0;relay = 1;} //蜂鳴器報警 斷開繼電器
else
{buzzer=1;relay = 0;} //關(guān)閉蜂鳴器 閉合繼電器
}
if((key1 == 0)||(key2 == 0))//有按鍵情況下
{
if(rekey == 0)
{
DelayMs(10);
if(key1 == 0) //按鍵1按下
{
rekey =1;//防止重復按下
if(setNum<99.9) //設(shè)置值++
setNum = setNum + 0.1;
}
else if((key2 == 0))//按鍵2按下
{
rekey =1;//防止重復按下
if(setNum>0.1) //設(shè)置值--
setNum = setNum - 0.1;
}
}
}
else
{
rekey = 0;//防止重復按下
}
}
}