基于51单片机的智能花盆设计

项目名:

基于单片机的智能花盆设计

单片机:STC89C52

功能:

1、通过显示屏显示花盆中土壤的温度、湿度,花盆外光照强度;

2、通过按键切换显示屏的界面,设置土壤最小温度值、最小湿度值,花盆外光照强度值,输液倒计时,松土倒计时;

3、通过土壤湿度传感器检测土壤湿度,通过DS18B20检测土壤温度;

4、通过继电器控制加热片,水泵,输液,补光灯;

5、通过步进电机来实现松土;

**********************************
包含头文件
**********************************/
#include "adc.h"


/**********************************
函数定义
**********************************/
/****
*******获取adc值函数
*******参量定义:CH:通道数  0:通道0   1:通道1
*******返回值:adc值
*****/
uint Adc0832_Get_Value(uchar CH)
{
	uint dat = 0x00; 
	uchar i,test,adval;
	adval = 0x00;
	test = 0x00;

	//初始化
	ADC_CLK = 0;      
	ADC_DATI = 1;
	_nop_();   _nop_();
	ADC_CS = 0;
	_nop_();
	ADC_CLK = 1;
	_nop_();  _nop_();

	//通道选择
	if(CH == 0x00)     
	{
		ADC_CLK = 0;
		ADC_DATI = 1;      					//通道0的第一位
		_nop_();
		ADC_CLK = 1;
		_nop_();  _nop_();

		ADC_CLK = 0;
		ADC_DATI = 0;      					//通道0的第二位
		_nop_();  _nop_();

		ADC_CLK = 1;
		_nop_();
	} 
	else
	{
		ADC_CLK = 0;
		ADC_DATI = 1;      					//通道1的第一位
		_nop_();  _nop_();
		ADC_CLK = 1;
		_nop_();  _nop_();

		ADC_CLK = 0;
		ADC_DATI = 1;      					//通道1的第二位
		_nop_();
		ADC_CLK = 1;
		_nop_();
	}

	ADC_CLK = 0;   _nop_();
	ADC_DATI = 1;

	for( i = 0;i < 8;i++ )      	//读取前8位的值
	{
		_nop_();
		adval <<= 1;
		ADC_CLK = 1;
		_nop_();  _nop_();

		ADC_CLK = 0;
		_nop_();

		if (ADC_DATO)
			adval |= 0x01;
		else
			adval |= 0x00;
	}
	for (i = 0; i < 8; i++)       //读取后8位的值
	{
		test >>= 1;
		if (ADC_DATO)
			test |= 0x80;
		else 
			test |= 0x00;
		_nop_();
		ADC_CLK = 1;
		_nop_();  _nop_();

		ADC_CLK = 0;
		_nop_();

	}

	//比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉
	if (adval == test)     
		dat = test;
	_nop_();  _nop_();
	ADC_CS = 1;        						//释放ADC0832
	ADC_DATO = 1;
	ADC_CLK = 1;

	return dat;
}



/**********************************
包含头文件
**********************************/
#include "key.h"


/**********************************
变量定义
**********************************/
uchar chiclet_keyboard_num = 0;


/**********************************
函数定义
**********************************/
/****
*******	按键处理函数
key_mode:0,不支持连续按;1,支持连续按;
返回值:键值
*****/
uchar Chiclet_Keyboard_Scan(uchar key_mode)
{
	static uchar key_up=1;										//按键松开标志
	
	if(key_mode)  														//mode=1,支持连按
		key_up=1;
	
	if(key_up && (KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0))
	{
		Delay_function(10);											//去抖动 
		key_up=0;
		BEEP = 0;
		
		if(KEY1==0)															//按键1按下,返回1
			return 1;
		else if(KEY2==0)												//按键2按下,返回2
			return 2;
		else if(KEY3==0)												//按键3按下,返回3
			return 3;
		else if(KEY4==0)												//按键4按下,返回4
			return 4;
	}
	else if(KEY1==1 && KEY2==1 && KEY3==1 && KEY4==1)		//没有按键按下,松开标志位置1
	{
		key_up=1;
		BEEP = 1;
	}

	return 0;																	// 无按键按下.返回0
}

image.png

image.png

image.png

 文章借鉴于此纷传

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值