2022年自动灌溉系统的程序设计 .pdf

上传人:Q****o 文档编号:30535817 上传时间:2022-08-06 格式:PDF 页数:18 大小:97.75KB
返回 下载 相关 举报
2022年自动灌溉系统的程序设计 .pdf_第1页
第1页 / 共18页
2022年自动灌溉系统的程序设计 .pdf_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《2022年自动灌溉系统的程序设计 .pdf》由会员分享,可在线阅读,更多相关《2022年自动灌溉系统的程序设计 .pdf(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、自动灌溉系统的程序设计#include<reg52.h> #include <stdio.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit lcden=P15; sbit lcdrs=P14; sbit wr=P16; sbit rst=P26; sbit io=P25; sbit sclk=P24; sbit ACC0=ACC0; sbit ACC7=ACC7; sbit DQ=P11; sbit K1=P23; sbit K2=P22; s

2、bit K3=P21; sbit K4=P20; sbit B2=P12; sbit B3=P13; sbit A7=P27; #define XTAL 11059200 / CUP 晶振频率#define baudrate 9600 / 通信波特率uchar shi,fen,miao,nian,tian,yue,temp,time=10; uchar ah,al,flag=0,qq; void delay_18B20(unsigned int i) while(i-); /* 延时函数,延时1 毫秒*/ void delay(uint z) uint x,y; for(x=z;x>0;

3、x-) for(y=110;y>0;y-); /* 串口送一个数据*/ void send(uchar key_num) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - ES=0; / 关闭串口中断TI=0; / 置标志位为0 SBUF=key_num;/送数据while(!TI); / 等待标志位为1 TI=0; / 置标志位为0 ES=1;/打开串口中断 /*ds18b20初始化函数 */ void Init_DS1

4、8B20(void) unsigned char x=0; DQ = 1; /DQ 复位delay_18B20(8); / 稍做延时DQ = 0; / 单片机将 DQ拉低delay_18B20(40); / 精确延时大于 480us DQ = 1; / 拉高总线delay_18B20(7); x=DQ; / 稍做延时后如果 x=0 则初始化成功x=1 则初始化失败delay_18B20(10); /*ds18b20读一个字节 */ uchar ReadOneChar(void) uchar i=0; uchar dat = 0; for (i=8;i>0;i-) DQ = 0; / 给脉

5、冲信号dat>>=1; DQ = 1; / 给脉冲信号if(DQ) dat|=0 x80; delay_18B20(4); return(dat); /*ds18b20写一个字节 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - void WriteOneChar(uchar dat) uchar i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0 x01; de

6、lay_18B20(5); DQ = 1; dat>>=1; /*1302 写一位数据 */ void write_bite(uchar date) uchar i; ACC=date; for(i=8;i>0;i-) io=ACC0;/赋值给 ACC0 sclk=1;/ 拉高信号sclk=0;/ 拉低信号ACC=ACC>>1;/ACC右移一位 /*1302 读一位数据 */ read_bite(void) uchar i; for(i=8;i>0;i-) ACC=ACC>>1;/ACC右移一位ACC7=io;/将值给数据口sclk=1;/ 拉高

7、信号sclk=0;/ 拉低信号 return(ACC); /*1302 写一字节 */ void write_date(uchar add,uchar date) rst=0;/ 置输入信号为低名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - sclk=0;/ 拉低信号rst=1;/ 置输入信号为高write_bite(add);/ 写地址write_bite(date);/ 写数据sclk=1;/ 拉高信号rst=0;/ 置输

8、入信号为低 /*1302 读一字节 */ read_date(uchar add) uchar date1; rst=0;/ 置输入信号为低sclk=0;/ 拉低信号rst=1;/ 置输入信号为高write_bite(add|0 x01);/写地址date1=read_bite();/ 读数据sclk=1;/ 拉高信号rst=0;/ 置输入信号为低return(date1); /*1302 初始化 */ void init1302() write_date(0 x8e,0 x00); / 写入允许write_d ate(0 x8c,0 x10); / 年以下写入初始化时间日期 :10/07/2

9、3. 星期: 5. 时间 : 23:58:55 write_date(0 x88,0 x11);/ 月write_date(0 x86,0 x29);/ 天write_date(0 x8a,0 x01);/ 星期write_date(0 x84,0 x16);/ 小时write_date(0 x82,0 x11);/ 分write_date(0 x80,0 x55);/ 秒write_date(0 x8e,0 x80); / 禁止写入 /*1602 写指令 */ void write_com(uchar com) lcdrs=0; 名师资料总结 - - -精品资料欢迎下载 - - - - -

