粮食仓库温湿度智能检测_系统软件设计毕业论文(编辑修改稿)内容摘要:

程序。 因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到 C 语言,具体应用比如单片机以及嵌入式系统开发。 C 语言 是 功的系统描述语言,用 C 语言开发的 UNIX操作系统就是一个成功的范例。 同时 C 语言又是一种通用的程序设计语言,在国际上广泛流行。 世界上很多著名的计算公司都成功的开发了不同版本的 C 语言, 很多优秀的应用程序也都使用 C 语言开发的,它是一种很有发展前途的高级程序设计语言。 1. C 是中级语言。 它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 是结构式语言。 结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。 这种结构化方式可使程序层次清晰,便于使用、维护以及调试。 C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从 而使程序完全结构化。 语言功能齐全。 具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。 而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。 4. C 语言适用范围大。 适合于多种操作系统,如 Windows、 DOS、 UNIX 等等;也适用于多种机型。 C 语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用 C 语言编写的。 C 语言具有较好的可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。 它是数值计算的高级语言 [5]。 汇 编语言是低级语言,在编写程序的时候会把根据不同的情况指定使用不同的寻址方式,能够对内存和 CPU 里的通 用寄存器直接操纵。 不同的计算机系列会有不同的汇编语言此次课题 选择了 C 语言进行编写。 3 系统软件设计 10 3 系统软件设计 系统硬件工作原理 该系统的硬件电路由以下几部分电路模块组成:单片机、温度传感器检测电路、湿度传感器检测电路、数码管显示电路、键盘开关电路、蜂鸣器报警电路等部分。 系统硬件框图如图 所示。 图 系统硬件框图 系统软件设计概述 本 章在硬件电路设计的基础上,全面阐述各部分软件的设计思想和具体实现方法。 整个软件采用模块化设计结构,并利用汇编语言编制。 整个程序由主程序、显示、 报警 、 测量 等子程序模块组成 [6]。 主程序模块设计 主程序框图如图 所示。 程序初始化包括寄存器设置、堆栈设置和相关单元清零设置等。 主程序存放于 89c52 中,启动后循环执行,不停地进行采样计算,得出实际温、湿度值,并与设定值进行比较,实现声光报警信号。 在 主程序是单片机程序的主体,整个单片机端系统软件的功能的实现都是在其中完成的。 软件设计的主要思路是将采集、接 收、显示灯功能编成独立的模块。 S18B20 温度传感器 HS1101 湿度传感器 STC89C52 单片机 串行 LED 显示 报警电路 键盘 西安工业大学北方信息工程学院毕业设计(论文) 11 是 否 是 否 图 主程序流程图 /* 主函数 */ /************************************/ void main() { EA=1。 //开总中断 init_t0()。 //初始化定时器 init_t1()。 TR0=1。 //定时器开始工作 TR1=1。 ET0=1。 lcd_init()。 //初始化 LCD ok_menu()。 BEEP=0。 while(1) { if(key1==0) Key1 键按下。 显示湿度 Key2 键按下。 显示温度 开始 结束 西安工业大学北方信息工程学院毕业设计(论文) 12 { lcd_init。 wendu_Menu ()。 do { Read_Temperature()。 Disp_Temperature()。 baojing()。 } while(key2)。 } if(key2==0) { lcd_init。 shidu_Menu()。 do { if(int_flag==1) { disp()。 } } while(key1)。 } } 温度采集模 块程序设 计 根据 DS18B20 的通讯协议,主机(单片机)控制 DS18B20 完成温度转换必须经过三个步骤: 每一次读写之前都要对 DS18B20 进行复位操作,复位成功后发送一条 ROM指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。 复位要求主 CPU将数据线下拉 500 微秒,然后释放,当 DS18B20 收到信号后等待 16~ 60 微秒左右,后发出 60~ 240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功 [7]。 西安工业大学北方信息工程学院毕业设计(论文) 13 否 是 图 温 度检测程序流程 DS18B20 中的温度传感器可完成对温度的测量,以 12 位转化为例:用 16 位符号扩展的二进制补码读数形式提供,以 ℃ /LSB 形式表达,其中 S 为符号位 [8]。 图 DS18B20 温度值 初始化是否成功。 初始化 从 18B20 读字节 向 18B20 写字节 开始 结束 读取温度 西安工业大学北方信息工程学院毕业设计(论文) 14 这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1再乘于 即可得到实际温度(例如 +125℃ 的数字输出为 07D0H, +℃ 的数字输出为 ℃ 的数字输出为 FF6FH, 55℃ 的数字输出为 FC90H) [9]。 /********************************************************** /************温度测量 ************************************** /********************************************************** / /*初始化 ds1820 */ /*******************************************************************/ Init_DS18B20(void) { DQ = 1。 //DQ 复位 Delay(8)。 //稍做延时 DQ = 0。 //单片机将 DQ 拉低 Delay(90)。 //精确延时 大于 480us DQ = 1。 //拉高总线 Delay(8)。 presence = DQ。 //如果 =0 则初始化成功 =1 则初始化失败 Delay(100)。 DQ = 1。 return(presence)。 //返回信号, 0=presence,1= no presence } /* 读一个字节 */ /*******************************************************************/ ReadOneChar(void) { unsigned char i = 0。 unsigned char dat = 0。 for (i = 8。 i 0。 i) { DQ = 0。 // 给脉冲信号 dat = 1。 DQ = 1。 // 给脉冲信号 if(DQ) 西安工业大学北方信息工程学院毕业设计(论文) 15 dat |= 0x80。 Delay(4)。 } return (dat)。 } /* 写一个字节 */ /*******************************************************************/ WriteOneChar(unsigned char dat) { unsigned char i = 0。 for (i = 8。 i 0。 i) { DQ = 0。 DQ = datamp。 0x01。 Delay(5)。 DQ = 1。 dat=1。 } } /* 读取温度 */ /*******************************************************************/ Read_Temperature(void) { Init_DS18B20()。 WriteOneChar(0xCC)。 // 跳过读序号列号的操作 WriteOneChar(0x44)。 // 启动温度转换 Init_DS18B20()。 WriteOneChar(0xCC)。 //跳过读序号列号的操作 WriteOneChar(0xBE)。 //读取温度寄存器 temp_data[0] = ReadOneChar()。 //温度低 8 位 temp_data[1] = ReadOneChar()。 //温度高 8 位 } /* 数据转换与温度显示 */ /*******************************************************************/ Disp_Temperature() { 西安工业大学北方信息工程学院毕业设计(论文) 16 display[4]=temp_data[0]amp。 0x0f。 display[0]=ditab[display[4]]+0x30。 //查表得小数位的值 display[4]=((temp_data[0]amp。 0xf0)4)|((temp_data[1]amp。 0x0f)4)。 display[3]=display[4]/100+0x30。 display[1]=display[4]%100。 display[2]=display[1]/10+0x30。 display[1]=display[1]%10+0x30。 if(display[3]==。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。