实用智能窗帘控制器的设计-本科毕业设计_第1页
实用智能窗帘控制器的设计-本科毕业设计_第2页
实用智能窗帘控制器的设计-本科毕业设计_第3页
实用智能窗帘控制器的设计-本科毕业设计_第4页
实用智能窗帘控制器的设计-本科毕业设计_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1、工作在手动模式工作在手动模式是否按下打开否是电动机正转否是是否按下停止是否按下关闭否是完全打开是电动机反转否是 是否按下停止是 完全打开否否否否否否图4. 3手动模式工作流程图4.2 BH1750FVI数字型光强度值读取主要程序写好BH1750FVI的初始化程序后,主要通过Single_Read_BH1750(uchar REG_Address)和void Multiple_read_BH1750(void)子程序读取光线强度数据。uchar Single_Read_BH1750(uchar REG_Address) /单字节读取/ uchar REG_data; BH1750_Start()

2、; /起始信号/ BH1750_SendByte(SlaveAddress); /发送设备地址加写信号/ BH1750_SendByte(REG_Address); /发送存储单元地址,从最开始的单元开始/ BH1750_Start(); BH1750_SendByte(SlaveAddress+1); /发送设备地址加读信号/ REG_data=BH1750_RecvByte(); /读出寄存器数据/BH1750_SendACK(1); BH1750_Stop(); / /信号停止/ return REG_data; void Multiple_read_BH1750(void) /连续读出

3、BH1750内部数据 uchar i; BH1750_Start(); /起始信号/ BH1750_SendByte(SlaveAddress+1); /发送设备地址加读信号/ for (i=0; i2) flag_num=0; sum=sum*10+buf; for(i=0;i1) zidong=0; if(wangnianli1) wangnianli=0; for(i=0;i4;i+)/关闭接收 防止进入死循环/ ircodei=0; 4.4温湿度传感器工作程序void read_init() DHT=0; /使DHT11低电平并延时至少18ms/delay_ms(21);DHT=1;

4、/置DHT11高电平2040us,并等待从机相应/delay_10us();DHT=1;if(!DHT) /从机发出响应信号/ flag=2;while(!DHT)&flag+);/等待从机发高电平结束/flag=2;while(DHT&flag+);/开始采集数据/tr_shiZ=read_datadht(); /采集湿度整数部分/tr_shiX=read_datadht(); /采集湿度小数部分/tr_wenZ=read_datadht();/采集温度整数部分/tr_wenX=read_datadht();/采集温度小数部分/check=read_datadht();/采集校验位/DHT=

5、0;delay(20); /采集完数据后/ char read_datadht()uchar i,num,tempp;num=0;for(i=0;i8;i+) flag=2;while(!DHT)&flag+);/等待50毫秒低电平/delay_10us(); /延时判断0还是1/if(DHT=1) tempp=1;flag=2;while(DHT&flag+);elsetempp=0;num=1;num|=tempp; return(num);湿度 (shiZ)的值和预设定值shidu0进行比较,如果在设定的早晚时间之间,当shiZ大于shidu0就执行打开窗帘通风。4.5早晚定时开窗主要程

6、序在早晚定时的程序中,如果当前时间不在早晚定时之间,dayflag为0,如果当前时间在早晚定时之间,dayflag为1。程序段为:read_init(); /读传感器数据/read_time(); /读时间子程序/if(am0*10000+am1*10)(shi*10000+fen*10)(SET_guangqiang+20)|(dayflag=0)&(closeall=0)&zidong).4.6电动机模块以打开窗帘为例,程序段为:dakai() int i,j; for(i=0;i16;i+) for(j=0;j(SET_guangqiang+20)|(dayflag=0)&(closea

7、ll=0)&zidong)while(tempshidu0)&(dayflag=1)&(openall=1)&zidong)只有closeall为低电平才能执行第一个while循环体内容(关闭操作),只有openall为高电平才能执行第一个while循环体内容(打开操作)。4.8系统主程序void main()uint SET_guangqiang; uchar i,j; while(1) float tempp; delay_ms(200); /延时200ms lcd_init(); /初始化LCD Init_BH1750(); /初始化BH1750 timer0init(); int0in