10、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - P0=com; delay(5); lcden=1; delay(5); lcden=0; /*1602 写数据 */ void write_data(uchar date) lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; /*1602 初始化 */ void init() lcden=0; wr=0; write_com(0 x38);/ 显示模式设置write_com(0

11、x0e);/ 光标显示write_com(0 x06);/ 显示光标移动设置write_com(0 x01);/ 显示清屏write_com(0 x80+0 x10);/ 写地址 void show() temp=read_date(0 x80);/ 读秒的时间miao=(temp&0 x70)>>4)*10+(temp&0 x0f);/格式转化10 进制转 16 进制temp=read_date(0 x82);/ 读分fen=(temp&0 x70)>>4)*10+(temp&0 x0f); temp=read_date(0 x84);

12、/ 读小时shi=(temp&0 x70)>>4)*10+(temp&0 x0f); temp=read_date(0 x86);/ 读天数tian=(temp&0 x70)>>4)*10+(temp&0 x0f); temp=read_date(0 x88);/ 读月数yue=(temp&0 x70)>>4)*10+(temp&0 x0f); temp=read_date(0 x8c);/ 读年nian=(temp&0 x70)>>4)*10+(temp&0 x0f); 名师资料总

13、结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - write_com(0 x80); write_data('2'); write_data('0'); write_data(nian/10+0 x30); write_data(nian%10+0 x30); write_data('/'); write_data(yue/10+0 x30); write_data(yue%10+0 x30

14、); write_data('/'); write_data(tian/10+0 x30); write_data(tian%10+0 x30); write_com(0 x80+0 x40); write_data(shi/10+0 x30); write_data(shi%10+0 x30); write_data(':'); write_data(fen/10+0 x30); write_data(fen%10+0 x30); write_data(':'); write_data(miao/10+0 x30); write_data(mi

15、ao%10+0 x30); /* 显示温度函数 */ void temper() uchar ge,shi,bai,a,b; uint temp; /16 位float tt; a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); / 读取温度值高位 / 读温度值的高字节temp=b; temp<<=8; /two byte compose a int variable temp=temp|a; tt=temp*0.0625; qq=tt; temp=tt*10+0.5; bai=temp/100; shi=temp%100/10; ge=temp%1

16、0; write_com(0 x8b+0 x40); write_data(bai+0 x30); write_data(shi+0 x30); write_data('.'); write_data(ge+0 x30); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - /* 修改时间子函数*/ shu(uchar s,uchar d,uchar add,uchar l) s=s+d; if(d=1) if(s

17、%10=l) if(l=0) s=s-10; else s=s-l; write_com(add); write_data(s%10+0 x30); write_com(add); write_com(0 x0f); else if(s%100/10=l) if(l=0) s=s-100; else s=s-l*10; write_com(add); write_data(s/10+0 x30); write_com(add); write_com(0 x0f); return s; void key1() uchar num=0; if(K1=0) delay(5); if(K1=0) wh

18、ile(!K1); write_com(0 x01); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - write_com(0 x83); write_data('2'); write_data('0'); write_data(nian/10+0 x 30); write_data(nian%10+0 x30); write_data('/'); write_data(yue/

19、10+0 x30); write_data(yue%10+0 x30); write_data('/'); write_data(tian/10+0 x30); write_data(tian%10+0 x30); write_com(0 x83+0 x40); write_data(shi/10+0 x30); write_data(shi%10+0 x30); write_data(':'); write_data(fen/10+0 x30); write_data(fen%10+0 x30); write_data(':'); write_

20、data(miao/10+0 x30); write_data(miao%10+0 x30); write_com(0 x8a+0 x40); write_com(0 x0f); while(1) if(K2=0) delay(5); if(K2=0) while(!K2); switch(num) case 0:write_com(0 x89+0 x40);write_com(0 x0f);break; case 1:write_com(0 x87+0 x40);write_com(0 x0f);break; case 2:write_com(0 x86+0 x40);write_com(0

21、 x0f);break; case 3:write_com(0 x84+0 x40);write_com(0 x0f);break; case 4:write_com(0 x83+0 x40);write_com(0 x0f);break; case 5:write_com(0 x8c);write_com(0 x0f);break; case 6:write_com(0 x8b);write_com(0 x0f);break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页

