基于52单片机的自动浇灌系统_毕业设计论文(编辑修改稿)内容摘要:

_m=0。 counter=m*60+s。 if(counter=water_time) //常温浇灌时间 { TR0=1。 TR1=0。 s1=0。 m1=0。 h=0。 time_s=s。 time_m=m。 LCD_DispHZStr(2,3,on)。 if(flag==1) { t=t+1。 flag=0。 } led=0。 SOUND=~SOUND。 } else { TR0=0。 LCD_DispHZStr(2,3,off)。 TR1=1。 if(s13) //常温浇灌时间间隔 { s=0。 m=0。 h=0。 flag=1。 } time_s=0。 time_m=0。 led=1。 } } if(temp0) //如果温度小于 0 { zf=1。 //正负标志置 1 temp=temp。 //求出温度的绝对值 } str[4]=dp[tempamp。 0x0f]+0x30。 //求出一位小数的 ASCII 码 temp=temp4。 //舍去小数部分 str[0]=temp/100+0x30。 //求出百位的 ASCII 码 temp=temp%100。 str[1]=temp/10+0x30。 //求出十位的 ASCII 码 str[2]=temp%10+0x30。 //求出个位的 ASCII 码 str[3]=39。 .39。 dbuf[0]=(time_s%100)/10+0x30。 dbuf[1]=time_s%10+0x30。 dbuf1[0]=(time_m%100)/10+0x30。 dbuf1[1]=time_m%10+0x30。 dbuf2[0]=(t%100)/10+0x30。 dbuf2[1]=t%10+0x30。 if(zf==1) //如果是负数 { if(str[1]==39。 039。 ) //如果十位为 0 { str[0]=39。 39。 //显示格式为 39。 39。 str[1]=39。 39。 } else //如果十位不为 0 str[0]=39。 39。 //显示格式为 39。 39。 } else //如果是正数 { if(str[0]==39。 039。 ) //如果百位、十位都是 0 { if(str[1]==39。 039。 ) //显示格式为 39。 39。 str[1]=39。 39。 // 如果只有百位为 0 str[0]=39。 39。 //显示格式为 39。 39。 } } LCD_DispStr(3,7,str)。 //将字符串在屏幕指定位置显示出来 LCD_DispStr(5,8,dbuf1)。 //显示分 LCD_DispStr(5,12,dbuf)。 //显示秒 LCD_DispStr(7,11,dbuf2)。 } } DS18B20 模块 : define uchar unsigned char define uint unsigned int include include sbit DQ=P1^0。 bdata uchar dat。 sbit dat0=dat^0。 sbit dat7=dat^7。 void delay15(uchar n) //约 15us 延时 { do { _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 _nop_()。 n。 }while(n)。 } bit reset(void) { bit err。 DQ=0。 delay15(40)。 DQ=1。 delay15(6)。 err=DQ。 delay15(18)。 return(err)。 } void wrbyte(uchar d)//向总线写入一个字节 { uchar i。 dat=d。 for(i=8。 i0。 i) { DQ=0。 delay15(1)。 DQ=dat0。 dat=dat1。 delay15(1)。 DQ=1。 } } uchar rdbyte(void) //从总线上读取一个字节 { uchar i。 dat=0。 for(i=8。 i0。 i) { dat=dat1。 DQ=0。 _nop_()。 DQ=1。 delay15(1)。 dat7=DQ。 delay15(4)。 //新增在位与位之间加入 50US 的延时 } return(dat)。 } void convert(void) { bit err。 err=reset()。 //复位 DS18B20 wrbyte(0xcc)。 //发 READ ROM 命 令 wrbyte(0x44)。 //发 READ ROM 命令 } int readt(void) { uchar h,l。 //复位 DS18B20 reset()。 //复位 DS18B20 wrbyte(0xcc)。 //发 READ ROM 命令 wrbyte(0xbe)。 //发 READ ROM 命令 l=rdbyte()。 //读取温度低字节、高字节 h=rdbyte()。 return(h*256+l)。 //保存 16 位温度值 } LCD 液晶显示模块 : include include include define uchar unsigned char define uint unsigned int sbit LCD_RST=P3^7。 sbit DI=P3^4。 sbit RW=P3^5。 sbit CS=P3^3。 sbit EN=P3^6。 sbit RDY=P0^7。 sfr LCD=0x80。 define LCD_DISPON 0x3f // 打开 LCM 显示命令 define LCD_STARTROW 0xc0 // 设置起始行命令 , 用 LCD_STARTROW+x 设置起始行 (x64) define LCD_ADDRSTRY 0xb8 // 设置页地址命令,用 LCD_ADDRSTRX+x 设置当前页 (x8) define LCD_ADDRSTRX 0x40 // 设置列地址命令,用 LCD_ADDRSTRY+x 设置当前列 (x64) define CS1 0 //左半屏选择 define CS2 1 //右半屏选择 //命令字 cmd 送左半屏( port=0) /右半屏( port=1)命令 void LCD_WrCmd(bit port, uchar cmd) { EN=0。 CS=port。 DI=0。 RW=0。 EN=1。 LCD=cmd。 EN=0。 } //数据 wrdata 送左半屏 ( port=0) /右半屏 ( port=1) 数据口 void LCD_WrDat(bit port, uchar wrdata) { EN=0。 CS=port。 DI=1。 RW=0。 EN=1。 LCD=wrdata。 EN=0。 } uchar code ASCII_TAB[480] = //0X20~0X7F 之间 ASCII 码对应的点阵数据表 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x28, 0xfe, 0x28, 0xfe, 0x28, 0x48, 0x54, 0xfe, 0x54, 0x24, 0x46, 0x26, 0x10, 0xc8, 0xc4, 0x6c, 0x92, 0xaa, 0x44, 0xa0, 0x00, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x00, 0x00, 0x82, 0x44, 0x38, 0x00, 0x28, 0x10, 0x7c, 0x10, 0x28, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0xa0, 0x60, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x7C, 0xA2, 0x92, 0x8A, 0x7C, 0x00, 0x84, 0xFE, 0x80, 0x00, 0x84, 0xC2, 0xA2, 0x92, 0x8C, 0x42, 0x82, 0x8A, 0x96, 0x62, 0x30, 0x28, 0x24, 0xFE, 0x20, 0x4E, 0x8A, 0x8A, 0x8A, 0x72, 0x78, 0x94, 0x92, 0x92, 0x60, 0x02, 0xE2, 0x12, 0x0A, 0x06, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x0C, 0x92, 0x92, 0x52, 0x3C, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x10, 0x28, 0x44, 0x82, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x82, 0x44, 0x28, 0x10, 0x04, 0x02, 0xA2, 0x12, 0x0C, 0x64, 0x92, 0xF2, 0x82, 0x7C, 0xFC, 0x22, 0x22, 0x22, 0xFC, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x7C, 0x82, 0x82, 0x82, 0x44, 0xFE, 0x82, 0x82, 0x44, 0x38, 0xFE, 0x92, 0x92, 0x92, 0x82, 0xFE, 0x12, 0x12, 0x12, 0x02, 0x7C, 0x82, 0x92, 0x92, 0xF4,。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。