標(biāo)題: 51單片機(jī)模擬量報(bào)警 [打印本頁(yè)]

作者: 章章    時(shí)間: 2020-8-10 19:55
標(biāo)題: 51單片機(jī)模擬量報(bào)警
#include "common.h"
#include "lm041drv.h"

#define waterUp 210
#define waterDown 50
#define tempUp  205
#define tempDown 60
#define pressDown 70



sbit EOC=P3^5;
sbit sound=P3^4;

uchar water,temp,press;

void T0Init()
{
        TMOD=0x01;
        TH0=0xF7;
        TL0=0x1F;
        ET0=1;
        EA=1;
}


void DisplayUI()
{
        SetRowCol(0,0);
        printf("    V   Up  Down");
        SetRowCol(1,0);
        printf("W:  %03u %03u %03u ",(uint)water,(uint)waterUp,(uint)waterDown);
        SetRowCol(2,0);
        printf("T:  %03u %03u %03u ",(uint)temp,(uint)tempUp,(uint)tempDown);
        SetRowCol(3,0);
        printf("P:  %03u     %03u ",(uint)press,(uint)pressDown);
}


void main()
{
        uchar xdata *adc0808[3]={0x78ff,0x79ff,0x7aff};
        uchar xdata *reg373=0xbfff;
        uchar alarmLedInf=0xff;
        uchar normalCount=0;

        Lm041Init();
        T0Init();
        SetRowCol(2,0);
        printf("hello");

        while(1)
        {
                *adc0808[0]=0;
                while(EOC==0);
                *adc0808[0]=0;
                while(EOC==0);
                water=*adc0808[0];

                *adc0808[1]=0;
                while(EOC==0);
                *adc0808[1]=0;
                while(EOC==0);
                temp=*adc0808[1];

                *adc0808[2]=0;
                while(EOC==0);
                *adc0808[2]=0;
                while(EOC==0);
                press=*adc0808[2];

                normalCount=0;
                if(water>waterUp)
                {
                        alarmLedInf=alarmLedInf&0xfe;//D0位清0,水位上限報(bào)警燈亮
                        alarmLedInf=alarmLedInf|(1<<1);//D1位置1,水位下限報(bào)警燈滅
                }
                else if(water<waterDown)
                {
                        alarmLedInf=alarmLedInf&~(1<<1);//D1位清0,水位下限報(bào)警燈亮
                        alarmLedInf=alarmLedInf|(1<<0);//D0位置1,水位上限報(bào)警燈滅
                }
                else
                {
                        alarmLedInf=alarmLedInf|(3<<0);//D0,D1位置1,水位上下限報(bào)警燈滅
                        normalCount++;
                }

                if(temp>tempUp)
                {
                        alarmLedInf=alarmLedInf&~(1<<2);//D2位清0,溫度上限報(bào)警燈亮
                        alarmLedInf=alarmLedInf|(1<<3);//D3位置1,溫度下限報(bào)警燈滅
                }
                else if(temp<tempDown)
                {
                        alarmLedInf=alarmLedInf&~(1<<3);//D3位清0,溫度下限報(bào)警燈亮
                        alarmLedInf=alarmLedInf|(1<<2);//D2位置1,溫度上限報(bào)警燈滅
                }
                else
                {
                        alarmLedInf=alarmLedInf|(3<<2);//D2,D3位置1,溫度上下限報(bào)警燈滅
                        normalCount++;
                }

                if(press<pressDown)
                {
                        alarmLedInf=alarmLedInf&~(1<<4);//D4位清0
                }
                else
                {
                        alarmLedInf=alarmLedInf|(1<<4);//D4位置1
                        normalCount++;
                }
               
                if(normalCount==3)
                {
                        alarmLedInf=alarmLedInf&~(1<<5);//D5位清0
                        TR0=0;
                }
                else
                {
                        alarmLedInf=alarmLedInf|(1<<5);//D5位置1
                        TR0=1;
                }               

                *reg373=alarmLedInf;

                DisplayUI();
        }
}

void T0Sever() interrupt 1
{
        TH0=0xF7;
        TL0=0x1F;
        sound=~sound;
}





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1