8、it(); while(1) if(k4flag=1) /如果按下k4即设置键,进入调整时间 lcd_wcmd(0 x80);xianshi(智能窗帘 时钟 );lcd_wcmd(0 x91);xianshi(20 年 月 日);lcd_wcmd(0 x8A);xianshi(星 期 ); lcd_wcmd(0 x9a);xianshi(00: 00: 00 );while(k4flag=1)if(k1=0) read_time(); /读时间子程序dingwei(); keyscan(); /设置退出if(key4=0)k4flag=0; if(key4=0)k4flag=0;break;

9、if(k4flag=0) read_init(); /读传感器数据 read_time(); /读时间子程序 /if(am0*10000+am1*10)(shi*10000+fen*10)(pm0*10000+pm1)*10) if(am0*10000+am1*10)(shi*10000+fen*10)(SET_guangqiang+20)|(dayflag=0)&(closeall=0)&zidong) guanbi(); /晚上(设定值)或者光线小于设定值关闭窗帘 while(tempshidu0)&(dayflag=1)&(openall=1)&zidong) dakai(); /早上(

10、设定值)或者光线大于设定值打开窗帘 while(zidong=0&(kai=1|guan=1) /手动 gkey();while(zidong=0&kai=1&openall=1)/手动下打开 gkey(); dakai(); if(openall=0)break; while(zidong=0&guan=1&closeall=0)/手动下关闭 gkey(); guanbi(); if(closeall=1)break; 4.9小结本设计的模块较多,要完成整体设计,必须模块化设计。在开始,写一个简单的液晶12864的程序调试,因为利用它可以调试并显示其他模块的工作情况并显示出来。首先,进行显示

11、界面的规划、进行红外遥控解码、功能键等程序的编写,编写好DS1302的工作程序。然后,进行光线强度传感器、湿度传感器、红外对管程序的设计。最后,把各个模块程序加入的主程序中完成整体程序的设计。5 系统调试5.1各模块调试5.1.1电机模块调试电动机模块P1 =(P1&0 x0f)|(0 xf0&FFWj使得P1的高字节(FFWj的值依j的变化次循环)在不影响P1低字节的变化,去驱动步进电机。调节延时函数即控制电动机转速。FFW数组的值为0 x1f,0 x3f,0 x2f,0 x6f,0 x4f,0 xcf,0 x8f,0 x9f,这样满足电动机正转。同理同理可以利用REV数组的值为0 x9f,

12、0 x8f,0 xcf,0 x4f,0 x6f,0 x2f,0 x3f,0 x1f完成电动机反转。5.1.2时钟模块调试经过24小时过5秒的走时,测出和网络时间吻合,如图5.1时钟电路和程序正常。测试前的走时测试前的走时24小时之后的走时图5.1 时钟走时测试调试5.1.3湿度模块调试图5.2所示为室内湿度值和向湿度传感器加湿气的比较(湿度值55%RH增加到81%RH),湿度传感器模块工作正常。室内湿度值室内湿度值加湿气后的湿度值图5.2 湿度传感器调试5.1.4光线模块调试 在对着窗子较强的光线强度和室内灯光调试对比(光线强度由224Lx减少到148Lx)测试图如图5.3所示。图5.3 光线

13、强度传感器测试调试图5.3 光线强度传感器测试调试5.1.5红外遥控按键解码及调试将遥控器按键面板如图5.4所示的按键解码,其对应的键值为图5.5所示。00FF400FF463900FF473800FF443B00FF403F00FF433C00FF077800FF156A00FF097600FF166900FF199600FF0D7200FF0C7300FF186700FF5E2100FF087700FF1C6300FF5A2500FF432D00FF522D00FF4A35开 开 停 关 手/自 时间 确定 0 设置 1 2 3 4 5 6 7 8 9 图5.4 遥控版面重新设计图5.5

14、遥控解码值5.1.6将电路按照图3.12连接起来,测得P00和P01的电压都0.2V,用一张透光性不强的布料穿过红外对管,此时,接收管截止,测得P00和P01的电压都4.6V。2个全局变量openall(完全打开)和closeall(完全关闭)分别为P00和P01的值,用于反馈信号(0.2V为低电平、4.6V为高电平),此时能够使得电动机在窗帘完全打开和完全关闭时停下来。5.2系统整体调试经模块调试,各模块的工作正常。将整体程序烧录,系统整体整体工作如下:首先,程序初始化,其包括单片机、液晶、各传感器等模块的初始化。然后,进入界面后按照DS1302原有的时间进行走时,该界面也提供一个万年历的功

15、能,可以有用遥控查看时间(包括年、月、日、时、分、秒、星期的查看),如果不进行时间调整,就直接进入自动模式和手动模式的任意切换,默认下为自动模式。其中,图5.6为用遥控设置预设值(最适宜的光线强度值、最大湿度值、早晚晚开窗时间)的工作界面;图5.7 为自动模式下光强变化工作图片,预设置的最适宜光强为150Lx,室内光强控制在窗帘在150+20Lx,如大于170就关闭窗帘调整,小于130则打开窗帘调整。图5.8 是手动模式下关窗工作图片,在此工作模式下,窗帘的开关不受预设值控制,只可以用遥控进行开关或者停等操作。图5.6遥控设置预设值工作图片图5.6遥控设置预设值工作图片图5.7 自动模式下光强

16、变化工作图片图5.7 自动模式下光强变化工作图片图5.8 手动模式下关窗工作图片图5.8 手动模式下关窗工作图片5.3小结经过前面几章的工作,调试阶段很顺利的进行。本章节先对显示模块、时钟模块、传感器等功能模块电路分别调试,然后整体调试直到调试成功。该控制器的显示模块、时钟模块、遥控器模块、电动机模和各传感器等都能正常工作,并且设计的功能和结果都达到了预期目的。该设计具体能经行光线强度检测、温湿度检测、红外遥控远程控制;具有时钟定时及万年历功能、各参数(光线强度、湿度、手动和自动工作模式、万年历等)的实时显示功能;以及窗帘完全关闭和打开的自动检测和控制。最实用的是,其可以根据自己设定的光线强度

17、值自动控制窗帘的打开程度;当湿度过大时能打开窗帘;早晚定时开关窗帘。最终在模块化设计和不断调试中完成各项指标和功能。6 结束语6.1 结论本设计以STC89C54RD+为主控芯片,利用数字光强度、湿度、温度、红外对管等传感器为外围元件,经过信号电量转换送人单片机,然后利用单片机发送控制信号驱动电机的转动, 最终完成了以下功能:光线强度检测:通过光线强度传感器实时检测光线强弱,控制窗帘打开的合适程度,为室内提供设定的光线强度;时钟定时及万年历功能:能提供一个简单的万年历功能并能够定时早晚开关窗帘;红外遥控远程控制:可以用遥控进行窗帘的开和关,以及各个参数的设置;湿度检测:能完成湿度检测,当房屋内

18、湿度太大能自动打开窗帘进行通风;各参数(光线强度、湿度、工作模式、万年历等)的实时显示; 窗帘的完全关闭和打开的自动检测及控制等。6.2 展望本次设计的电动机模块是模拟的有较大力矩的电动机,如果把该设计投入使用,则需要将它换成实际需要的电动机用控制脉冲控制即可。本设计本来是完成智能窗的设计,由于缺少机械的器件,换成了智能窗帘控制部分的设计,如果有需要可以加上滑轮组和玻璃窗即可完成设计。本设计还可以用IOIO for Android Google IO PIC单片机进行设计,它可以代替本设计中的红外遥控完成无线控制。随着Android设备的快速增加,用手机等Android设备去控制窗帘,可以显得

19、更加智能和方便。由于本学期的时间被耽搁,很遗憾没去整合Android知识,直接用学过的51单片机进行了设计,希望以后有空能完成Android系统的智能窗控制器的设计。参考文献1 孙向滨智能家居控制系统展望J HYPERLINK 01:8088/QK/90436X/index.asp?CSID=%7bBB7CC176-C7F8-4E3F-A833-E07233A54A53%7d 科协论坛,2012(9):30-312 侯海涛国内外智能家居发展现状J HYPERLINK 01:8088/QK/90436X/index.asp?CSID=%7bBB7CC176-C7F8-4E3F-A833-E072

20、33A54A53%7d 建材发展导向,2004(5):92-933 冯旭升奥兰AL.CK01的智能窗帘机J HYPERLINK 01:8088/QK/90436X/index.asp?CSID=%7bBB7CC176-C7F8-4E3F-A833-E07233A54A53%7d 住宅科技,2003(11):36-374 HYPERLINK javascript:WriterSearch(李胜多); 李胜多, HYPERLINK javascript:WriterSearch(张还); 张还, HYPERLINK javascript:WriterSearch(佟春明); 佟春明基于PLC的多功

21、能智能窗的设计J青岛农业大学学报(自然科学版),2010,27(1):84-885 陈海松, HYPERLINK javascript:WriterSearch(夏继媛); 夏继媛基于Zigbee技术的智能窗帘网络化控制系统J电子设计工程,2012,20(15):136-1386 HYPERLINK /book/search_pub.php?category=01&key2=%CD%F5%BF%A1%BD%DC&order=sort_xtime_desc t _blank 王俊杰传感器与检测技术M北京: HYPERLINK /book/search_pub.php?category=01&ke

22、y3=%C7%E5%BB%AA%B4%F3%D1%A7%B3%F6%B0%E6%C9%E7&order=sort_xtime_desc t _blank 清华大学出版社,20117 HYPERLINK 08:81/ZK/search.aspx?Query=%e9%99%88%e6%97%a6%e8%8a%b1&Type=A 陈旦花单片机最小系统的设计与应用J HYPERLINK 08:81/ZK/journal.aspx?q=/86302X/ t _blank 无线互联科技,2012(10):103-1048 李伟跃基于时钟芯片 DS1302 的万年历的设计J技术创新,2012(9):20-2

23、19 HYPERLINK javascript:WriterSearch(云中华); 云中华, HYPERLINK javascript:WriterSearch(白天蕊); 白天蕊基于BH1750FVI的室内光照强度测量仪J HYPERLINK 01:8088/QK/83588X/index.asp?CSID=%7bF9F6BF1C-F1D1-441E-98D1-5BF0B9C77DA3%7d 单片机与嵌入式系统应用,2012,12(6):27-2910 倪健,董强编码解码技术在红外遥控器中的实现N中国民航飞行学院学报,2004,15(1):35-3611 HYPERLINK 08:81/Z

24、K/search.aspx?Query=%e6%9c%b1%e5%bf%97%e4%bc%9f&Type=A 朱志伟, HYPERLINK 08:81/ZK/search.aspx?Query=%e5%88%98%e6%b9%98%e4%ba%91&Type=A 刘湘云基AT89S51的红外遥控解码的实现J HYPERLINK 01:8088/QK/83588X/index.asp?CSID=%7bF9F6BF1C-F1D1-441E-98D1-5BF0B9C77DA3%7d 科技信息,2009(34):109-11212 郭豫荣温湿度传感器的原理及应用J HYPERLINK 01:8088/

25、QK/83588X/index.asp?CSID=%7bF9F6BF1C-F1D1-441E-98D1-5BF0B9C77DA3%7d 电子元器件应用,2012,14(11):35-5613 王晓明电动机的单片机控制M北京:北京航空航天大学出版社,200214 HYPERLINK javascript:WriterSearch(刘瑞); 王兆安,刘进军 HYPERLINK 08:81/qk/97196A/201105/38181077.html t _blank 电力电子技术M HYPERLINK 08:81/ZK/journal.aspx?q=/97196A/ t _blank 北京:机械工

26、程出版社,201115 HYPERLINK /book/search_pub.php?category=01&key2=%CE%C2%D7%D3%EC%F7&order=sort_xtime_desc t _blank 温子祺51单片机C语言创新教程M北京: HYPERLINK /book/search_pub.php?category=01&key3=%B1%B1%BE%A9%BA%BD%BF%D5%BA%BD%CC%EC%B4%F3%D1%A7%B3%F6%B0%E6%C9%E7&order=sort_xtime_desc t _blank 航空航天大学出版社,2011致 谢该控制器设计的

27、最终结果达到了预期的目的,在这过程中也遇到很多的困难,在此衷心感谢我的指导老师严文娟的悉心指导,从论文的选题、文献的采集、总体设计、实物的制作、元件的购买、论文结构的布局到论文定稿,从标题到标点,内容到格式,她都费尽了心血。感谢严老师的辛勤栽培和孜孜教诲,在她的支持和帮助下顺利地完本设计系统的设计及论文撰写。在此,还要感谢长江师范学院物理学与电子工程学院和所有老师、同学们的支持,感谢他们在技术上的指导和为我们提供软硬件的支持。特别感谢实验室的各位老师对该设计做PCB由于自身专业水平实际应用能力及经验有限,整篇论文肯定存在尚未发现的缺点和错误。恳请阅读此篇论文的老师、同学,多予指正,不胜感激!附

28、录A 原理图、印制板图和实物图原理图:印制板图:实物图及实物工作图:成品图:工作图自动模式自动模式手动模式窗帘打开查看万历年窗帘打开查看万历年参数设置参数设置附录B 元件清单CommentValueDesignatorFootprint晶振11.0591MHZB1R38晶振32.768KZB2R38瓷片电容CapacitorC1, C2VP32-3.2电解电容CapacitorC3CAPR5-4X53V电源3VCR2032PCBComponent_1 - duplicate - duplicate发光二极管Typical BLUE SiC LEDD13.5X2.8X1.9红外对管发射管-D2,

29、 D43.5X2.8X1.9红外对管接收管-D3, D5TO-220_A排阻1KR0HDR1X9电阻1K(R1,R4),10K,4.7K(R5-R8),220(R9,R11),9.1k,(R10,R12)R1, R2, R4,R5, R6, R7, R8, R9, R10, R11, R12AXIAL-0.4电位器1KR3PCBComponent_1 - duplicate3按键-S0 ,S1, S2, S3, S4PCBComponent_1 - duplicate4按钮-S5PCBComponent_1 - duplicate4单片机STC89C54U1DIP40时钟芯片Trickle C

30、harge Timekeeping Chip ,DS1302U2DIP8红外接收头和遥控器1838TU3HDR1X3H湿度传感器DHT11U4HDR1X4光线强度传感器BH1750FVIU5HDR1X5电动机驱动芯片ULN2003ADU6D016液晶显示带中文字库12864液晶12864HDR1X20注:不包括电源元件清单附录C 使用说明书接上电源后,进行初始化,默认工作在自动模式:通过按键可以调整万年历的时间设置和查看;通过遥控可完成设置改控制器的工作参数(最适宜的光线强度值、最大湿度值、早晚开窗时间等);在12864的界面上能对各参数的实时显示;在自动模式下预设值中,到开窗时间就打开窗帘,

31、到关窗时间就关闭窗帘。有一个最适宜的光强度值,可根据实际的需要设点其值的大小。在开窗和关窗的设定值之间,如果高于设定湿度最大值,就会打开窗帘进行通风。按下遥控的手动和自动键,就可进行手动模式和自动模式的切换,在手动模式下可随意开关窗帘,不受各预设参数的影响,按下“开”就打开,按下“关”就关闭,按下“停”就停止工作。根据需要可以调滑动变阻器的值,改变12864的显示的亮暗程度。本设计包含有电源模块、光线传感器模块、温湿度传感器模块、红外遥控器模块、红外对管模块,必要时可分别对其维护。光线强度可以根据环境照度值(阴天室内:550;阴天室外:50500;晴天室内:1001000;夏季中午太阳光下的照

32、度:约为10*6次方;阅读书刊时所需的照度:5060;家用摄像机标准照度:1400)进行设定自己要求。可以根据最有利的防病、治病环境(40%55%RH;图书、文物保管环境:40%-60%RH;棉毛织品存放:40%-60%RH;糖果、点心存放:50%60%RH;蔬菜、水果存放:50%70%RH;粮食存放:50%70%RH)设定开窗的最大湿度值。附录D 程序主要程序:#include #include #include #include #include #include #define uchar unsigned char#define uint unsigned int#define Sla

33、veAddress 0 x46 uchar k4flag; uchar dayflag; uchar flag_num=0; uchar arrows_x=1; uchar line_num=4;uchar row_num=5; uchar set_flag,kai,guan,shoudong,zidong=1,wangnianli;uint disp4;uchar k1;uchar plus=0,sub=0;uchar sum=0;uchar nian,yue,ri,xq,shi,fen,miao;uchar nian1,yue1,ri1,xq1,shi1,fen1,miao1;void x

34、ianxq(uchar xq);char read_datadht(); /按键sbit key3=P10;sbit key2=P11;sbit key1=P12;sbit key4=P13;sbit openall=P00;sbit closeall=P01;sbit clk=P34;sbit IO=P35;sbit rst=P36;sbit ACC0=ACC0;sbit ACC7=ACC7;void delay(uchar z)uint x,y;for(x=z;x0;x-) for(y=110;y0;y-);sbit DHT= P37; sbit SCL=P30; sbit SDA=P31

35、; sbit LCD_RS=P07; sbit LCD_RW=P06;sbit LCD_EN=P05; sbit LCD_PSB = P04;sbit LCD_RST = P03;uchar idata str1= ;/用来存放湿度数据unsigned char idata str2= ;/用来存放温度数据 unsigned char idata str3= ;/用来存放光强数据unsigned char idata str4=自动; unsigned char idata str5=手动;unsigned char idata am3=7,30,0;unsigned char idata p

36、m3=20,0,0;unsigned char idata shidu1=70;unsigned char idata guangqiang2=1,50;unsigned char code dis2 = 湿度 %RH ;unsigned char code dis3 = 光强 LX ;unsigned char code dis4 = 窗帘模式: ;unsigned long idata zao_time_flag;/早上打开窗帘的时间标志unsigned long idata now_time_flag;unsigned long idata wan_time_flag; /晚上打开窗帘的

37、时间标志typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned char unint8; typedef unsigned char unint16; BYTE BUF8; uchar ge,shi2,bai,qian,wan; int dis_data; unint8 TH_data,TL_data,RH_data,RL_data,CK_data;unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;unsigned int temp_s,temp_w;unint8

38、 com_data,untemp,temp;unint8 respond; uchar shiZ,shiX,wenZ,wenX,check;uchar tr_shiZ,tr_shiX,tr_wenZ,tr_wenX;uchar flag;/定义红外解码所用变量char irtime; uchar startflag,bitnum,irreceok,irprosok,l;uchar idata irdata32;uchar idata ircode4;uchar idata dis88; void timer0init(void)/计时器初始化TMOD=0X02;TH0=0X00;TL0=0X0

39、0;ET0=1;EA=1;TR0=1;void int0init(void) IT1=1;EX1=1;EA=1;void irpros(void) uchar k,i,j;uchar value;k=1;for(j=0;j4;j+)for(i=0;i1;if(irdatak6)value=value | 0 x80;k+;ircodej=value;irprosok=1;/以下为中断服务程序/void timer0() interrupt 1irtime+;void int0 () interrupt 2 if(startflag) if(irtime32) bitnum=0;irdatabi

40、tnum=irtime;irtime=0;bitnum+;if(bitnum=33)bitnum=0;irreceok=1; else startflag=1;irtime=0; /*延时程序*/void delayNOP()_nop_(); _nop_(); _nop_(); _nop_(); void delay_ms(unsigned char ms) unsigned char i; while(ms-) for(i = 0; i0)lcd_wdata(*s);s+;void lcd_pos(unsigned char X,unsigned char Y)unsigned char p

41、os; if (X=1) pos=0 x80; else if(X=2) pos=0 x90;else if(X=3)pos=0 x88; else if(X=4)pos=0 x98; lcd_wcmd(Y | pos); /*12864end*/*BH1750程序段*/void BH1750_Start()/起始信号 SDA = 1; /拉高数据线/ SCL = 1; /拉高时钟线/ Delay5us(); /延时/ SDA = 0; /产生下降沿/ Delay5us(); / /延时/ SCL = 0; / /拉低时钟线/void BH1750_Stop() /停止信号 SDA = 0;

42、SCL = 1; Delay5us(); SDA = 1; /产生上升沿 Delay5us(); void BH1750_SendACK(bit ack)/发送应答信号入口参数:ack (0:ACK 1:NAK) SDA = ack; SCL = 1; Delay5us(); SCL = 0; /拉低时钟线 Delay5us(); bit BH1750_RecvACK()/接收应答信号 SCL = 1; Delay5us(); CY = SDA; SCL = 0; Delay5us(); return CY;void BH1750_SendByte(BYTE dat) /向IIC总线发送一个字

43、节数据 BYTE i; for (i=0; i8; i+) dat = 1; SDA = CY; /送数据口 SCL = 1; Delay5us(); SCL = 0; Delay5us(); BH1750_RecvACK();BYTE BH1750_RecvByte()/从IIC总线接收一个字节数据 BYTE i; BYTE dat = 0; SDA = 1; /使能内部上拉,准备读取数据, for (i=0; i8; i+) dat = 1; SCL = 1; Delay5us(); dat |= SDA; SCL = 0; Delay5us(); return dat;void Sing

44、le_Write_BH1750(uchar REG_Address) BH1750_Start(); /起始信号 BH1750_SendByte(SlaveAddress); BH1750_SendByte(REG_Address); / BH1750_SendByte(REG_data); BH1750_Stop(); /*/*单字节读取*/*/uchar Single_Read_BH1750(uchar REG_Address) uchar REG_data; BH1750_Start(); BH1750_SendByte(SlaveAddress); BH1750_SendByte(RE

45、G_Address); BH1750_Start(); BH1750_SendByte(SlaveAddress+1); /发送设备地址+读信号 REG_data=BH1750_RecvByte(); /读出寄存器数据BH1750_SendACK(1); BH1750_Stop(); return REG_data; void Multiple_read_BH1750(void)/连续读出BH1750内部数据 uchar i; BH1750_Start(); BH1750_SendByte(SlaveAddress+1); for (i=0; i3; i+) BUFi = BH1750_Rec

46、vByte(); if (i = 3) BH1750_SendACK(1); else BH1750_SendACK(0); /回应ACK BH1750_Stop(); / /停止信号 Delay5ms();void Init_BH1750()/初始化BH1750 Single_Write_BH1750(0 x01); /*BH1750程序段end*/*DHT11温湿度传感器*void read_init()DHT=0; delay_ms(21);DHT=1; delay_10us();delay_10us();delay_10us();delay_10us();DHT=1;if(!DHT)

47、flag=2;while(!DHT)&flag+); flag=2;while(DHT&flag+);tr_shiZ=read_datadht();tr_shiX=read_datadht();tr_wenZ=read_datadht();tr_wenX=read_datadht();check=read_datadht();DHT=0;delay(20);/采集完数据后 char read_datadht()uchar i,num,tempp;num=0;for(i=0;i8;i+)flag=2;while(!DHT)&flag+); delay_10us();/延时判断0还是1delay_

48、10us();delay_10us(); delay_10us();if(DHT=1) tempp=1;flag=2;while(DHT&flag+);elsetempp=0;num0;i-)IO=ACC0;clk=1;clk=0;ACC=ACC1;return;uchar OutputByte() uchar i;for(i=8;i0;i-)ACC=ACC1;ACC7=IO;clk=1;clk=0; return(ACC);void write_ds1302(uchar add,uchar date) rst=0;_nop_();clk=0;_nop_();rst=1; InputByte(

49、add);_nop_();InputByte(date);clk=1;_nop_();rst=0;uchar read_ds1302(uchar add) uchar date;rst=0;_nop_();clk=0;_nop_();rst=1;InputByte(add);date=OutputByte();clk=1;_nop_();rst=0;return(date);void BCDTO(uchar num1,uchar num2) num2=(num1&0 x70)4)*10+(num1&0 x0f);/return(num2);void TOBCD(uchar num1,uchar

50、 num2)num1=(num2/10)4|(num2%10);/return(num1);void write_time()write_ds1302(0 x8e,0 x00);/TOBCD(nian1,nian);nian1=(nian/10)4|(nian%10);write_ds1302(0 x8c,nian1);/年/TOBCD(yue1,yue);yue1=(yue/10)4|(yue%10);write_ds1302(0 x88,yue1);/月/TOBCD(ri1,ri);ri1=(ri/10)4|(ri%10);write_ds1302(0 x86,ri1);/日/TOBCD(

51、xq1,xq);xq1=(xq/10)4|(xq%10);write_ds1302(0 x8A,xq1);/星期/TOBCD(shi1,shi);shi1=(shi/10)4|(shi%10);write_ds1302(0 x84,shi1);/时/TOBCD(fen1,fen);fen1=(fen/10)4|(fen%10);write_ds1302(0 x82,fen1);/分/TOBCD(miao1,miao);miao1=(miao/10)4)*10+(miao1&0 x0f);fen1=read_ds1302(0 x83);/分/BCDTO(fen1,fen);fen=(fen1&0

52、 x70)4)*10+(fen1&0 x0f);shi1=read_ds1302(0 x85);/时/BCDTO(shi1,shi);shi=(shi1&0 x70)4)*10+(shi1&0 x0f);xq1=read_ds1302(0 x8b);/BCDTO(xq1,xq);xq=(xq1&0 x70)4)*10+(xq1&0 x0f); /write_ds1302(0 x8a,xq+1);ri1=read_ds1302(0 x87);/BCDTO(ri1,ri);ri=(ri1&0 x70)4)*10+(ri1&0 x0f);yue1=read_ds1302(0 x89);/BCDTO(

53、yue1,yue);yue=(yue1&0 x70)4)*10+(yue1&0 x0f);nian1=read_ds1302(0 x8d);/BCDTO(nian1,nian);nian=(nian1&0 xf0)4)*10+(nian1&0 x0f);void xianxq(uchar xq) lcd_wcmd(0 x8e);if(xq=1)xianshi(一);if(xq=2)xianshi(二);if(xq=3)xianshi(三);if(xq=4)xianshi(四);if(xq=5)xianshi(五);if(xq=6)xianshi(六);if(xq=7)xianshi(日);uc

