基于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;elseadval |= 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; //释放ADC0832ADC_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按下,返回1return 1;else if(KEY2==0) //按键2按下,返回2return 2;else if(KEY3==0) //按键3按下,返回3return 3;else if(KEY4==0) //按键4按下,返回4return 4;}else if(KEY1==1 && KEY2==1 && KEY3==1 && KEY4==1) //没有按键按下,松开标志位置1{key_up=1;BEEP = 1;}return 0; // 无按键按下.返回0
}



文章借鉴于此纷传
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
