智能生态系统自动化装置设计.doc_第1页
智能生态系统自动化装置设计.doc_第2页
智能生态系统自动化装置设计.doc_第3页
智能生态系统自动化装置设计.doc_第4页
智能生态系统自动化装置设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能生态系统队员1:姓名:徐德鹏,性别:男,出生年月:1992年12月,所在学院:仪器科学与电气工程学院,专业:电气工程及其自动化专业,年级:2011级,教学号:65110507,邮箱2397961557,电话队员2:姓名:李京杰,性别:男,出生年月:1992年12月,所在学院:仪器科学与电气工程学院,专业:电气工程及其自动化专业,年级:2011级,教学号:65110505,邮箱:1569394708,电话队员3:姓名:王晓丹,性别:女,出生年月:1992年7月,所在学院:仪器科学与电气工程学院,专业:电气工程及其自动化专业,年级:2011级,教学号:65110629,邮箱:2495013305,电话作品类别:自动化装置类引 言中国农业的发展必须走现代化农业这条道路,农业的研究和应用技术越来越受到重视,特别是智能化生态系统已经成为高效农业的一个重要组成部分。其中重要一环就是对农业生产环境的一些重要参数进行检测和控制。例如,空气的温度、湿度和土壤的含水量等。在农业种植问题中,环境与生物的生长、发育和能量交换密切相关,进行环境测控是实现生产管理自动化、科学化的基本保证,通过对监测数据的分析,结合作物生长发育规律,控制环境条件,使作物达到优质、高产、高效的栽培目的。国外的智能化生态系统设施己经发展到比较完备的程度,并形成了一定的标准,但是价格非常昂贵,并且与我国气候特点不相适应。而当今国内大多数对大棚温度、湿度的检测与控制都采用人工管理,这样有测控精度低、劳动强度大及由于测控不及时等弊端,容易造成不可弥补的损失,不但大大增加了成本,浪费了人力资源,而且很难达到预期的效果。因此,为了实现高效农业生产的科学化并提高农业研究的准确性,推动我国农业的发展,必须大力发展农业设施与相应的农业工程,科学合理地调节生态系统内温度、湿度等,形成有利于蔬菜、水果生长的环境,是蔬菜和水果早熟、优质高效益的重要环节。目前,随着智能化生态系统设施的迅速增多,人们对其性能要求也越来越高,特别是为了提高生产效率,对自动化程度要求也越来越高。不同种类观赏花卉对温度及湿度等生长所需条件的要求也不尽相同,为它们提供一个更适宜其生长的封闭的、良好的生存环境,以提早或延迟花期,观赏植物栽培生产最终将会给我们带来巨大的经济效益。结合用户需要,设计了一套智能化生态系统。本系统采用传感器技术和单片机相结合,实现自动控制加热、降温、通风。根据需要,通过显示屏显示基本信息,根据情况可随时调节环境参数。本文将基于嵌入式系统,使用stm32f103zet6型号的arm处理器设计操作界面,对生态系统的温度及湿度进行检测和控制,利用现有资源设计一个实时控制生态温度、湿度等的控制系统。并在此基础上,利用stm32f103zet6芯片上的片上资源设计了一系列的多媒体娱乐功能,包括音乐播放器、收音机、照相机以及图片管理等应用。目录引 言一、方案设计11、方案选择12、方案确定23、理论分析与方案论证2二、总体设计2三、单元电路(或软件模块)设计41、电源模块设计42、继电器模块设计43、光控模块设计54、温控模块设计55、功放模块设计66、湿度检测模块设计6四、单元电路测试71、电源模块测试72、继电器模块测试73、光控模块测试84、温控模块测试8五、整体测试9六、结论11七、附录111、整体软件流程图112、软件程序代码清单12八、 参考文献25一、方案设计1、方案选择方案一:采用msp430单片机作为控制芯片,通过lcd1602液晶屏显示基本信息。优点:msp430单片机具有低功耗和开发环境高效方便等优点,lcd1602液晶屏成本较低。缺点:msp430性能不稳定,运算速度低,lcd1602液晶屏显示信息量不能本设计满足要求,并且不能显示汉字。方案二:采用stc89c52rc单片机作为控制芯片,通过nokia5110液晶屏显示基本信息。优点:stc89c52rc单片机具有成本低、编程操作简单等优点,nokia5110液晶屏具有性价比高、色彩丰富等优点。缺点:nokia5110液晶屏屏幕太小,亮度不够,不易查看信息参数。方案三:采用stc12c5a60s2单片机作为控制芯片,通过lcd12864液晶屏显示基本信息。优点:stc12c5a60s2单片机具有成本较低、运算速度快等优点,lcd12864液晶屏可以显示更多字符,并且可以显示汉字。缺点:stc12c5a60s2单片机相关开发资料不够完善,开发使用难度大、周期长。方案四:采用stm32f103zet6 arm处理器作为控制核心,利用tftlcd触摸显示屏显示信息。 24个12vled超高亮节能灯作为光照补充模块。ds18b20单线式数字温度计作为温度检测模块,传回信息给arm处理器。采用 12v/5a开关电源将市电220v转换为dc12v,利用lm2596对dc12v进行降压处理得到dc5v。采用光敏电阻对光照强度进行检测,土壤湿度计检测模块作为土壤湿度传感器检测土壤湿度。采用电动喷雾器水泵(回流隔膜泵)12v作为喷水装置。优点:stm32f103zet6 arm处理器具有运行速度快、内置flash存储等优点,可运行片上操作系统,具有极其强大的扩展功能。超高亮节能灯照明模块亮度非常高并且低功耗。 12v/5a开关电源模块具有方便、稳定和可调等优点。 12v稳定版光控开关光敏电阻加继电器模块光线检测开关具有灵敏、高效和稳定等优点。水泵具有体积小、电流小、使用寿命长、物美价廉等优点,泵体与电机分离,泵体内无机械部件、无磨损。水泵自带释压溢流回路装置,不会憋爆水管和损坏水泵。 缺点:stm32f103zet6 arm微处理器成本较高,嵌入式系统的开发和应用难度较大。2、方案确定通过对比四种方案的优缺点,以及可操作性,考虑到题目要求、工作条件,方案四优于其他几种方案。stm32f103zet6 arm处理器可以更好的满足控制要求,功能强大,并可以设计友好的人机交互界面。tftlcd触摸屏具有大屏、显示信息多、方便实现人机交互等优越性。方案四能使系统有较好的稳定性,充分体现了模块化设计的要求,并且这些芯片及器件均为通用器件,在市场上较常见,价格也低廉,样品制作成功的可能性比较大,所以本设计采用方案四。3、理论分析与方案论证本设计采用方案四。通过stm32f103zet6 arm处理器控制tftlcd触摸屏实现温度和湿度等信息的显示。通过12v/5a开关电源给系统供电。通过加热片加热空气来提高温度。通过风扇控制系统通风降温。通过led灯模块补充光照强度。通过水泵喷水雾控制土壤干湿度。二、总体设计本系统的硬件结构图如图1所示。12v/5a开关电源模块将ac220v转化为dc12v,再经过lm2596降压芯片获得dc5v,以此提供5v/12v直流电以满足处理器和外围设备的供电需要。12v光控开关,由光敏电阻对光照强度进行检测,通过由lm393构成的电压比较电路获得继电器的触发信号,由继电器的常开触点控制12v光照补充模块(由24个超高亮led节能灯组成)。当没有光强或光照强度不足时,继电器经触发信号触发,其常开触点闭合,控制12v光照补充模块工作,超高亮led节能灯通电发光,为植物提供充足的光照。当光照强度充足时,继电器常开触点断开,光照补充模块断电熄灭。土壤湿度检测模块作为土壤湿度传感器检测土壤湿度。当土壤湿度传感器检测到土壤的湿度低于设定阈值时,将土壤湿度信息传给stm32f103zet6 arm处理器,此时处理器通过继电器控制电动喷雾水泵抽水,并且通过喷头喷出水雾。当土壤湿度传感器检测到的土壤湿度高于或者达到设定阈值时,此时处理器通过继电器控制电动喷雾器水泵停止工作。ds18b20单线式数字温度传感器作为温度检测装置。当感应到的温度低于设定阈值时,处理器通过继电器控制加热片给空气加热。当感应到温度高于设定阈值时,处理器通过继电器控制风扇给通风降温。本系统共有2个风扇,一个风扇逆时针转控制进风,一个风扇顺时针转控制出风,从而实现空气流动。图1 系统的硬件结构图三、单元电路(或软件模块)设计1、电源模块设计由12v/5a开关电源和lm2596降压电路组成。因为所用器件都是由+5v和+12v供电,所以降压模块选择降压到+5v和+12v电压,开关电源将220v交流电转化为12v直流电,lm2596降压模块将12v直流电转化为5v直流电。如图2所示。图2 电源模块设计图2、继电器模块设计继电器模块共有3个继电器其中2个继电器控制电压为+12v,一个为+5v,触发方式设置为低电平触发。继电器电路图如图3所示。其中继电器选取dc5v继电器,控制+12电压的r2阻值为2.3k,控制+5v电压的r2阻值为910,r1阻值相同为4.7k,二极管类型为1n4148,三极管类型为pnp型硅三极管s8550。图3 继电器电路设计图3、光控模块设计光控模块由光敏电阻、电压比较器lm393、电磁继电器和led节能灯组成。光敏电阻负责检测光照强度,并将检测到的光强电阻信号通过特定的电路转化为电压信号,电压比较器lm393负责将此电压信号与预设电压进行比较,并由此产生继电器的触发信号,从而控制led节能灯的导通与关断。其结构如图4所示。图4 光控模块设计图4、温控模块设计温控模块由ds18b20温度传感器、继电器、12v/20w加热片和两个12v/5w通风扇组成,通过tftlcd触摸屏显示温度信息。当ds18b20检测到的温度低于设定阈值,stm32f103zet6 arm处理器通过继电器控制加热片工作,直至温度升高到设定阈值;当ds18b20检测到的温度高于设定阈值,stm32f103zet6 arm处理器通过继电器控制通风扇工作,直至温度降低到设定阈值。温控模块整体结构如图5所示。图5 温控模块设计图5、功放模块设计功放模块由两片tda2030功放芯片组成,构成双声道功放电路,驱动两个0.5w/8的喇叭进行音乐播放。功放模块整体结构如图6所示。图6 功放模块设计图6、湿度检测模块设计图6 湿度检测模块设计图如图7所示,湿度检测模块由土壤探头、lm393比较电路和指示灯构成。土壤探头测得的漏电流大小经过电阻变为电压信号,通过lm393进行电压比较,产生数字信号,进而被处理器利用进行湿度的控制。四、单元电路测试1、电源模块测试电源模块可以正常工作,提供稳定的电压,检测结果如图8。图8 电源模块测试结果图2、继电器模块测试继电器控制模块可以正常工作,工作时绿色指示灯亮表示该继电器正常工作,检测结果如图9。 图9 继电器模块测试结果图3、光控模块测试当没有光照或光照强度不足时,光控开关闭合,led光照模块工作,发出亮光,检测结果如图10所示。图10 光控模块测试结果图4、温控模块测试温控模块可以测试温度,并使lcd12864液晶屏正常显示温度数值,检测结果如图11所示。 图11 温控模块检测图五、整体测试系统整体实物图如图12所示,所有模块均能稳定工作。当没有光强或光照强度不足时,继电器经触发信号触发,其常开触点闭合,控制12v光照补充模块工作,超高亮led节能灯通电发光,为植物提供充足的光照。当光照强度充足时,继电器常开触点断开,光照补充模块断电熄灭。土壤湿度检测模块作为土壤湿度传感器检测土壤湿度。当土壤湿度传感器检测到土壤的湿度低于设定阈值时,将土壤湿度信息传给stm32f103zet6 arm处理器,此时处理器通过继电器控制电动喷雾水泵抽水,并且通过喷头喷出水雾。当土壤湿度传感器检测到的土壤湿度高于或者达到设定阈值时,此时处理器通过继电器控制电动喷雾器水泵停止工作。ds18b20单线式数字温度传感器作为温度检测装置。当感应到的温度低于设定阈值时,处理器通过继电器控制加热片给空气加热。当感应到温度高于设定阈值时,处理器通过继电器控制风扇给通风降温。图12 整体实物图图13 开机界面图六、结论本系统是利用stm32f103zet6 arm处理器采用程序设计方法控制加热片、风扇和水泵等电子器件,再通过温度传感器ds18b20感应温度,加热片、风扇控制温度,通过水泵喷水控制土壤干湿度,最终通过tftlcd触摸屏显示出温度、干湿度等信息。智能生态系统处于温度不适应的情况,温度较低或较高时,可以通过自动调节,实时监控环境温度,实现环境温度最优化。同时,也可对土壤干湿度做出准确监控,达到调节土壤环境的目的。光照控制保障了充足的光强,更利于生物生长。通过软件仿真,基本达到预期的设计目标。七、附录1、整体软件流程图图14 整体软件流程图2、软件程序代码清单#include includes.h #include stdlib.h#include exfuns.h#include listbox.h#include t9input.h#include spb.h#include ebook.h#include picviewer.h#include mp3player.h#include settings.h#include calendar.h#include paint.h #include radio.h #include recoder.h #include camera.h#include mmc_sd.h#include huapen.h /ucosii任务设置/start 任务/设置任务优先级#define start_task_prio 10 /开始任务的优先级设置为最低/设置任务堆栈大小#define start_stk_size 64/任务堆栈,8字节对齐_align(8) static os_stk start_task_stkstart_stk_size;/任务函数void start_task(void *pdata); /串口任务/设置任务优先级#define usart_task_prio 7 /设置任务堆栈大小#define usart_stk_size 64/任务堆栈,8字节对齐_align(8) static os_stk usart_task_stkusart_stk_size;/任务函数void usart_task(void *pdata); /主任务/设置任务优先级#define main_task_prio 6 /设置任务堆栈大小#define main_stk_size 512/任务堆栈,8字节对齐_align(8) static os_stk main_task_stkmain_stk_size;/任务函数void main_task(void *pdata);/串口监视任务/设置任务优先级#define watch_task_prio 3 /设置任务堆栈大小#define watch_stk_size 128/任务堆栈,8字节对齐_align(8) static os_stk watch_task_stkwatch_stk_size;/任务函数void watch_task(void *pdata); /mp3任务/设置任务优先级#define music_play_task_prio 2 /设置任务堆栈大小#define music_play_stk_size 256/任务堆栈,8字节对齐_align(8) static os_stk music_play_task_stkmusic_play_stk_size;/任务函数void music_play_task(void *pdata);/ /外部内存测试(最大支持1m字节内存测试)/返回值:0,成功;1,失败.u8 system_exsram_test(u16 x,u16 y) u32 i=0; u16 temp=0; u16 sval=0;/在地址0读到的数据 lcd_showstring(x,y,239,y+12,12,ex memory test: 0kb); /每隔1k字节,写入一个数据,总共写入1024个数据,刚好是1m字节for(i=0;i1024*1024;i+=1024)fsmc_sram_writebuffer(u8*)&temp,i,2);temp+;/依次读出之前写入的数据,进行校验 for(i=0;i1024*1024;i+=1024) fsmc_sram_readbuffer(u8*)&temp,i,2);if(i=0)sval=temp; else if(temp=1024*1024)lcd_showxnum(x+15*6,y,i/1024,4,12,0);/显示内存值 return 0;/内存正常,成功return 1;/失败/显示错误信息/x,y:坐标.err:错误信息void system_error_show(u16 x,u16 y,u8*err)point_color=red; while(1)lcd_showstring(x,y,240,320,12,err);delay_ms(400);lcd_fill(x,y,240,y+18,black);delay_ms(100);led0=!led0; /系统初始化void system_init(void) const u8 okoffset=162; u16 ypos=0;u16 j=0;u16 temp=0;u8 res;u32 dtsize,dfsize;u8 *stastr=0;u8 *version=0; u8 verbuf12;nvic_configuration();delay_init(72);/延时初始化 uart_init(9600); /串口1初始化lcd_init();/lcd初始化 lcd_pwm_init();/初始化lcd背光亮度lcd_blpwm_val=200; /设置为最亮 led_init(); /led初始化 key_init();/按键初始化 fsmc_sram_init();/初始化sramgui_init();adc_init(); /adc初始化,内部温度传感器beep_init(); at24cxx_init(); audiosel_init();audiosel_set(0); usmart_dev.init(72); mem_init(sramin);/内部内存池初始化version=mymalloc(sramin,31);/申请31个字节内存reinit:/重新初始化lcd_clear(black);/黑屏point_color=white;back_color=black;j=0; /显示版权信息ypos=2;app_show_mono_icos(5,ypos,18,24,(u8*)app_alientek_ico,yellow,black);lcd_showstring(28,ypos+12*j+,240,320,12, intelligent ecosystem);/智能生态系统lcd_showstring(28,ypos+12*j+,240,320,12,ciee of jilin university); lcd_showstring(28,ypos+12*j+,240,320,12,created by our team);sprintf(char*)verbuf,lcd id:%04x,lcddev.id);/lcd id打印到verbuf里面lcd_showstring(5,ypos+12*j+,240,320,12, verbuf);/显示lcd id /开始硬件检测初始化lcd_showstring(5,ypos+12*j+,240,320,12, cpu:stm32f103zet6 72mhz);lcd_showstring(5,ypos+12*j+,240,320,12, flash:512kb sram:64kb);if(system_exsram_test(5,ypos+12*j)system_error_show(5,ypos+12*j+,ex memory error!);lcd_showstring(5+okoffset,ypos+12*j+,240,320,12,ok); mem_init(sramex);/外部内存池的初始化必须放到内存检测之后! spi_flash_init();/w25qxx初始化 switch(spi_flash_type)case w25q80:temp=1*1024;break;case w25q16:temp=2*1024;break;case w25q32:temp=4*1024;break;case w25q64:temp=8*1024;break;default :system_error_show(5,ypos+12*j+,ex flash error!);break;lcd_showstring(5,ypos+12*j,240,320,12, ex flash: kb); lcd_showxnum(5+9*6,ypos+12*j,temp,4,12,0);/显示flash大小 lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); lcd_showstring(5,ypos+12*j,240,320,12, fatfs check.);/fatfs检测 if(exfuns_init()system_error_show(5,ypos+12*(j+1),fatfs memory error!);/内存分配 f_mount(0,fs0); /挂载sd卡 f_mount(1,fs1); /挂载flash.lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /sd卡检测lcd_showstring(5,ypos+12*j,240,320,12, sd card: mb);/fatfs检测temp=0; dotemp+; res=exf_getfree(0:,&dtsize,&dfsize);/得到sd卡剩余容量和总容量delay_ms(200); while(res&temp10;/单位转换为mbstastr=ok; else temp=0;/出错了,单位为0stastr=error; lcd_showxnum(5+8*6,ypos+12*j,temp,5,12,0);/显示sd卡容量大小lcd_showstring(5+okoffset,ypos+12*j+,240,320,12,stastr);/sd卡状态 /w25q64检测,如果不存在文件系统,则先创建.temp=0; dotemp+; res=exf_getfree(1:,&dtsize,&dfsize);/得到flash剩余容量和总容量delay_ms(200); while(res&temp20);/连续检测20次 if(res=0x0d)/文件系统不存在lcd_showstring(5,ypos+12*j,240,320,12, flash disk formatting.);/格式化flashres=f_mkfs(1,1,4096);/格式化flash,1,盘符;1,不需要引导区,8个扇区为1个簇if(res=0)lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok);/标志格式化成功 res=exf_getfree(1:,&dtsize,&dfsize);/重新获取容量 if(res=0)/得到flash卡剩余容量和总容量lcd_showstring(5,ypos+12*j,240,320,12, flash disk: kb);/fatfs检测 temp=dtsize; else system_error_show(5,ypos+12*(j+1),flash fat error!);/flash 文件系统错误 lcd_showxnum(5+11*6,ypos+12*j,temp,4,12,0);/显示sd卡容量大小lcd_showstring(5+okoffset,ypos+12*j+,240,320,12,ok);/sd卡状态 /tpad检测 lcd_showstring(5,ypos+12*j,240,320,12, tpad check.); if(tpad_init()system_error_show(5,ypos+12*(j+1),tpad error!);/触摸按键检测else lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /rtc检测 lcd_showstring(5,ypos+12*j,240,320,12, rtc check.); if(rtc_init()system_error_show(5,ypos+12*(j+1),rtc error!);/rtc检测else lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /adxl345检测 lcd_showstring(5,ypos+12*j,240,320,12, adxl345 check.); if(adxl345_init()system_error_show(5,ypos+12*(j+1),adxl345 error!);/adxl345检测else lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /24c02检测 lcd_showstring(5,ypos+12*j,240,320,12, 24c02 check.); if(at24cxx_check()system_error_show(5,ypos+12*(j+1),24c02 error!);/24c02检测else lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /rda5820检测 lcd_showstring(5,ypos+12*j,240,320,12, rda5820 check.); if(rda5820_init()system_error_show(5,ypos+12*(j+1),rda5820 error!);/rda5820检测else lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /vs1053检测 lcd_showstring(5,ypos+12*j,240,320,12, vs1053 check.); vs_init();/初始化vs1053接口vs_sine_test();/正弦测试beep=0; if(vs_ram_test()!=0x83ff)system_error_show(5,ypos+12*(j+1),vs1053 error!);/ram测试else lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /字库检测 lcd_showstring(5,ypos+12*j,240,320,12, font check.);res=key_scan(1);/检测按键 while(font_init()|res=2)/检测字体,如果字体不存在/按下key1,则更新字库res=0;/按键无效 if(update_font(5,ypos+12*j,12,0)!=0)/从sd卡更新 if(update_font(5,ypos+12*j,12,1)!=0)/从flash更新system_error_show(5,ypos+12*(j+1),font error!);/字体错误 lcd_fill(5,ypos+12*j,240,ypos+12*(j+1),black);/填充底色 lcd_showstring(5,ypos+12*j,240,320,12, font check.); lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok);/字库检测ok/系统文件检测 lcd_showstring(5,ypos+12*j,240,320,12, system files check.); while(app_system_file_check()/系统文件检测lcd_fill(5,ypos+12*j,240,ypos+12*(j+1),black);/填充底色 lcd_showstring(5,ypos+12*j,6*8,12,12, updating); /显示updatingapp_boot_cpdmsg_set(5,ypos+12*j);/设置到坐标if(app_system_update(app_boot_cpdmsg) /更新出错system_error_show(5,ypos+12*(j+1),system file error!);lcd_fill(5,ypos+12*j,240,ypos+12*(j+1),black);/填充底色 lcd_showstring(5,ypos+12*j,240,320,12, system files check.); if(app_system_file_check()/更新了一次,再检测,如果还有不全,说明sd卡文件就不全!system_error_show(5,ypos+12*(j+1),system file lost!);else break;lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); /触摸屏检测 lcd_showstring(5,ypos+12*j,240,320,12, touch check.); res=key_scan(1);/检测按键 if(tp_init()|res=1)/有更新/按下了key0,执行校准 if(res=1)tp_adjust();res=0;/按键无效goto reinit;/重新开始初始化lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok);/触摸屏检测ok /系统参数加载 lcd_showstring(5,ypos+12*j,240,320,12, system parameter load.); if(app_system_parameter_init()system_error_show(5,ypos+12*(j+1),parameter load error!);/参数加载else lcd_showstring(5+okoffset,ypos+12*j+,240,320,12, ok); lcd_showstring(5,ypos+12*j,240,320,12, system starting.); /蜂鸣器短叫,提示正常启动beep=1;delay_ms(100);beep=0;myfree(sramin,version); void cold_play(void)fan=0;/启动风扇jiare=1;/加热器工作delay_ms(2000);delay_ms(2000);/工作4秒fan=1;/停止风扇void heat_play(void)fan=1;/启动风扇jiare=0;/加热器工作delay_ms(2000);delay_ms(2000);/工作4秒fan=1;/停止风扇jiare=1;/加热器停止工作void water_play(void)shuibeng=0;/启动水泵delay_ms(2000);delay_ms(2000);/工作4秒shuibeng=1;/停止水泵/main函数 int main(void) fan_init();/初始化 shuibeng_init(); jiare_init(); shidu_init();system_init();/系统初始化 osinit(); ostaskcreate(start_task,(void*)0,(os_stk*)&start_task_stkstart_stk_size-1,start_task_prio );/创建起始任务osstart(); /开始任务void start_task(void *pdata) os_cpu_sr cpu_sr=0;pdata = pdata; osstatinit();/初始化统计任务.这里会延时1秒钟左右 app_srand(ostime);gui_init();/gui初始化 piclib_init();/piclib初始化os_enter_critical();/进入临界区(无法被中断打断) ostaskcreate(main_task,(void*)0,(os_stk*)&main_task_stkmain_stk_size-1,main_task_prio); ostaskcreate(usart_task,(void*)0,(os_stk*)&usart_task_stkusart_stk_size-1,usart_task_prio); ostaskcreate(music_play_task,(void*)0,(os_stk*)&music_play_task_stkmusic_play_stk_size-1,music_play_task_prio); ostaskcreate(watch_task,(void*)0,(os_stk*)&watch_task_stkwatch_stk_size-1,watch_task_prio); ostasksuspend(start_task_prio);/挂起起始任务.os_exit_critical();/退出临界区(可以被中断打断)/主任务void main_task(void *pdata)u8 selx;if(lcddev.id=0x6804) /强制设置屏幕分辨率为320*240.以支持3.5寸大屏lcddev.width=240;lcddev.height=320; spb_init(); /spb初始化while(1)selx=spb_move_chk();system_task_return=0;/清退出标志switch(selx)/发生了双击事件case 0:/降温if(slcd.frame=0)cold_play(); else cold_play();slcd.show(slcd.pos);/显示主界面 break;case 1:/加热if(slcd.frame=0)heat_play(); else heat_play(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论