54、har keyscan()/键盘控制if(key1=0)delay(45);if(key1=0)while(!key1);k1+;switch(k1)case 1:lcd_wcmd(0 x92);lcd_wcmd(0 x0d );break;case 2:lcd_wcmd(0 x94);break;case 3:lcd_wcmd(0 x96);break;case 4:lcd_wcmd(0 x8e);break;case 5:lcd_wcmd(0 x9a);break;case 6:lcd_wcmd(0 x9c);break;case 7:lcd_wcmd(0 x9e);break;case

55、8:k1=0;lcd_wcmd(0 x0c);write_time(); break;if(k1!=0)if(key2=0)delay(45);if(key2=0)while(!key2);if(k1=1)/niannian+;if(nian=100)nian=0;/qiehuan(1,nian);/write_sj(0 x92,nian);write_sj1(nian);lcd_wcmd(0 x92);if(k1=2)/yueyue+;if(yue=13)yue=0;/qiehuan(1,yue);/write_sj(0 x94,yue);write_sj1(yue);lcd_wcmd(0

56、x94);if(k1=3)/riri+;if(ri=31)ri=0;/write_sj(0 x96,ri);/qiehuan(1,ri);write_sj1(ri);lcd_wcmd(0 x96);if(k1=4)/xqxq+;if(xq=8)xq=1;xianxq(xq);lcd_wcmd(0 x8e);if(k1=5)/shishi+;if(shi=24)shi=0;/write_sj(0 x9a,shi);/qiehuan(1,shi);write_sj1(shi);lcd_wcmd(0 x9a);if(k1=6)/fenfen+;if(fen=60)fen=0;/write_sj(0

57、x9c,fen);/qiehuan(1,fen);write_sj1(fen);lcd_wcmd(0 x9c);if(k1=7)/miaomiao+;if(miao=60)miao=0;/write_sj(0 x9e,miao);/qiehuan(1,miao);write_sj1(miao);lcd_wcmd(0 x9e);if(key3=0)delay(45);if(key3=0)while(!key3);if(k1=1)/niannian-;if(nian=-1)nian=99;/write_sj(0 x92,nian);/qiehuan(2,nian);write_sj1(nian);

