标题: 水龙头监控 [打印本页]

作者: 302530580    时间: 2018-6-4 20:13
标题: 水龙头监控
//****************************************************
//
//
//                智能水龙头
//
//
//****************************************************

#include "main.h"


//定义变量
unsigned int Temp_Buffer = 0; //温度存放
unsigned int Count = 0;                  //流量计脉冲数
unsigned char Temp_Top = 60;  //温度上限
unsigned char Temp_Down = 20; //温度下限
unsigned char KEY_NUM = 0;          //键值
unsigned char Flag_connect;          //温度传感器是否连接 00表示连接



//****************************************************
//主函数
//****************************************************
void main()
{
        initial();
        Init_LCD1602();                                                                        //初始化LCD1602
        LCD1602_write_com(0x80);                                                //指针设置到第一行
        LCD1602_write_word("Welcome to use!");                        //显示内容
        LCD1602_write_com(0x80+0x40+5);                                //指针设置到第二行
        LCD1602_write_word("Beetle v0.1");                                                //显示内容
        while(1)
        {
                unsigned int t=0;
               
                if(BAT100 == 0)        //没满电
                {
                        BAT=1;                //充电
                }else
                {
                   BAT=0;                //充满
                }

               
                t=MAX6675_ReadReg();                 //读温度**************
                Flag_connect=t&0x04;                         //读出数据的D2位是热电偶掉线标志位,该位为1表示掉线,该位为0表示连接
                Flag_connect=Flag_connect>>2;         //MAX6675是否在线
                t = t<<1;                                                   //读出来的数据的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) //持续流水三秒,并显示水量水温
                                {
                                        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;                         //读出数据的D2位是热电偶掉线标志位,该位为1表示掉线,该位为0表示连接
                                        Flag_connect=Flag_connect>>2;         //MAX6675是否在线
                                        t = t<<1;                                                   //读出来的数据的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;//清空计数器
}



//****************************************************
//按键扫描程序
//****************************************************
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延时函数(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;
}
//计数器(流量)
void exter0() interrupt 0
{
        Count++;
}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1