找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1101|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机模拟量报警

[复制链接]
跳转到指定楼层
楼主
ID:813029 发表于 2020-8-10 19:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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,水位上限报警灯亮
                        alarmLedInf=alarmLedInf|(1<<1);//D1位置1,水位下限报警灯灭
                }
                else if(water<waterDown)
                {
                        alarmLedInf=alarmLedInf&~(1<<1);//D1位清0,水位下限报警灯亮
                        alarmLedInf=alarmLedInf|(1<<0);//D0位置1,水位上限报警灯灭
                }
                else
                {
                        alarmLedInf=alarmLedInf|(3<<0);//D0,D1位置1,水位上下限报警灯灭
                        normalCount++;
                }

                if(temp>tempUp)
                {
                        alarmLedInf=alarmLedInf&~(1<<2);//D2位清0,温度上限报警灯亮
                        alarmLedInf=alarmLedInf|(1<<3);//D3位置1,温度下限报警灯灭
                }
                else if(temp<tempDown)
                {
                        alarmLedInf=alarmLedInf&~(1<<3);//D3位清0,温度下限报警灯亮
                        alarmLedInf=alarmLedInf|(1<<2);//D2位置1,温度上限报警灯灭
                }
                else
                {
                        alarmLedInf=alarmLedInf|(3<<2);//D2,D3位置1,温度上下限报警灯灭
                        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;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表