1037-基于51单片机的报警控制(ADC0808,数码管,上下限)原理图、流程图、物料清单、仿真图、源代码

1037-基于51单片机的报警控制(ADC0808,数码管,上下限)原理图、流程图、物料清单、仿真图、源代码

功能介绍:

1、使用ADC0808测量一路模拟量(水位、湿度、烟雾等)
2、如果测量值低于阀值,启动继电器;高于阀值,关闭继电器(也可以改成其他方式控制)
3、数码管显示测量结果和阀值
4、按键设置上下限

有哪些资料:

1、仿真工程文件
2、源代码工程文件
3、原理图工程文件
4、流程图
5、功能介绍
6、元件清单

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

#include "reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
//ADC0809
sbit adc0809_clk=P2^0;
sbit adc0809_start=P3^3;
sbit adc0809_eoc  =P3^4;
sbit adc0809_oe	  =P3^2;

sbit k1=P3^5;//按钮
sbit k2=P3^6;
sbit k3=P3^7;
sbit out=P3^0;//阀门
sbit smg1=P2^7;//数码管
sbit smg2=P2^6;
sbit smg3=P2^5;
sbit smg4=P2^4;
uchar code smgduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar time=0,sec=0;//系统定时
uchar humi=0;//湿度
uchar down=30;//下限
uchar up=80;//上限
uchar mode=0;//模式

//延时
void delay(uint i)
{
	while(i--);
}

uchar adc0809_read()//读取
{
	uchar i;
		_nop_();
		adc0809_clk=!adc0809_clk;
		adc0809_start=1;//启动转换
		for(i=0;i<10;i++)//产生脉冲
		{
			_nop_();
			adc0809_clk=!adc0809_clk;
		}
		adc0809_start=0;
		while(!adc0809_eoc)//等待转换结束
		{
			_nop_();
			adc0809_clk=!adc0809_clk;
		}
		adc0809_oe=1;//读取
		_nop_();
		i=P1;
		adc0809_oe=0;
		return i;
}

//主函数
void main()
{	
	uchar k=0;
	adc0809_start=0;
	adc0809_oe=0;
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		if(!k1 &&(k!=1))		 //设置
		{
			k=1;
			if(mode<2)
				mode++;
			else
				mode=0;
		} 
		if(mode==1)//上限设置
		{
			if(!k2 &&(k!=2))
			{
				k=2;
				if(up<99)
					up++;
			}
			if(!k3 &&(k!=3))
			{
				k=3;
				if(up>down)
					up--;
			}			
		}
		if(mode==2)//下限设置
		{
			if(!k2 &&(k!=2))
			{
				k=2;
				if(down<up)
					down++;
			}
			if(!k3 &&(k!=3))
			{
				k=3;
				if(down>0)
					down--;
			}			
		}
		if(k1 && k2 && k3)
			k=0;		
		//显示
		if(mode==0)
		{
			P0=smgduan[humi/10];smg3=0;delay(50);smg3=1;
			P0=smgduan[humi%10];smg4=0;delay(50);smg4=1;
		}
		if(mode==1)
		{
			P0=0x89;smg1=0;delay(50);smg1=1;
			P0=smgduan[up/10];smg3=0;delay(50);smg3=1;
			P0=smgduan[up%10];smg4=0;delay(50);smg4=1;
		}
		if(mode==2)
		{
			P0=0xC7;smg1=0;delay(50);smg1=1;
			P0=smgduan[down/10];smg3=0;delay(50);smg3=1;
			P0=smgduan[down%10];smg4=0;delay(50);smg4=1;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值