基于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,。基于52单片机的自动浇灌系统_毕业设计论文(编辑修改稿)
相关推荐
WR:写入信号,当这个输入引脚为低跳变沿时 ,即 /WR 产生一个低脉冲且 /CS=0时 ,允许 CPU 将数据或 控制字写入 8255。 D0~ D7:三态双向数据总线, 8255与 CPU 数据传送 的通道,当 CPU 执行输入输出指令时,通过它实现 8位数据的读 /写操作,控制字和状态信息也通过数据总线传送。 8255具有 3个相互独立的输入 /输出通道端口,用 +5V 单电源供电
隧道、大型船舶、高层建筑都应该安装。 它还可以与自动灭火设备一起组成自动报警、自动灭火的“自动消防队”。 15 第 3 章 火灾报警系统硬件设计 系统核心芯片选择 传感器介绍 AD590 温度传感器 要准确地进行火灾报警 , 选择合适的温度和烟雾传感器是准确报警的前提。 综合考虑各因素 , 本文选择集成温度传感器 AD590 和气体传感器 TGS202 用作采集系统的敏感元件。 AD590
} irpro_ok=1。 //处理完毕标志位置 1 } 第 14 页 共 32 页 (6)器件采购 元件名称 数量 元件名称 数量 STC89C52RC芯片 一个 12MHZ晶振 一个 LCD显示屏 一个 二极管 一个 三极管 两个 按键 十七个 LED 一个 103滑动变阻器 一个 蜂鸣器 一个 SRA06VDC继电器 一个 AT24C02芯片 一个 红外遥控器 一个 红外接收头 一个 导线
30pF 陶瓷电容帮助起振。 矩阵键盘电路 键盘的工作原理:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端,矩阵键盘连接方式如图 3 所示,行线通过上拉电阻接到 +5V 电源上。 无按键按RESETXTAL2XTAL1VSSVCCEAALEPSENSTC89C52STC11 21X
26TX27SCLK28SI29SO30CVDD331TEST32GPIO0/SPIBOOT33GPIO134NC35NC36AGND037AVDD038RIGHT39AGND140AGND241GBUF42AVDD143RCAP44AVDD245LEFT46AGND347LINEIN48U1VS1003BMICPMICNXRESETC18C7C5C20C6C19R3
第一章 绪 论 水路航运系统是运输系统中很重要的一部分,而航道的正确标识是船舶航运2 基于 51 单片机航标灯控制器的设计与实现 安全的重要保障。 在我们长达数千公里的河道和海岸沿线,每隔一定距离就必须有一个航标等,用来指示航道的安全水位区域。 航标灯在夜间用所显示的特定光色,灯光节奏和周期作为标志的识别特性,以便航海人员容易区别。 此次设计由 STC89C52 为核心,结合定时