三种葡萄叶部病害检测系统设计(编辑修改稿)内容摘要:

11 图 8 黑痘病病症及相关特 点 图 9 黑痘病病叶特点 图 10 霜霉病病症及相关特点 12 图 11 霜霉病病叶特点 图 12 褐斑病病症及相关特点 13 图 13 褐斑病病叶特点 数据库 建立 根据已有的知识库信息, 将知识库的内容归纳逻辑化, 总结如下: 表 2 葡萄叶部病害信息表 病症名称 受害位置 病斑特点 影响危害 黑痘病 嫩梢,叶片,叶柄 褐色病斑变为黄色晕圈,病斑不规则,中央灰白色,稍凹陷。 危害幼嫩组织及叶片,使果实失去营养价值,枝叶干枯,停止生长。 霜霉病 叶片,叶脉 半透明油渍状病斑扩大为黄褐 色病斑,潮湿时,叶背产生白色霉层。 树枝干枯脱落,停止生长。 褐斑病 叶片 边缘色深,中央略淡,病部背面有霉层 早期落叶,消弱树势影响花芽分化及第二年产量 14 表 3 数据库信息与单片机按键对应结合 病症名称 受害位置 病斑特点 影响危害 黑痘病 1 2 3 霜霉病 4 5 6 褐斑病 7 8 9 推理系统构成 查询大量葡萄病症特点,信息后,与种植人员交流协商对三种病症信息归纳推理: 每一种病有三个关键信息点确认,如受害位置,病斑特点,影响危害。 三个信息点组成一个三位数,将多种组合放入系统软 件程序中的一个一维数组。 将归纳的病症信息离散,逻辑话与单片机建立联系。 例如:顺序按下 1, 4, 7 按键 1受害位置: 嫩梢 ,叶片,叶柄 按键 4病斑特点:褐色病斑变为黄色晕圈,病斑不规则,中央灰白色,稍凹陷。 按键 7影响危害:危害幼嫩组织及叶片,使果实失去营养价值,枝叶干枯,停止生长。 诊断结果为黑痘病。 逻辑数组建立: Shujuku[]= {147,247,347 //此病为黑痘病 158,258,268,358 //此病为 霜霉病 169,167,269,267,367,369 //此病为褐斑病 157,148,248,257,348,357 //此病 70%霜霉病, 30%黑痘病 168,159,259,359,368 //此病 50%霜霉病, 50%褐斑病 149, //此病 50%黑痘病, 50%霜霉病 249,349 //此病 50%黑痘病, 50%褐斑病 } 其他数据 //输入错误 15 4 葡萄叶部病害诊断 软件系统设计 葡萄叶部病害诊断系统流程图 系统初始化 按键扫描 病害位置显示 按键扫描 病斑位置显示 按键扫描 危害影响显示 数据整合 数据匹配 诊断信息显示 开始 结束 16 显示汉字或图形流程图 : 图 14 显示流程图 系统子程序 显示 子程序 void lcd_pos(uchar x,uchar y) //设定显示位置,在第 x 行,且在 x 行的第 y个字符显示 { uchar pos。 switch (x) { case 1: x=0x80。 break。 case 2: x=0x90。 break。 case 3: x=0x88。 break。 case 4: x=0x98。 break。 } pos=x+y。 write_12864(pos)。 开始 结束 液 晶屏初始化 清屏 设置显示位置 调用显示内容 17 } void display0() //开机显示葡萄叶部病害诊断系统 { uchar i。 write_12864(0x80)。 //第一行显示 delay_50us(1)。 for(i=0。 i16。 i++) write_12864dat(tab0[i])。 delay_50us(1)。 } 按键 子程序 uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法 { uchar cord。 uchar cord_h,cord_l。 //行列值中间变量 P1=0x0f。 //行线输出全为 0 cord_h=P1amp。 0x0f。 //读入列线值 if(cord_h!=0x0f) //先检测有 无按键按下 { delay_50us(2)。 //去抖 if(cord_h!=0x0f) { cord_h=P1amp。 0x0f。 //读入列线值 P1=cord_h|0xf0。 //输出当前列线值 cord_l=P1amp。 0xf0。 //读入行线值 ///检测按键弹起 P1=0x0f。 cord=P1amp。 0x0f。 while(cord!=0x0f){ P1=0x0f。 cord=P1amp。 0x0f。 } return(cord_h+cord_l)。 //键盘最后组合码值 } } return(0xff)。 //返回该值 18 } 初始化 子程序 void initinal(void) { psb=1。 delay_50us(2)。 write_12864(0x30)。 //选择基本指令 delay_50us(4)。 write_12864(0x30)。 delay_50us(4)。 write_12864(0x0c)。 delay_50us(4)。 write_12864(0x01)。 //清屏指令 delay_50us(240)。 write_12864(0x06)。 //游标每写完一个字指针就加一 delay_50us(10)。 } 主函数 void main() { uchar key,num,a,b,c。 uchar k。 initinal()。 display0()。 HH:k=1。 while(1) { key=keyscan()。 //调 用键盘扫描, switch(key) { 19 case 0xee:num=1。 break。 //0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。