单片机实现土壤湿度检测程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
datahandle();
display();
if(set==0)
{
time(611);
if(set==0)
{
asd();
}
}
if(set==0)
{
time(611);
if(set==0)
{
qwe();
}
}
}
}
/****************************************************/
P2=6;
delayms(11);
P0=table[n[2]];
P2=7;
delayms(11);
if(keydown==0)
{
time(111);
if(keydown==0)
{
zuida=zuida-1;
}
}
if(keyup==0)
{
time(111);
if(keyup==0)
{
P0=0x00;
P20=0;
P21=0;
P22=0;
P0=mun_to_char[shiwei];
P20 = 1;
P21 = 0;
P22 = 0;
delayms(50);
P0=mun_to_char[baiwei];
P20 = 0;
P21 = 0;
P22 = 0;
sbit P21=P2^1; //数码管位选,锁存器控制信号
sbit P22=P2^2; //数码管位选,锁存器控制信号
uchar j,k;
uchar baiwei,shiwei,gewei,qianwei;
uchar code mun_to_char[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管显示编码(1-F)
#define ADC_FLAG 0x10 //ADC 清除位
#define ADC_START 0x08 //ADC 开始转换控制为
#define ADC_SPEEDLL 0x00 //420 clocks
#define ADC_SPEEDL 0x20 //280 clocks
c=e/2;
if(c<zuixiao)
{
for(i = 0; i < 250; i++)
{
BELL = 0;
delayms(3); //延时10毫秒
BELL = 1;
delayms(3); //延时10毫秒
}
}
if(c>zuida)
{
for(i = 0; i < 250; i++)
}
void delay(uchar s)
{
while(--s);
}
void time(long t)
{
int i;
while (t--)
{
i=830;
while (i--) ;
}
}
/*************************ADC初始化*******************/
{
unsigned char n[3];
n[0]=zuixiao%1000/100;
n[1]=zuixiao%100/10;
n[2]=zuixiao%10;
P0=table[n[0]];
P2=3;
delayms(11);
P0=table[n[1]];
P2=4;
delayms(11);
P0=table[n[2]];
P2=5;
delayms(11);
if(keyup==0)
{
time(111);
if(keyup==0)
{
zuixiao=zuixiao+1;
}
}
if(keydown==0)
{
time(111) ;
if(keydown==0)
{
zuixiao=zuixiao-1;
}
}
if(set==0)
{
time(611);
if(set==0)
{
break;
}
}
}
}
{
BELL = 0;
delayms(3); //延时10毫秒
BELL
= 1;
delayms(3); //延时10毫秒
}
}
qianwei=c/1000;
baiwei=c%1000/100; //转换结果百位提取
#define uint unsigned int
sbit keydown = P3^2;
sbit keyup = P3^3;
sbit set = P3^4;
sbit BELL=P3^6;
int zuida=70;
int zuixiao=12;
#define ADC_POWER 0x80 //ADC 使能控制位
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
_nop_(); //Must wait before inquiry
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
ADC_CONTR &= ~ADC_FLAG; //关闭 ADC
#define ADC_SPEEDH 0x40 //140 clocks
#define ADC_SPEEDHH 0x60 //70 clocks
sfr ADC_CONTR =0xBC; //ADC控制寄存器
sfr ADC_RES =0xBD; //ADC转换结果寄存器
delayms(2); //ADC 开和延时
}
/****************AD转换高八位获取函数*******************/
uchar get_AD_result(uchar ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
sfr ADC_LOW2 =0xBE; //ADC转换结果低八位结果寄存器
sfr P1ASF =0x9D; //P1口模拟控制寄存器
sbit ADRJ = 0xA5; //ADC结果寄存器位数控制
sbit P20=P2^0; //数码管位选,锁存器控制信号
{
zuida=zuida+1;
}
}
if(set==0)
{
time(611);
if(set==0)
{
break;
}
}
}
}
/*****************************************************/
void asd()
{
while(1)
delayms(50);
P0=mun_to_char[gewei];
P20 = 0;
P21 = 1;
P22 = 0;
delayms(50);
}
}
void main()
{
P1=0xff;
InitADC();
while(1)
{
void qwe();
void asd();
void delays(void) //延时子程序
{
uchar m,n;
for(m=20;m>0;m--)
for(n=20;n>0;n--);
}
void delayms(int ms)
{
uchar t;
for(;ms>0;ms--)
for(t=0;t<120;t++);
#include<reg51.h>
#include<math.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
return ADC_RES; //返回 ADC 结果
}
/****************数据处理********************/
void datahandle()
{
int c,d,e,i;
d=get_AD_result(0);
e=260-d;
void InitADC()
{
ADRJ=0;
P1ASF = 0xff; //1111,1111,P1^0-p1^7 设置为 A/D 转换输入脚
ADC_RES = 0; //清除结果
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
void qwe()
{
while(1)
{
unsigned char n[3];
n[0]=zuida%1000/100;
n[1]=zuida%100/10;
n[2]=zuida%10;
P0=table[n[0]];
P2=5;
delayms(11);
P0=table[n[1]];
shiwei=c%100/10; //转换结果十位提取
gewei =c%10; //转换结果各位提取
}
/****************显示子程序******************/
void display()
{
uint y=24;
while(y--)
display();
if(set==0)
{
time(611);
if(set==0)
{
asd();
}
}
if(set==0)
{
time(611);
if(set==0)
{
qwe();
}
}
}
}
/****************************************************/
P2=6;
delayms(11);
P0=table[n[2]];
P2=7;
delayms(11);
if(keydown==0)
{
time(111);
if(keydown==0)
{
zuida=zuida-1;
}
}
if(keyup==0)
{
time(111);
if(keyup==0)
{
P0=0x00;
P20=0;
P21=0;
P22=0;
P0=mun_to_char[shiwei];
P20 = 1;
P21 = 0;
P22 = 0;
delayms(50);
P0=mun_to_char[baiwei];
P20 = 0;
P21 = 0;
P22 = 0;
sbit P21=P2^1; //数码管位选,锁存器控制信号
sbit P22=P2^2; //数码管位选,锁存器控制信号
uchar j,k;
uchar baiwei,shiwei,gewei,qianwei;
uchar code mun_to_char[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管显示编码(1-F)
#define ADC_FLAG 0x10 //ADC 清除位
#define ADC_START 0x08 //ADC 开始转换控制为
#define ADC_SPEEDLL 0x00 //420 clocks
#define ADC_SPEEDL 0x20 //280 clocks
c=e/2;
if(c<zuixiao)
{
for(i = 0; i < 250; i++)
{
BELL = 0;
delayms(3); //延时10毫秒
BELL = 1;
delayms(3); //延时10毫秒
}
}
if(c>zuida)
{
for(i = 0; i < 250; i++)
}
void delay(uchar s)
{
while(--s);
}
void time(long t)
{
int i;
while (t--)
{
i=830;
while (i--) ;
}
}
/*************************ADC初始化*******************/
{
unsigned char n[3];
n[0]=zuixiao%1000/100;
n[1]=zuixiao%100/10;
n[2]=zuixiao%10;
P0=table[n[0]];
P2=3;
delayms(11);
P0=table[n[1]];
P2=4;
delayms(11);
P0=table[n[2]];
P2=5;
delayms(11);
if(keyup==0)
{
time(111);
if(keyup==0)
{
zuixiao=zuixiao+1;
}
}
if(keydown==0)
{
time(111) ;
if(keydown==0)
{
zuixiao=zuixiao-1;
}
}
if(set==0)
{
time(611);
if(set==0)
{
break;
}
}
}
}
{
BELL = 0;
delayms(3); //延时10毫秒
BELL
= 1;
delayms(3); //延时10毫秒
}
}
qianwei=c/1000;
baiwei=c%1000/100; //转换结果百位提取
#define uint unsigned int
sbit keydown = P3^2;
sbit keyup = P3^3;
sbit set = P3^4;
sbit BELL=P3^6;
int zuida=70;
int zuixiao=12;
#define ADC_POWER 0x80 //ADC 使能控制位
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
_nop_(); //Must wait before inquiry
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
ADC_CONTR &= ~ADC_FLAG; //关闭 ADC
#define ADC_SPEEDH 0x40 //140 clocks
#define ADC_SPEEDHH 0x60 //70 clocks
sfr ADC_CONTR =0xBC; //ADC控制寄存器
sfr ADC_RES =0xBD; //ADC转换结果寄存器
delayms(2); //ADC 开和延时
}
/****************AD转换高八位获取函数*******************/
uchar get_AD_result(uchar ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
sfr ADC_LOW2 =0xBE; //ADC转换结果低八位结果寄存器
sfr P1ASF =0x9D; //P1口模拟控制寄存器
sbit ADRJ = 0xA5; //ADC结果寄存器位数控制
sbit P20=P2^0; //数码管位选,锁存器控制信号
{
zuida=zuida+1;
}
}
if(set==0)
{
time(611);
if(set==0)
{
break;
}
}
}
}
/*****************************************************/
void asd()
{
while(1)
delayms(50);
P0=mun_to_char[gewei];
P20 = 0;
P21 = 1;
P22 = 0;
delayms(50);
}
}
void main()
{
P1=0xff;
InitADC();
while(1)
{
void qwe();
void asd();
void delays(void) //延时子程序
{
uchar m,n;
for(m=20;m>0;m--)
for(n=20;n>0;n--);
}
void delayms(int ms)
{
uchar t;
for(;ms>0;ms--)
for(t=0;t<120;t++);
#include<reg51.h>
#include<math.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
return ADC_RES; //返回 ADC 结果
}
/****************数据处理********************/
void datahandle()
{
int c,d,e,i;
d=get_AD_result(0);
e=260-d;
void InitADC()
{
ADRJ=0;
P1ASF = 0xff; //1111,1111,P1^0-p1^7 设置为 A/D 转换输入脚
ADC_RES = 0; //清除结果
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
void qwe()
{
while(1)
{
unsigned char n[3];
n[0]=zuida%1000/100;
n[1]=zuida%100/10;
n[2]=zuida%10;
P0=table[n[0]];
P2=5;
delayms(11);
P0=table[n[1]];
shiwei=c%100/10; //转换结果十位提取
gewei =c%10; //转换结果各位提取
}
/****************显示子程序******************/
void display()
{
uint y=24;
while(y--)