22、,共 18 页 - - - - - - - - - case 7:write_com(0 x89);write_com(0 x0f);break; case 8:write_com(0 x88);write_com(0 x0f);break; case 9:write_com(0 x86);write_com(0 x0f);break; case 10:write_com(0 x85);write_com(0 x0f);break; case 11:write_com(0 x8a+0 x40);write_com(0 x0f);break; num+; if(num=12)num=0; if(

23、K3=0) delay(5); if(K3=0) while(!K3); switch(num) case 0:miao=shu(miao,1,0 x8a+0 x40,0);break; case 1:miao=shu(miao,10,0 x89+0 x40,6);break; case 2:fen=shu(fen,1,0 x87+0 x40,0);break; case 3:fen=shu(fen,10,0 x86+0 x40,6);break; case 4:shi=shu(shi,1,0 x84+0 x40,0);break; case 5:shi=shu(shi,10,0 x83+0

24、x40,3);break; case 6:tian=shu(tian,1,0 x8c,0);break; case 7:tian=shu(tian,10,0 x8b,4);break; case 8:yue=shu(yue,1,0 x89,0);break; case 9:yue=shu(yue,10,0 x88,2);break; case 10:nian=shu(nian,1,0 x86,0);break; case 11:nian=shu(nian,10,0 x85,0);break; if(K4=0) delay(5); if(K4=0) while(!K4); write_date(

25、0 x8e,0 x00); / 写入允许write_date(0 x86,tian/10*16+tian%10); /写入新的时间write_date(0 x88,yue/10*16+yue%10); /写入新的时间write_date(0 x8c,nian/10*16+nian%10); /写入新的时间write_date(0 x80,miao/10*16+miao%10); /写入新的时间名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - - - - -

26、 - - - write_date(0 x82,fen/10*16+fen%10); /写入新的时间write_date(0 x84,shi/10*16+shi%10); / 写入新的时间write_date(0 x8e,0 x80);/ 禁止写入write_com(0 x01);/ 显示清屏write_com(0 x0c);/ 不显示光标break; /* 浇水倒计时 */ void jiaoshuit() uchar num=time,a; write_com(0 x01); write_com(0 x84+0 x40); write_data('t'); write_da

27、ta('i'); write_data('m'); write_data('e'); write_data(':'); B2=0;/ 蜂鸣器响write_com(0 x89+0 x40); write_data(num/10+0 x30); write_data(num%10+0 x3 0); for(a=num;a>0;a-) num-; delay(1000); write_com(0 x89+0 x40); write_data(num/10+0 x30); write_data(num%10+0 x30); writ

28、e_com(0 x0c); if(A7=1) break; write_date(0 x8e,0 x00); / 写入允许temp=read_date(0 x80); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - - - - - - - - temp&=0 x7f; write_date(0 x80,temp); write_date(0 x8e,0 x80); / 禁止写入 write_com(0 x01); write_date(0 x8

29、e,0 x00); / 写入允许temp=read_date(0 x80); temp&=0 x7f; write_date(0 x80,temp); write_date(0 x8e,0 x80); / 禁止写入B2=1;/ 蜂鸣器不响 /* 设置倒计时时间*/ void key2() uchar num; if(K2=0) delay(5); if(K2=0) while(!K2); write_com(0 x01); write_com(0 x82+0 x40); write_data('j'); write_data('s'); write_da

30、ta('t'); write_data('i'); write_data('m'); write_data('e'); write_data(':'); write_data(time/10+0 x30); write_data(time%10+0 x30); write_com(0 x8a+0 x40); write_com(0 x0f); while(1) if(K2=0) delay(5); if(K2=0) while(!K2); switch(num) 名师资料总结 - - -精品资料欢迎下载 - - -

31、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 18 页 - - - - - - - - - case 0:write_com(0 x89+0 x40);write_com(0 x0f);break; case 1:write_com(0 x8a+0 x40);write_com(0 x0f);break; num+; if(num=2)num=0; if(K3=0) delay(5); if(K3=0) while(!K3); switch(num) case 0:time=shu(time,1,0 x8a+0 x40

32、,0);break; case 1:time=shu(time,10,0 x89+0 x40,0);break; if(K4=0) delay(5); if(K4=0) while(!K4); write_com(0 x01);/ 显示清屏write_com(0 x0c);/ 光标不显示break; /* 设定温度上下限*/ void key3() uchar num=0; if(K3=0) delay(5); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页

33、- - - - - - - - - if(K3=0) while(!K3); write_com(0 x01);/ 显示清屏write_com(0 x80+0 x40); write_data('Y'); write_com(0 x8f+0 x40); write_data('N'); write_com(0 x83); write_data('t'); write_data('e'); write_data('m'); write_data('p'); write_data(' '

34、); write_data('H'); write_data(':'); write_data(ah/10+0 x30); write_data(ah%10+0 x30); write_com(0 x83+0 x40); write_data('t'); write_data('e'); write_data('m'); write_data('p'); write_data(' '); write_data('L'); write_data(':')

