




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于PLC与单片机的智能牧场实时监测系统设计与实现摘要畜牧业的生产力取决于品种、饲料、环境以及是否有合理有效的管理方案,不适宜的环境条件,比如:光照、水分、温度、空气质量、卫生情况等不合适都会使畜牧生产力下降,牧场的实时监控和检测可以有效地应对场内的突发情况,合理高效的管理方弌、智能的处理系统对保证牧场高产、高效运转具有积极意义。本创意作品能够针对智能农场的实际情况,综合运用智能传感器模块、单片机STC89C52系统、PLC、NRF24L01P射频芯片、无线传输技术进行实时的适当调节,是能够对牧场的温湿度、食物重量、饮用水水位等参数进行实时监测、具有日常管理功能的智能牧场。关键词:单片机STC89C52系统;无线传输;NRF24L01P射频芯片;PLC目录TOC\o"1-3"\h\u1引言 智能牧场系统软件设计对于智能牧场系统的整体设计,编程以C语言和三菱PLC编程语言为主。C语言是面向过程的、抽象化的编程语言。它是一种以简易的方式\t"/item/c%E8%AF%AD%E8%A8%80/_blank"编译、处理低级\t"/item/c%E8%AF%AD%E8%A8%80/_blank"存储器,并在不需要任何运行环境下仅通过产生少量的\t"/item/c%E8%AF%AD%E8%A8%80/_blank"机器码便能运行的编程语言。同时,C语言具有语言简洁、数据类型丰富、可读性好、易于\t"/item/c%E8%AF%AD%E8%A8%80/_blank"调试、修改和移植的优点,不仅能够直接对硬件进行操作,还能用于开发系统软件和编写程序。三菱PLC编程语言一共有六种,分别是指令表编程、梯形图编辑、步进梯形图、结构文本语言、结构化梯形图和FBD功能模块表。其中,最常用的就是梯形图编辑,它是通过在图示的画面上使用顺序符号和软元件编号画顺控梯形图的编辑方式。由于触点符号和线圈符号是顺控回路的主要特点,所以程序的内容会让人更容易理解。4.1编程软件介绍4.1.1Keil软件Keil是51系列兼容单片机C语言软件开发系统,它提供了完整的开发方案。它通过一个集成开发环境,把C编译器、链接器、宏汇编、库管理以及一个功能强大的仿真调试器等组合在一起,这样可以极大地提高在生成目标代码上的效率,并且可以让其语句形成的汇编代码更有逻辑、更紧凑、更能让别人理解代码的功能意义。4.1.2GXWorks2软件GXWorks2是三菱公司推出的\t"/item/GX%20Works2/_blank"PLC编程软件,它是一款致力于PLC设计、调试、维护的编程工具。这款软件编程主要用于机械设备,一些指令的输入和设置将通过软件编程来完成,从而达到让机械具备执行逻辑运算、顺序控制、定时等功能。相对于传统的GXDeveloper软件,提高了功能及操作性能,变得更加容易使用。4.2软件设计本设计采用C语言和PLC编程程序进行编程。本设计的程序分为两部分。一部分是由单片机所控制的牧场的基本饲养、消毒等功能的实现,另一部分是由PLC控制的牧场防盗方面的实现。4.2.1自动喂粮程序设计首先,由称重传感器读取当前食物重量,基于原理需求,需要通过一个转换函数读取此刻的重量值,并通过线性方程转换获取此时的食物重量,计算食物重量程序如下所示:zxc=HX711_Read();zxc=(unsignedint)((float)zxc/GapValue); //计算实物的实际重量当前采集的食物的重量与没放食物前的重量的差值,若少于给定值则发出低电平,触发电磁阀加粮;若大于给定值,则不加粮,持续检测食物重量,其程序如下所示:voiddflt(u16te)//te为当前食物重量与没放食物前的重量的差值{ if(te>=0&&te<9999) { Tx_Buf1[0]=te/100; Tx_Buf1[1]=te%100; } else { Tx_Buf1[0]=99; Tx_Buf1[1]=99; } if(a1==0) { if(te<500) { pwm1=0; } else { pwm1=1; } }}4.2.2自动喂水程序设计饮用水的水位由水位传感器检测,检测得到的模拟信号传给XPT2046模块进行AD转换,转换成数字量后传给单片机,单片机把得到的数值与给定值比较。当饮用水低于某一规定值时,将发出低电平信号,驱动水泵抽水,直至水位达到规定水位则停止抽水。自动喂水程序如下所示:ad1=Read_AD_Data(0xE4); //读取水位传感器模拟量并转为数字量Tx_Buf1[2]=ad1/100;Tx_Buf1[3]=ad1%100;if(a2==0) { if(ad1<200) { pwm2=1; } else { pwm2=0; } } 4.2.3定时通风消毒程序设计本设计的通风消毒采用中断函数每间隔15s,输出一次低电平驱动外接元器件进行消毒通风一次,每次持续5s的时间,定时通风消毒程序如下:voidTimer0()interrupt1using0{ xianshi+=1; if(xianshi==mubiao) { pwm6=0; } if(xianshi==20000) { xianshi=0; pwm6=1; } TH0=(65536-1000)/256; TL0=(65536-1000)%256;}4.2.4蓝牙控制程序设计本设计使用的是HC-05蓝牙模块,在编程时,需要初始化串口,设置好串口的通信波特率,开启串口中断,编写串口中断函数。当手机蓝牙与本设计蓝牙配对成功后,蓝牙模块接收手机发送的信号,将信号通过串口发送给单片机,单片机接收到信号后,执行相应的操作。串口初始化的程序函数如下所示:voidUsartInit(){SCON=0X50; //设置为工作方式1TMOD&=0X0F;//清0T1的控控制位TMOD|=0X20; //设置计数器工作方式2PCON|=0X80; //波特率加倍TH1=0XF3; //计数器初始值设置TL1=0XF3; ET1=0;//禁止T1中断ES=1; //打开接收中断 EA=1; //打开总中断TR1=1; //打开计数器}串口通信中断函数的程序如下所示:voidUsart()interrupt4{if(RI){ receiveData=SBUF;//出去接收到的数据RI=0;//清除接收中断标志位SBUF=receiveData;//将接收到的数据放入到发送寄存器Tx_Buf1[8]=receiveData-'0'+0;}while(!TI); //等待发送数据完成TI=0; //清除发送完成标志位} 蓝牙控制元器件实现自动喂粮、自动喂水、通风、遮阳挡雨功能的程序如下所示: if(receiveData=='0') { a0=0;a1=0;a2=0;a3=0;a4=0; } if(receiveData=='a')//停止放粮 { AS='a'; a1=1;pwm1=1;a0=1; } elseif(receiveData=='b')//放粮 { AS='a'; a1=1;pwm1=0;a0=1; } if(receiveData=='c') { a2=1; AS='b';pwm2=1;a0=1; } elseif(receiveData=='d') { a2=1; AS='b';pwm2=0;a0=1; } if(receiveData=='e') { a3=1; AS='c';pwm3=1;a0=1; } elseif(receiveData=='f') { a3=1; AS='c';pwm3=0;a0=1; } if(receiveData=='g')//正转 { a4=1; AS='d';pwm4=1;a0=1; } elseif(receiveData=='h')//停止正转 { a4=1; AS='d';pwm4=0;a0=1; } if(receiveData=='i')//停止反转 { a4=1; AS='e';pwm5=0;a0=1; } elseif(receiveData=='j')//反转 { a4=1; AS='e';pwm5=1;a0=1; }4.2.5温湿度检测程序设计本设计采用DHT11温湿度传感器来自动检测牧场温湿度,并将温湿度的数据显示在屏幕上,温湿度传感器数据处理与显示的程序如下所示:voidDHT11_receive(){ucharR_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;DHT11_start();if(Data==0){while(Data==0);DHT11_delay_us(40);R_H=DHT11_rec_byte();R_L=DHT11_rec_byte();T_H=DHT11_rec_byte();T_L=DHT11_rec_byte();revise=DHT11_rec_byte();DHT11_delay_us(25);if((R_H+R_L+T_H+T_L)==revise){RH=R_H;RL=R_L;TH=T_H;TL=T_L;}rec_dat[0]=RH/10+'0';rec_dat[1]=(RH%10)+'0';rec_dat[2]='%';rec_dat[3]='R';rec_dat[4]='H';rec_dat[5]='';rec_dat[6]='';rec_dat[7]=(TH/10)+'0';rec_dat[8]=(TH%10)+'0';rec_dat[9]='^';rec_dat[10]='C';Tx_Buf1[4]=RH;Tx_Buf1[5]=TH; }}4.2.6无线传输模块程序设计GT-24无线传输模块程序根据官方的库文件以及数据手册进行编程设置。通过进行设置接收地址、装载数据、发送指令等一系列操作,从而达到无线传输数据。GT-24无线传输模块程序如下所示:voidNRF24L01TxPacket(u8*tx_buf){ CE=0; //StandByI模式 Spi24L01WriteBuf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//装载接收端地址 Spi24L01WriteBuf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); //装载数据 CE=1; //置高CE,激发数据发送}4.2.7密码输入程序当按下输入密码按键X12后,辅助继电器M26线圈和定时器T1线圈得电,定时器T1开始计时,M26常开接点闭合,由于定时器T1的时钟脉冲为100ms,而设定值K为1,即100ms后,定时器T1的常开接点闭合,开始调用执行指针标号为P0的子程序,此时开始输入第一个数字,按下数字按键X0~X11中的一个,即把对应的数字输入到寄存器D4中,并使辅助继电器M13线圈和定时器T2线圈得电,此时定时器T2的常闭触点立刻断开,T2的常开触点立即闭合,辅助继电器M13常开触点也闭合,从而导致定时器T2线圈将持续得电,在定时时间结束后,其常闭触点则一直在断开状态,而定时器T2的常开触点仍然闭合,导致定时器T1的线圈失电,其常开触点断开,此时跳出指针编号为P0的子程序,开始执行指针编号为P1的子程序。同样地,剩下的三个数字的输入与此类似。在执行指针编号为P1的子程序时,按下要输入的数字按键后数值就被存入寄存器D5,辅助继电器M14线圈和定时器T3线圈就会通电,此时定时器T3的常闭触点立即断开,跳出指针编号为P1的子程序,而定时器T3的常开触点立即闭合,开始执行指针编号为P2的子程序。再次按下需要的数字按键后数值被存入寄存器D6,并使辅助线圈M15线圈和定时器T4线圈得电,此时定时器T4的常闭触点立即断开,跳出指针编号为P2的子程序,常开接点立即闭合,开始执行指针编号为P3的子程序。按下需要的数字按键后数值被存入寄存器D7,至此,输入的数字将分别存放在寄存器D4~D7中,下一步将与正确的密码进行验证。这样的操作使得在输入下一个数字时,不会改变前面存入寄存器数字,使输入的数字得以保存来进行密码识别。密码输入程序如图4.1所示:图4.1密码输入程序4.2.8密码检验程序由四位数字组成开锁密码,当输入密码后,按下确认密码按键X13开始验证密码,比较指令将从输入的第一个数字开始验证,与真实密码的第一个数值进行比较,比较指令中,当被比较值大于比较值,M0=1,被比较值等于比较值,M1=1,被比较值小于比较值,M2=1,即只有数值相同时,才能使常开触点M1闭合,从而才能继续验证输入的第二个数字。若有一个数值不相同,则不开锁并记录错误次数。只有当四位数字全部验证成功,才会开门。密码检验程序如图4.2所示:图4.2密码检验程序4.2.9修改密码程序当输入正确密码验证成功开门后,常开触点M10的闭合使得辅助继电器M20线圈得电,常开触点M20闭合,此时按下修改密码按键X14才能修改密码,按下X14后,辅助继电器线圈M25得电,触发常开接点M25闭合,开始执行指针编号为P4的子程序,此时按下修改的密码的第一个数字对应的按键后,寄存器D200中的数值就会被改变,与此同时,辅助继电器M16线圈和定时器T5线圈得电,触发了常开触点M16和T5闭合,常闭触点T5断开,此时跳出指针编号为P4的子程序,开始执行指针标号为P5的子程序,此时按下数字按键,将不会改变寄存器D200中的密码值,而是改变寄存器D201中的值并使辅助继电器M17线圈和定时器T6线圈得电,触发了常开触点M17和T6闭合,常闭触点T6断开,从而跳出指针编号为P5的子程序,开始执行指针标号为P6的子程序,按下需要改变的数字按键后,会保存在寄存器D202中并触发辅助继电器M18和定时器T7的常闭接点断开,常开接点闭合,从而跳出指针编号为P6的子程序,开始执行指针标号为P7的子程序,输入需要改变的密码后,寄存器D203中的数值被改变,定时器T8的线圈被触发,它的常闭接点将会断开,从而不再进入修改密码的代码中,此时再次按下修改密码按键X14,密码就修改完成了,此时修改密码程序中的定时器和辅助继电器将复位,以用于下一次修改密码。修改密码程序如图4.3所示:图4.3修改密码程序4.2.10防盗报警程序只有当输入的密码与寄存器中的真实密码一致时,才能使对应辅助接点闭合,由于密码错误时,常开的辅助接点M0、M2、M3、M5、M6、M8、M9、M11均有可能闭合,此时其常闭的辅助接点断开,在经过取反指令后,将会触发辅助继电器M12,从而使得计数器C100计数一次并清零定时器T0~T8和辅助继电器M0~M15,当输错三次密码后,计数器C100将得电触发,其常开接点C100闭合,触发闪蜂鸣器Y1报警,此时位于检验密码程序的Y1的常闭触点断开,不再执行检验密码的程序,直至警报解除才能检验密码开锁。防盗报警程序如图4.4所示:图4.4防盗报警程序4.2.11污水处理程序低液位由下液位传感器开关X16检测,高液位由上液位传感器开关X17检测。当污水水位低于低液位时,下液位传感器开关X16断开,无需开启水泵抽水;当污水水位高于低液位,且低于高液位时,下液位传感器开关X16闭合,开启水泵1处理污水;当污水高于高液位时,上、下液位传感器开关都将会闭合,水泵1、水泵2共同启动处理污水,若污水量减少,污水液位低于高液位时,上液位传感器开关将会断开,水泵2将停止工作,以节省能源。污水处理程序如图4.5所示:图4.5污水处理程序5智能牧场系统调试调试即为将写好的程序对应下载到单片机和PLC编程软件中,通过实践操作和系统仿真,逐步验证。根据系统的任务目标来判断实际是否达到要求,若没有达到要求,则再次对硬件和软件进行修改。5.1硬件调试首先,对照原理图、I/O接线图将元器件进行接线,首先进行主机元器件的连接,把温湿度传感器、称重传感器、水位传感器、雨滴传感器、无线通信模块、蓝牙模块按照原理图的接线接到主机的对应的IO口,从电源模块中接出的直流正极和负极中各接出端子排,供给水泵、风扇、蓝牙、水位传感器、雨滴传感器、同步电机、电磁阀等使用。接下来进行从机的连接,把TFTLCD屏幕接在从机对应IO口上,并把无线通信模块接到对应的IO口。在上电之前,先测量各主路、分路电源是否短路,避免烧毁芯片。接着要检查各线路是否存在接线错误,是否存在线路接触不良的情况。上电之后,观察各器件指示灯是否亮起,若有器件指示灯未亮起,断电之后仔细检查接线是否正确。在多次运行调试过程中,发现了以下问题:(1)当要在PLC输入点接入有源开关时,需要接上电源,若AC型有源开关工作电压为24V,则可以连接PLC内部24V电源,也可以采用外部电源。但对于DC型有源开关则不要连接PLC内部24V电源。(2)有一些线路接好之后没有进行加固,线路容易松动造成线路接触不良,使器件无法运行,因此在上电之前一定要检查线路。(3)因为一些负载的工作电压不一致,因此采用电源适配器模块统一输出12V的直流电压后通过降压模块使其降到所需的5V工作电压,但由于降压模块质量问题影响了输出电压的稳定,从而导致了系统的稳定性,在发现问题后,迅速更换模块,提高系统稳定性的同时解决这个供电不稳定而带来的安全隐患。(4)在初步调试硬件时,把单片机输出端与负载直接连接,通电后发现负载根本不能运行,经过逐步查找原因,从而发现单片机输出电压只有5V,输出电流有限,无法驱动大功率的负载,若要使负载运行,需要连接一个继电器来驱动负载。5.2软件调试通过逐步编译,检查编写的程序是否存在逻辑错误,在仔细检查过程中没有发现错误并成功编译后,把代码分别重新烧录到单片机和PLC中,在调试过程中注意观察,与单片机相连接的继电器的灯亮起时,相对应连接的元器件是否正确动作,器件均能正确动作后,才证明代码可行。首先,打开电源,把PLC的指针拨到运行,PLC电源指示灯和运行指示灯亮起,其余指示灯均熄灭,说明程序无逻辑错误,可以开始输入密码验证,密码锁能正确动作,则证明程序编写无误。用物体靠近接在PLC的X16、X17输入端的接近开关,电容式接近开关的指示灯亮起,随机水泵开启,说明传感器无损坏,水泵可正常工作。PLC调试运行图如图5.1所示。图5.1PLC调试运行单片机上电之后,连接在P26接口的风扇在间隔15s后开启并在工作5s后停止,控制风扇的继电器随着它工作而亮起,停止而熄灭,如此循环。在称重传感器上加上些许重物,观察TFTLCD屏幕上的食物重量的数值是否发生变化,然后再慢慢减少称重传感器上的重物,使其达到可驱动电磁阀打开的阈值,与电磁阀相连的继电器工作指示灯亮起,电磁阀正确动作。慢慢减少水槽里的水,使其达到动作阈值后,与水泵相连的继电器工作指示灯亮起,水泵开始抽水。打开手机蓝牙,与单片机蓝牙进行配对,发送字母b,与电磁阀相连的继电器工作指示灯亮起,电磁阀打开;发送字母a,电磁阀关闭,与电磁阀相连的继电器工作指示灯熄灭。发送字母c,与水泵相连的继电器工作指示灯亮起,水泵开始工作,发送字母d,水泵停止工作,与水泵相连的继电器工作指示灯熄灭;发送字母e,开启风扇,与风扇相连的继电器工作指示灯亮起;发送字母f,风扇停止工作,与风扇相连的继电器工作指示灯熄灭;发送字母g,控制卷帘的电机正转,控制电机正转的继电器工作指示灯亮起,发送字母h,电机正转停止,控制电机正转的继电器工作指示灯熄灭;发送字母j,控制卷帘的电机反转,控制电机反转的继电器工作指示灯亮起,发送字母i,电机反转停止,控制电机反转的继电器工作指示灯熄灭。调试结果如图5.2所示。图5.2调试结果实物图在调试过程中,也曾出现过很多次调试失败的情况。比如,在编译代码的时候,总是报错没有定义reg52.h文件里的一些IO口,通过检查后在主函数文件中添加引用了reg52.h文件。再比如,通过按键输入密码的时候,在输入下一个数字时,总会覆盖前面输入的数字,因此我采用了定时器和辅助继电器相结合的方法解决这个问题,我设计程序使得定时器的常闭触头与控制输入第一个数字的子程序调用指令相连,常开触头与控制第二个数字的子程序调用指令相连,当输入数字后,第一个定时器开始计时,并触发辅助继电器线圈动作,使辅助继电器常开触头自锁,从而使得定时器线圈持续通电,此时定时器的常闭触头立即断开,输入第一个数字的指令也将立即断开,不再执行,而常开触头迅速闭合,接通输入第二个数字的指令。这样的设计在输入下一位数字时就不会再改变上一位寄存器中存储的数字。6结语通过对课题的应用、目前的市场需求以及相关的研究进行大致的了解后,对要实现的设计有了整体的构想,通过系统硬件的搭建、系统软件中程序的编写、以及软硬件的联合调试等方面工作的开展,基本完成了初期的任务要求,设计出的智能牧场系统基本上能够达到预期的效果。本设计采用PLC和STC89C52单片机作为核心器件,使得设计出来的牧场能够智能、可靠、有效地运行,实现了牧场的自动化喂养、智能环境消毒以及智能防盗,能够从一定程度减少养殖畜产品的成本的同时实现畜产品养殖的高效、高质。总结这整个设计的实践过程,我觉得最重要的还是代码的编程与学习。虽然以前在课堂上也学习过单片机和PLC的程序编程,但是课堂上的学习只是比较系统地去学习这方面的知识,但真正去编写程序实现功能的时候,一些代码编写的细节上的规则,以及一些代码的编写顺序对功能实现的影响都是在发现错误的时候通过逐步修改调试,才能够真正地清楚这些细节部分对实现功能的影响。所要运用的元器件都必须先去了解它的原理,然后再慢慢地去读透它的驱动程序,才能真正地把它运用好。其实整个编程的过程就是在不断学习和积累经验的过程。本设计虽然基本上达到了预期的目标,但仍存在许多不足之处,系统在实际使用过程中仍存在一些问题需要不断完善和改进,比如:系统功能也有待增加和改善;系统检测存在一定的延时等。所以,本设计尚未真正达到投入市场的应用的标准仍,还需要自己从各个方面对设计进行完善和提升。
参考文献[1]阮友德.PLC、变频器、触摸屏综合应用实训[M].北京:中国电力出版社,2019[2]徐航.关于发展畜牧业的现状及前景分析[J].今日财富,2019,000(004):P.191-191.[3]张国锋,肖宛昂.智慧畜牧业发展现状及趋势[J].中国国情国力,2019(12).[4]吴静进,何尚平,万彬.MCS-51单片机原理与应用[M].重庆:重庆大学出版社,2019[5]金成龙,李青.OLED显示技术概要及应用领域的发展趋势[J].数字技术与应用,2020,v.38;No.362(08):226-229.[6]海涛,黄清宝,肖根福,陈雪云,易泽仁,赵晚昭,陈柏轩.电气控制与PLC实验教程[M].重庆:重庆大学出版社,2020[7]孙加军,王相宇.由国外养殖业发展看我国畜牧业规模化养殖[J].农业开发与装备,2016,000(008):59-59.[8]欧阳晨星.基于物联网的智能牧场[J].数码世界,2019(6).[9]潘银松颜烨高瑜张强.C语言程序设计基础教程[M].重庆:重庆大学出版社,2019[10]HuiWang.OptimalDesignofSingleChipMicrocomputerMulti-machineSerialCommunicationbasedonSignalVerificationTechnology[J].InternationalJournalofIntelligentInformationandManagementScience,2020,9(1)[11]SensorResearch;FindingsfromNationalResearchTomskPolytechnicUniversityYieldsNewDataonSensorResearch(Single-chipSolutionforElectronicsUnitofaSmartPressureSensor)[J].JournalofEngineering,2020.[12]WangZG,ZhangY,Yan-MinLI.ControlApplicationofPLCTechnologyinElectricalAutomation[J].WorldNonferrousMetals,2019.
附录附录A实物图本文设计作品的单片机控制部分的实物图如A1所示,PLC控制部分的实物图如A2所示。图A1单片机控制部分的实物图图A2PLC控制部分的实物图附录B单片机部分源程序#include"Hummerbot.h"#include"BluetoothHandle.h"#include"ProtocolParser.h"#include"KeyMap.h"#include"reg52.h" #include"XPT2046.h" //AD转换#include"HX71101.h"//压力传感器#include"DHT11.h"//温湿度传感器#include"keydown.h"//按键#include"2401.h"//无线传输#ifndefu8#defineu8unsignedchar//对数据类型进行声明定义#endif#ifndefu16#defineu16unsignedint#endif#ifndefu32#defineu32unsignedint#endif#ifndeful#defineulunsignedlong#endif#ifndefuchar#defineucharunsignedchar//对数据类型进行声明定义#endif#ifndefuint#defineuintunsignedint#endif#ifndefulong#defineulongunsignedlong#endifexternunsignedinttarget;externunsignedintpgus;externunsignedintpgms;externunsignedintpgs;unsignedcharKeyalce[10];sbitpwm1=P2^3;sbitpwm2=P2^4;sbitpwm3=P3^3;sbitpwm4=P3^2;sbitpwm5=P2^7;sbitpwm6=P2^6;bita0,a1,a2,a3,a4;#defineGapValue400u16jnsm=0;u16ad1;//水位传感器u16ad2;//光敏电阻u16ad3;//雨滴传感器u8JOV[4];u8x,y;ulzxc,vbn;u8receiveData;//串口u8AS;u16aa12aa=0;u8Tx_Buf1[13]={1}; //24L01发送的数组unsignedintmubiao=15000,xianshi=0;voiddatapros();voidDigDisplay();voiddflt(u16te);//1122voidUsartInit();//串口voiddelay_ms2401(u16z); //2401延时函数voidTimer0Initial();voidinitial_Timer();voiddelay(unsignedintx);voidkeyscan();voidUsartInit(){ SCON=0X50; //设置为工作方式1 TMOD&=0X0F;//清0T1的控控制位 TMOD|=0X20; //设置计数器工作方式2 PCON|=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置 TL1=0XF3; ET1=0;//禁止T1中断 ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器}voidmain(){ u16as2401=0; intbs2401=0;initial_Timer(); UsartInit(); zxc=0; vbn=HX711_Read(); vbn=(unsignedint)((float)vbn/GapValue); InitNRF24L01(); while(NRF24L01Check()) //检查不到24l01则小灯闪烁提示报警 { } while(1) { zxc=HX711_Read(); zxc=(unsignedint)((float)zxc/GapValue);//计算实物的实际重量 zxc=zxc-vbn; dflt(zxc); //压力数据处理与显示函数 datapros(); //AD数据处理与显示函数 DHT11_receive();//温湿度数据处理与显示函数 if(a3==0) { if(Tx_Buf1[4]>=50||Tx_Buf1[5]>=27) { pwm3=1; } else { pwm3=0; } } if(receiveData=='0') { a0=0;a1=0;a2=0;a3=0;a4=0; } if(receiveData=='a')//停止放粮 { AS='a'; a1=1;pwm1=1;a0=1; } elseif(receiveData=='b')//放粮 { AS='a'; a1=1;pwm1=0;a0=1; } if(receiveData=='c') { a2=1; AS='b';pwm2=1;a0=1; } elseif(receiveData=='d') { a2=1; AS='b';pwm2=0;a0=1; } if(receiveData=='g')//正转 { a4=1; AS='d';pwm4=1;a0=1; } elseif(receiveData=='h')//停止正转 { a4=1; AS='d';pwm4=0;a0=1; } if(re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位装修验收合同范本
- 展览策展 合同范本
- 自主智能系统知到智慧树答案
- 闲置厂房担保合同范本
- 社区庆七一消防知识培训课件
- 林地承包协议合同范本
- 纸板长期供货合同范本
- 项目工程咨询合同范本
- 提前上班合同范本
- 物流租出箱子合同范本
- 主要组织相容性复合体及其编码分子
- 优化物理教学策略的思考(黄恕伯)
- 中国移动-安全-L1,2,3(珍藏版)
- 2017年全国大学生数学建模A题
- 2023年专升本计算机题库含答案专升本计算机真题
- scratch3.0编程校本课程
- GB/T 1685-2008硫化橡胶或热塑性橡胶在常温和高温下压缩应力松弛的测定
- GB/T 14825-1993农药可湿性粉剂悬浮率测定方法
- GB/T 12008.7-2010塑料聚醚多元醇第7部分:黏度的测定
- 固定资产清查工作报告
- 住宅项目景观工程施工策划(图文并茂)
评论
0/150
提交评论