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