58、lcd_wcmd(0 x92);if(k1=2)/yueyue-;if(yue=0)yue=12;/write_sj(0 x94,yue);/qiehuan(2,yue);write_sj1(yue);lcd_wcmd(0 x94);if(k1=3)/riri-;if(ri=-1)ri=30;/write_sj(0 x96,ri);/qiehuan(1,ri);write_sj1(ri);lcd_wcmd(0 x96);if(k1=4)/xqxq-;if(xq=0)xq=7;xianxq(xq);lcd_wcmd(0 x8e);if(k1=5)/shishi-;if(shi=-1)shi=23

59、;/write_sj(0 x9a,shi);/qiehuan(2,shi);write_sj1(shi);lcd_wcmd(0 x9a);if(k1=6)/fenfen-;if(fen=-1)fen=59;/write_sj(0 x9c,fen);/qiehuan(2,fen);write_sj1(fen);lcd_wcmd(0 x9c);if(k1=7)/miaomiao-;if(miao=-1)miao=59;/write_sj(0 x9e,miao);/qiehuan(2,miao);write_sj1(miao);lcd_wcmd(0 x9e);/*DS1302及按键时间调整阶段end

60、*/*电动机*/uchar code FFW=0 x1f,0 x3f,0 x2f,0 x6f,0 x4f,0 xcf,0 x8f,0 x9f; /正转数组uchar code REV= 0 x9f,0 x8f,0 xcf,0 x4f,0 x6f,0 x2f,0 x3f,0 x1f;/正转数组void DelayMS(uint ms) uchar i; while(ms-) for(i=0;i2) flag_num=0; sum=sum*10+buf; for(i=0;i1) zidong=0; if(wangnianli1) wangnianli=0; for(i=0;i4;i+)/ 防止进入

温馨提示

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

评论

0/150

提交评论