|
//****************************************************
//
//
// 智能水龍頭
//
//
//****************************************************
#include "main.h"
//定義變量
unsigned int Temp_Buffer = 0; //溫度存放
unsigned int Count = 0; //流量計脈沖數(shù)
unsigned char Temp_Top = 60; //溫度上限
unsigned char Temp_Down = 20; //溫度下限
unsigned char KEY_NUM = 0; //鍵值
unsigned char Flag_connect; //溫度傳感器是否連接 00表示連接
//****************************************************
//主函數(shù)
//****************************************************
void main()
{
initial();
Init_LCD1602(); //初始化LCD1602
LCD1602_write_com(0x80); //指針設(shè)置到第一行
LCD1602_write_word("Welcome to use!"); //顯示內(nèi)容
LCD1602_write_com(0x80+0x40+5); //指針設(shè)置到第二行
LCD1602_write_word("Beetle v0.1"); //顯示內(nèi)容
while(1)
{
unsigned int t=0;
if(BAT100 == 0) //沒滿電
{
BAT=1; //充電
}else
{
BAT=0; //充滿
}
t=MAX6675_ReadReg(); //讀溫度**************
Flag_connect=t&0x04; //讀出數(shù)據(jù)的D2位是熱電偶掉線標(biāo)志位,該位為1表示掉線,該位為0表示連接
Flag_connect=Flag_connect>>2; //MAX6675是否在線
t = t<<1; //讀出來的數(shù)據(jù)的D3~D14是溫度值
t = t>>4;
Temp_Buffer = t/4;
//測得的溫度單位是0.25,所以要乘以0.25(即除以4)才能得到以度為單位的溫度值
water();
Water = 0;
LED_Open = 0;
//show
}
}
void water()
{
unsigned int mL = 0; //流量(毫升)
unsigned int i = 0;
unsigned int t =0;
if(INF == 0 )//檢測到有人
{
if( Temp_Buffer <= Temp_Top && Temp_Buffer >= Temp_Down && Flag_connect == 0) //溫度正常
{
Water = 1;
LED_Open = 1;
LED_Err = 0;
for(i = 0; i++ ;i<300) //持續(xù)流水三秒,并顯示水量水溫
{
if(Temp_Buffer > Temp_Top || Temp_Buffer > Temp_Down || Flag_connect != 0) //溫度異常提示
{
Buzzer = 0;
Delay_ms(1000);
Buzzer = 1;
}
t=MAX6675_ReadReg(); //讀溫度**************
Flag_connect=t&0x04; //讀出數(shù)據(jù)的D2位是熱電偶掉線標(biāo)志位,該位為1表示掉線,該位為0表示連接
Flag_connect=Flag_connect>>2; //MAX6675是否在線
t = t<<1; //讀出來的數(shù)據(jù)的D3~D14是溫度值
t = t>>4;
Temp_Buffer = t/4; //測得的溫度單位是0.25,所以要乘以0.25(即除以4)才能得到以度為單位的溫度值
mL = Count * 1000 /450;//每升水450個脈沖
//show
Delay_ms(100);
}
}else //溫度異常報警1秒
{
Water = 0;
LED_Open = 0;
LED_Err = 1;
Buzzer = 0;
Delay_ms(1000);
Buzzer = 1;
}
water(); //遞歸,再次檢查
}
Count = 0;//清空計數(shù)器
}
//****************************************************
//按鍵掃描程序
//****************************************************
void Scan_Key()
{
if( KEY1 == 0 ) //按鍵1掃描
{
Delay_ms(10); //延時去抖
if( KEY1 == 0 )
{
while(KEY1 == 0); //等待松手
KEY_NUM = 1;
}
}
if( KEY2 == 0 ) //按鍵2掃描
{
Delay_ms(10); //延時去抖
if( KEY2 == 0 )
{
while(KEY2 == 0); //等待松手
KEY_NUM = 2;
}
}
if( KEY3 == 0 ) //按鍵2掃描
{
Delay_ms(10); //延時去抖
if( KEY3 == 0 )
{
while(KEY3 == 0); //等待松手
KEY_NUM = 3;
}
}
if( KEY4 == 0 ) //按鍵2掃描
{
Delay_ms(10); //延時去抖
if( KEY4 == 0 )
{
while(KEY4 == 0); //等待松手
KEY_NUM = 4;
}
}
}
//****************************************************
//MS延時函數(shù)(12M晶振下測試)
//****************************************************
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
//****************************************************
//單片機初始化
//****************************************************
void initial()
{
IT0=1;// 外部中斷0工作方式(下降沿有效)
EA=1;
EX0=1;
TR0=1; //開中斷
Buzzer = 1;
BAT = 1;
Water = 0;
LED_Open = 0;
LED_Err = 0;
}
//計數(shù)器(流量)
void exter0() interrupt 0
{
Count++;
}
|
|