35、; write_data(al/10+0 x30); write_data(al%10+0 x30); write_com(0 x8b+0 x40); write_com(0 x0f);/ 设置光标闪烁while(1) if(K2=0) delay(5); if(K2=0) while(!K2); switch(num) case 0:write_com(0 x8a+0 x40);write_com(0 x0f);break; case 1:write_com(0 x8b);write_com(0 x0f);break; case 2:write_com(0 x8a);write_com(0

36、x0f);break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 18 页 - - - - - - - - - case 3:write_com(0 x8b+0 x40);write_com(0 x0f);break; num+; if(num=4)num=0; if(K3=0) delay(5); if(K3=0) while(!K3); switch(num) case 0:al=shu(al,1,0 x8b+0 x40,0);break; case 1:al

37、=shu(al,10,0 x8a+0 x40,0);break; case 2 :ah=shu(ah,1,0 x8b,0);break; case 3:ah=shu(ah,10,0 x8a,0);break; if(K1=0) delay(5); if(K1=0) while(!K1); write_com(0 x01); write_com(0 x0c); flag=1; break; / 确认退出if(K4=0) delay(5); if(K4=0) while(!K4); write_com(0 x01); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -

38、 - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 18 页 - - - - - - - - - write_com(0 x0c); flag=0; break; / 放弃退出 void key4() if(K4=0) delay(5); if(K4=0) while(!K4); send(0 x32); send(0 x30); send(nian/10+0 x30); send(nian%10+0 x30); send('/'); send(yue/10+0 x30); send(yue%10+0 x30); send('/

39、'); send(tian/10+0 x30); send(tian%10+0 x30); send('|');send('|'); send(shi/10+0 x30); send(shi%10+0 x30); send(':'); send(fen/10+0 x30); send(fen%10+0 x30); send(':'); send(miao/10+0 x30); send(miao%10+0 x30); send(' ');send(' '); send(' '

40、);send(' '); void jiaoshui() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 18 页 - - - - - - - - - if(flag=1) / 模式选择在温度范围内 if(A7=0&&qq>(al-1)&&qq<ah) send(0 x32); send(0 x30); send(nian/10+0 x30); send(nian%10+0 x30); send('/&

41、#39;); send(yue/10+0 x30); send(yue%10+0 x30); send('/'); send(tian/10+0 x30); send(tian%10+0 x30); send('|');send('|'); send(shi/10+0 x30); send(shi%10+0 x30); send(':'); send(fen/10+0 x30); send(fen%10+0 x30); send(':'); send(miao/10+0 x30); send(miao%10+0 x

42、30); send(' ');send(' '); send(' ');send(' '); B3=0;/ 蜂鸣器响jiaoshuit();/ 浇水B3=1;/ 蜂鸣器停 if(flag=0) / 模式 2 不考虑温度 if(A7=0) send(0 x32); send(0 x30); send(nian/10+0 x30); send(nian%10+0 x30); send('/'); send(yue/10+0 x30); send(yue%10+0 x30); send('/'); 名师资

43、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 18 页 - - - - - - - - - send(tian/10+0 x30); send(tian%10+0 x30); send('|');send('|'); send(shi/10+0 x30); send(shi%10+0 x30); send(':'); send(fen/10+0 x30); send(fen%10+0 x30); send(':'

44、;); send(miao/10+0 x30); send(miao%10+0 x30); send(' ');send(' '); send(' ');send(' '); B3=0;/ 蜂鸣器响jiaoshuit();/ 浇水B3=1;/ 蜂鸣器停 void main() init();/1602初始化A7=1; / init1302();/DS1302 初始化Init_DS18B20();/DS1302 初始化TMOD = 0 x20; / 定时器 1工作于 8 位自动重载模式, 用于产生波特率TH1=(unsigned c

45、har)(256 - (XTAL / (32L * 12L * baudrate); TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate); / 定时器 1赋初值TR1=1;/打开定时器 1 SCON = 0 x50; PCON = 0 x00; EA=1;/打开总中断ET1=0;/打开定时器中断ES=1;/打开串口中断while(1) show();/ 显示时间Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作WriteOneChar(0 x44); / 启动温度转换delay_18B

46、20(100); / this message is wery important 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - Init_DS18B20(); WriteOneChar(0 xCC); / 跳过读序号列号的操作WriteOneChar(0 xBE); / 读取温度寄存器等(共可读9 个寄存器)前两个就是温度delay_18B20(50); temper();/ 显示温度jiaoshui();/ 判断是否需要浇水key1(); key2(); key3(); key4(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com