自动灌溉系统的程序设计.doc_第1页
自动灌溉系统的程序设计.doc_第2页
自动灌溉系统的程序设计.doc_第3页
自动灌溉系统的程序设计.doc_第4页
自动灌溉系统的程序设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

自动灌溉系统的程序设计#include#include #include #define uchar unsigned char#define uint unsigned intsbit 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;sbit 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;x0;x-)for(y=110;y0;y-);/*串口送一个数据*/void send(uchar key_num)ES=0;/关闭串口中断TI=0;/置标志位为0SBUF=key_num;/送数据while(!TI);/等待标志位为1TI=0;/置标志位为0ES=1;/打开串口中断/*ds18b20初始化函数*/void Init_DS18B20(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;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(uchar dat) uchar i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat=1; /*1302写一位数据*/void write_bite(uchar date)uchar i;ACC=date;for(i=8;i0;i-)io=ACC0;/赋值给ACC0sclk=1;/拉高信号sclk=0;/拉低信号ACC=ACC1;/ACC右移一位/*1302读一位数据*/read_bite(void)uchar i;for(i=8;i0;i-)ACC=ACC1;/ACC右移一位ACC7=io;/将值给数据口sclk=1;/拉高信号sclk=0;/拉低信号return(ACC);/*1302写一字节*/void write_date(uchar add,uchar date)rst=0;/置输入信号为低sclk=0;/拉低信号rst=1;/置输入信号为高write_bite(add);/写地址write_bite(date);/写数据sclk=1;/拉高信号rst=0;/置输入信号为低/*1302读一字节*/read_date(uchar add)uchar date1;rst=0;/置输入信号为低sclk=0;/拉低信号rst=1;/置输入信号为高write_bite(add|0x01);/写地址date1=read_bite();/读数据sclk=1;/拉高信号rst=0;/置输入信号为低return(date1);/*1302初始化*/void init1302() write_date(0x8e,0x00); /写入允许write_date(0x8c,0x10); /年以下写入初始化时间 日期:10/07/23.星期: 5. 时间: 23:58:55write_date(0x88,0x11);/月write_date(0x86,0x29);/天write_date(0x8a,0x01);/星期write_date(0x84,0x16);/小时write_date(0x82,0x11);/分write_date(0x80,0x55);/秒write_date(0x8e,0x80); /禁止写入 /*1602写指令*/void write_com(uchar com)lcdrs=0;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(0x38);/显示模式设置write_com(0x0e);/光标显示write_com(0x06);/显示光标移动设置write_com(0x01);/显示清屏write_com(0x80+0x10);/写地址void show()temp=read_date(0x80);/读秒的时间miao=(temp&0x70)4)*10+(temp&0x0f);/格式转化 10进制转16进制temp=read_date(0x82);/读分fen=(temp&0x70)4)*10+(temp&0x0f);temp=read_date(0x84);/读小时shi=(temp&0x70)4)*10+(temp&0x0f);temp=read_date(0x86);/读天数tian=(temp&0x70)4)*10+(temp&0x0f);temp=read_date(0x88);/读月数yue=(temp&0x70)4)*10+(temp&0x0f);temp=read_date(0x8c);/读年nian=(temp&0x70)4)*10+(temp&0x0f); write_com(0x80); write_data(2); write_data(0); write_data(nian/10+0x30); write_data(nian%10+0x30); write_data(/); write_data(yue/10+0x30); write_data(yue%10+0x30); write_data(/); write_data(tian/10+0x30); write_data(tian%10+0x30); write_com(0x80+0x40); write_data(shi/10+0x30); write_data(shi%10+0x30); write_data(:); write_data(fen/10+0x30); write_data(fen%10+0x30); write_data(:); write_data(miao/10+0x30); write_data(miao%10+0x30);/*显示温度函数*/void temper()uchar ge,shi,bai,a,b; uint temp; /16位 float tt;a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); /读取温度值高位/读温度值的高字节 temp=b;temp0;a-)num-;delay(1000);write_com(0x89+0x40);write_data(num/10+0x30);write_data(num%10+0x30);write_com(0x0c);if(A7=1)break;write_date(0x8e,0x00); /写入允许temp=read_date(0x80);temp&=0x7f; write_date(0x80,temp);write_date(0x8e,0x80); /禁止写入write_com(0x01);write_date(0x8e,0x00); /写入允许temp=read_date(0x80);temp&=0x7f; write_date(0x80,temp);write_date(0x8e,0x80); /禁止写入B2=1;/蜂鸣器不响/*设置倒计时时间*/void key2()uchar num;if(K2=0)delay(5);if(K2=0) while(!K2); write_com(0x01); write_com(0x82+0x40); write_data(j); write_data(s); write_data(t); write_data(i); write_data(m); write_data(e); write_data(:); write_data(time/10+0x30); write_data(time%10+0x30); write_com(0x8a+0x40); write_com(0x0f); while(1) if(K2=0)delay(5);if(K2=0)while(!K2);switch(num)case 0:write_com(0x89+0x40);write_com(0x0f);break;case 1:write_com(0x8a+0x40);write_com(0x0f);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,0x8a+0x40,0);break;case 1:time=shu(time,10,0x89+0x40,0);break;if(K4=0)delay(5);if(K4=0)while(!K4);write_com(0x01);/显示清屏write_com(0x0c);/光标不显示break; /*设定温度上下限*/void key3()uchar num=0;if(K3=0)delay(5);if(K3=0)while(!K3); write_com(0x01);/显示清屏 write_com(0x80+0x40); write_data(Y); write_com(0x8f+0x40); write_data(N); write_com(0x83); write_data(t); write_data(e); write_data(m); write_data(p); write_data( ); write_data(H); write_data(:); write_data(ah/10+0x30); write_data(ah%10+0x30); write_com(0x83+0x40); write_data(t); write_data(e); write_data(m); write_data(p); write_data( ); write_data(L); write_data(:); write_data(al/10+0x30); write_data(al%10+0x30); write_com(0x8b+0x40); write_com(0x0f);/设置光标闪烁 while(1)if(K2=0)delay(5);if(K2=0)while(!K2);switch(num)case 0:write_com(0x8a+0x40);write_com(0x0f);break;case 1:write_com(0x8b);write_com(0x0f);break;case 2:write_com(0x8a);write_com(0x0f);break;case 3:write_com(0x8b+0x40);write_com(0x0f);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,0x8b+0x40,0);break;case 1:al=shu(al,10,0x8a+0x40,0);break;case 2:ah=shu(ah,1,0x8b,0);break;case 3:ah=shu(ah,10,0x8a,0);break;if(K1=0)delay(5);if(K1=0)while(!K1);write_com(0x01);write_com(0x0c);flag=1;break;/确认退出if(K4=0)delay(5);if(K4=0)while(!K4);write_com(0x01);write_com(0x0c);flag=0;break;/放弃退出 void key4()if(K4=0)delay(5);if(K4=0)while(!K4);send(0x32);send(0x30);send(nian/10+0x30); send(nian%10+0x30);send(/);send(yue/10+0x30);send(yue%10+0x30);send(/);send(tian/10+0x30);send(tian%10+0x30);send(|);send(|);send(shi/10+0x30);send(shi%10+0x30);send(:);send(fen/10+0x30);send(fen%10+0x30);send(:);send(miao/10+0x30);send(miao%10+0x30);send( );send( );send( );send( );void jiaoshui()if(flag=1)/模式选择在温度范围内if(A7=0&qq(al-1)&qqah)send(0x32);send(0x30);send(nian/10+0x30); send(nian%10+0x30);send(/);send(yue/10+0x30);send(yue%10+0x30);send(/);send(tian/10+0x30);send(tian%10+0x30);send(|);send(|);send(shi/10+0x30);send(shi%10+0x30);send(:);send(fen/10+0x30);send(fen%10+0x30);send(:);send(miao/10+0x30);send(miao%10+0x30);send( );send( );send( );send( );B3=0;/蜂鸣器响jiaoshuit();/浇水B3=1;/蜂鸣器停if(flag=0)/模式2 不考虑温度if(A7=0)send(0x32);send(0x30);send(nian/10+0x30); send(nian%10+0x30);send(/);send(yue/10+0x30);send(yue%10+0x30);send(/);send(tian/10+0x30);send(tian%10+0x30);send(|);send(|);send(shi/10+0x30);send(shi%10+0x30);send(:);send(fen/10+0x30);send(fen%10+0x30);send(:);s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论